• Juergen Gross's avatar
    x86/mtrr: Replace vendor tests in MTRR code · 03409069
    Juergen Gross authored
    Modern CPUs all share the same MTRR interface implemented via
    generic_mtrr_ops.
    
    At several places in MTRR code this generic interface is deduced via
    is_cpu(INTEL) tests, which is only working due to X86_VENDOR_INTEL
    being 0 (the is_cpu() macro is testing mtrr_if->vendor, which isn't
    explicitly set in generic_mtrr_ops).
    
    Test the generic CPU feature X86_FEATURE_MTRR instead.
    
    The only other place where the .vendor member of struct mtrr_ops is
    being used is in set_num_var_ranges(), where depending on the vendor
    the number of MTRR registers is determined. This can easily be changed
    by replacing .vendor with the static number of MTRR registers.
    
    It should be noted that the test "is_cpu(HYGON)" wasn't ever returning
    true, as there is no struct mtrr_ops with that vendor information.
    
    [ bp: Use mtrr_enabled() before doing mtrr_if-> accesses, esp. in
      mtrr_trim_uncached_memory() which gets called independently from
      whether mtrr_if is set or not. ]
    Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
    Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/r/20230502120931.20719-7-jgross@suse.comSigned-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
    03409069
cyrix.c 4.98 KB