[PATCH] Fix up TLB flush filter disabling

I checked with AMD and they requested to only disable it for family 15.
Also disable it for i386 too. And some style fixes.

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Andi Kleen and committed by Linus Torvalds 7d318d77 5acbc5cb

+29 -10
+16
arch/i386/kernel/cpu/amd.c
··· 28 28 int mbytes = num_physpages >> (20-PAGE_SHIFT); 29 29 int r; 30 30 31 + #ifdef CONFIG_SMP 32 + unsigned long value; 33 + 34 + /* Disable TLB flush filter by setting HWCR.FFDIS on K8 35 + * bit 6 of msr C001_0015 36 + * 37 + * Errata 63 for SH-B3 steppings 38 + * Errata 122 for all steppings (F+ have it disabled by default) 39 + */ 40 + if (c->x86 == 15) { 41 + rdmsrl(MSR_K7_HWCR, value); 42 + value |= 1 << 6; 43 + wrmsrl(MSR_K7_HWCR, value); 44 + } 45 + #endif 46 + 31 47 /* 32 48 * FIXME: We should handle the K5 here. Set up the write 33 49 * range and also turn on MSR 83 bits 4 and 31 (write alloc,
+12 -10
arch/x86_64/kernel/setup.c
··· 831 831 #endif 832 832 } 833 833 834 - #define HWCR 0xc0010015 835 - 836 834 static int __init init_amd(struct cpuinfo_x86 *c) 837 835 { 838 836 int r; ··· 839 841 #ifdef CONFIG_SMP 840 842 unsigned long value; 841 843 842 - // Disable TLB flush filter by setting HWCR.FFDIS: 843 - // bit 6 of msr C001_0015 844 - // 845 - // Errata 63 for SH-B3 steppings 846 - // Errata 122 for all(?) steppings 847 - rdmsrl(HWCR, value); 848 - value |= 1 << 6; 849 - wrmsrl(HWCR, value); 844 + /* 845 + * Disable TLB flush filter by setting HWCR.FFDIS on K8 846 + * bit 6 of msr C001_0015 847 + * 848 + * Errata 63 for SH-B3 steppings 849 + * Errata 122 for all steppings (F+ have it disabled by default) 850 + */ 851 + if (c->x86 == 15) { 852 + rdmsrl(MSR_K8_HWCR, value); 853 + value |= 1 << 6; 854 + wrmsrl(MSR_K8_HWCR, value); 855 + } 850 856 #endif 851 857 852 858 /* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
+1
include/asm-x86_64/msr.h
··· 234 234 #define MSR_K8_TOP_MEM1 0xC001001A 235 235 #define MSR_K8_TOP_MEM2 0xC001001D 236 236 #define MSR_K8_SYSCFG 0xC0010010 237 + #define MSR_K8_HWCR 0xC0010015 237 238 238 239 /* K6 MSRs */ 239 240 #define MSR_K6_EFER 0xC0000080