Skip to content

Commit 8ecc497

Browse files
Dominik BrodowskiKAGA-KOKO
authored andcommitted
x86/speculation: Simplify the CPU bug detection logic
Only CPUs which speculate can speculate. Therefore, it seems prudent to test for cpu_no_speculation first and only then determine whether a specific speculating CPU is susceptible to store bypass speculation. This is underlined by all CPUs currently listed in cpu_no_speculation were present in cpu_no_spec_store_bypass as well. Signed-off-by: Dominik Brodowski <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Cc: [email protected] Cc: [email protected] Link: https://lkml.kernel.org/r/[email protected]
1 parent 0aa4846 commit 8ecc497

File tree

1 file changed

+7
-15
lines changed

1 file changed

+7
-15
lines changed

arch/x86/kernel/cpu/common.c

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -942,47 +942,39 @@ static const __initconst struct x86_cpu_id cpu_no_meltdown[] = {
942942
{}
943943
};
944944

945+
/* Only list CPUs which speculate but are non susceptible to SSB */
945946
static const __initconst struct x86_cpu_id cpu_no_spec_store_bypass[] = {
946-
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_PINEVIEW },
947-
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_LINCROFT },
948-
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_PENWELL },
949-
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_CLOVERVIEW },
950-
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_CEDARVIEW },
951947
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_SILVERMONT1 },
952948
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_AIRMONT },
953949
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_SILVERMONT2 },
954950
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_MERRIFIELD },
955951
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_CORE_YONAH },
956952
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_XEON_PHI_KNL },
957953
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_XEON_PHI_KNM },
958-
{ X86_VENDOR_CENTAUR, 5, },
959-
{ X86_VENDOR_INTEL, 5, },
960-
{ X86_VENDOR_NSC, 5, },
961954
{ X86_VENDOR_AMD, 0x12, },
962955
{ X86_VENDOR_AMD, 0x11, },
963956
{ X86_VENDOR_AMD, 0x10, },
964957
{ X86_VENDOR_AMD, 0xf, },
965-
{ X86_VENDOR_ANY, 4, },
966958
{}
967959
};
968960

969961
static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
970962
{
971963
u64 ia32_cap = 0;
972964

965+
if (x86_match_cpu(cpu_no_speculation))
966+
return;
967+
968+
setup_force_cpu_bug(X86_BUG_SPECTRE_V1);
969+
setup_force_cpu_bug(X86_BUG_SPECTRE_V2);
970+
973971
if (cpu_has(c, X86_FEATURE_ARCH_CAPABILITIES))
974972
rdmsrl(MSR_IA32_ARCH_CAPABILITIES, ia32_cap);
975973

976974
if (!x86_match_cpu(cpu_no_spec_store_bypass) &&
977975
!(ia32_cap & ARCH_CAP_SSB_NO))
978976
setup_force_cpu_bug(X86_BUG_SPEC_STORE_BYPASS);
979977

980-
if (x86_match_cpu(cpu_no_speculation))
981-
return;
982-
983-
setup_force_cpu_bug(X86_BUG_SPECTRE_V1);
984-
setup_force_cpu_bug(X86_BUG_SPECTRE_V2);
985-
986978
if (x86_match_cpu(cpu_no_meltdown))
987979
return;
988980

0 commit comments

Comments
 (0)