• Juergen Gross's avatar
    x86/alternative: Support not-feature · dda7bb76
    Juergen Gross authored
    Add support for alternative patching for the case a feature is not
    present on the current CPU. For users of ALTERNATIVE() and friends, an
    inverted feature is specified by applying the ALT_NOT() macro to it,
    e.g.:
    
      ALTERNATIVE(old, new, ALT_NOT(feature));
    
    Committer note:
    
    The decision to encode the NOT-bit in the feature bit itself is because
    a future change which would make objtool generate such alternative
    calls, would keep the code in objtool itself fairly simple.
    
    Also, this allows for the alternative macros to support the NOT feature
    without having to change them.
    
    Finally, the u16 cpuid member encoding the X86_FEATURE_ flags is not an
    ABI so if more bits are needed, cpuid itself can be enlarged or a flags
    field can be added to struct alt_instr after having considered the size
    growth in either cases.
    Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Link: https://lkml.kernel.org/r/20210311142319.4723-6-jgross@suse.com
    dda7bb76
alternative.c 34.8 KB