|
@@ -803,6 +803,12 @@ static void init_speculation_control(struct cpuinfo_x86 *c)
|
|
set_cpu_cap(c, X86_FEATURE_STIBP);
|
|
set_cpu_cap(c, X86_FEATURE_STIBP);
|
|
set_cpu_cap(c, X86_FEATURE_MSR_SPEC_CTRL);
|
|
set_cpu_cap(c, X86_FEATURE_MSR_SPEC_CTRL);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (cpu_has(c, X86_FEATURE_AMD_SSBD)) {
|
|
|
|
+ set_cpu_cap(c, X86_FEATURE_SSBD);
|
|
|
|
+ set_cpu_cap(c, X86_FEATURE_MSR_SPEC_CTRL);
|
|
|
|
+ clear_cpu_cap(c, X86_FEATURE_VIRT_SSBD);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
void get_cpu_cap(struct cpuinfo_x86 *c)
|
|
void get_cpu_cap(struct cpuinfo_x86 *c)
|
|
@@ -992,7 +998,8 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
|
|
rdmsrl(MSR_IA32_ARCH_CAPABILITIES, ia32_cap);
|
|
rdmsrl(MSR_IA32_ARCH_CAPABILITIES, ia32_cap);
|
|
|
|
|
|
if (!x86_match_cpu(cpu_no_spec_store_bypass) &&
|
|
if (!x86_match_cpu(cpu_no_spec_store_bypass) &&
|
|
- !(ia32_cap & ARCH_CAP_SSB_NO))
|
|
|
|
|
|
+ !(ia32_cap & ARCH_CAP_SSB_NO) &&
|
|
|
|
+ !cpu_has(c, X86_FEATURE_AMD_SSB_NO))
|
|
setup_force_cpu_bug(X86_BUG_SPEC_STORE_BYPASS);
|
|
setup_force_cpu_bug(X86_BUG_SPEC_STORE_BYPASS);
|
|
|
|
|
|
if (x86_match_cpu(cpu_no_meltdown))
|
|
if (x86_match_cpu(cpu_no_meltdown))
|