x86, cpu: Convert AMD Erratum 383
authorBorislav Petkov <bp@suse.de>
Wed, 20 Mar 2013 14:07:27 +0000 (15:07 +0100)
committerH. Peter Anvin <hpa@zytor.com>
Tue, 2 Apr 2013 17:12:54 +0000 (10:12 -0700)
Convert the AMD erratum 383 testing code to the bug infrastructure. This
allows keeping the AMD-specific erratum testing machinery private to
amd.c and not export symbols to modules needlessly.

Signed-off-by: Borislav Petkov <bp@suse.de>
Link: http://lkml.kernel.org/r/1363788448-31325-6-git-send-email-bp@alien8.de
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
arch/x86/include/asm/cpufeature.h
arch/x86/include/asm/processor.h
arch/x86/kernel/cpu/amd.c
arch/x86/kvm/svm.c

index a2b65c1..4cfb5c9 100644 (file)
 #define X86_BUG_F00F           X86_BUG(0) /* Intel F00F */
 #define X86_BUG_FDIV           X86_BUG(1) /* FPU FDIV */
 #define X86_BUG_COMA           X86_BUG(2) /* Cyrix 6x86 coma */
+#define X86_BUG_AMD_TLB_MMATCH X86_BUG(3) /* AMD Erratum 383 */
 
 #if defined(__KERNEL__) && !defined(__ASSEMBLY__)
 
index 4e2fa28..e044ef3 100644 (file)
@@ -974,7 +974,6 @@ unsigned long calc_aperfmperf_ratio(struct aperfmperf *old,
  * AMD errata checking
  */
 #ifdef CONFIG_CPU_SUP_AMD
-extern const int amd_erratum_383[];
 extern const int amd_erratum_400[];
 extern bool cpu_has_amd_erratum(const int *);
 
index fa96eb0..85f84e1 100644 (file)
@@ -513,6 +513,8 @@ static void __cpuinit early_init_amd(struct cpuinfo_x86 *c)
 #endif
 }
 
+static const int amd_erratum_383[];
+
 static void __cpuinit init_amd(struct cpuinfo_x86 *c)
 {
        u32 dummy;
@@ -727,6 +729,9 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
                rdmsrl_safe(MSR_AMD64_BU_CFG2, &value);
                value &= ~(1ULL << 24);
                wrmsrl_safe(MSR_AMD64_BU_CFG2, value);
+
+               if (cpu_has_amd_erratum(amd_erratum_383))
+                       set_cpu_bug(c, X86_BUG_AMD_TLB_MMATCH);
        }
 
        rdmsr_safe(MSR_AMD64_PATCH_LEVEL, &c->microcode, &dummy);
@@ -863,9 +868,8 @@ const int amd_erratum_400[] =
                            AMD_MODEL_RANGE(0x10, 0x2, 0x1, 0xff, 0xf));
 EXPORT_SYMBOL_GPL(amd_erratum_400);
 
-const int amd_erratum_383[] =
+static const int amd_erratum_383[] =
        AMD_OSVW_ERRATUM(3, AMD_MODEL_RANGE(0x10, 0, 0, 0xff, 0xf));
-EXPORT_SYMBOL_GPL(amd_erratum_383);
 
 bool cpu_has_amd_erratum(const int *erratum)
 {
index e1b1ce2..7d39d70 100644 (file)
@@ -555,7 +555,7 @@ static void svm_init_erratum_383(void)
        int err;
        u64 val;
 
-       if (!cpu_has_amd_erratum(amd_erratum_383))
+       if (!static_cpu_has_bug(X86_BUG_AMD_TLB_MMATCH))
                return;
 
        /* Use _safe variants to not break nested virtualization */