diff options
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/cpu/amd.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index bcd200839c90..f7e98a2c0d12 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c | |||
@@ -737,6 +737,17 @@ static unsigned int __cpuinit amd_size_cache(struct cpuinfo_x86 *c, | |||
737 | } | 737 | } |
738 | #endif | 738 | #endif |
739 | 739 | ||
740 | static void __cpuinit cpu_set_tlb_flushall_shift(struct cpuinfo_x86 *c) | ||
741 | { | ||
742 | if (!cpu_has_invlpg) | ||
743 | return; | ||
744 | |||
745 | tlb_flushall_shift = 5; | ||
746 | |||
747 | if (c->x86 <= 0x11) | ||
748 | tlb_flushall_shift = 4; | ||
749 | } | ||
750 | |||
740 | static void __cpuinit cpu_detect_tlb_amd(struct cpuinfo_x86 *c) | 751 | static void __cpuinit cpu_detect_tlb_amd(struct cpuinfo_x86 *c) |
741 | { | 752 | { |
742 | u32 ebx, eax, ecx, edx; | 753 | u32 ebx, eax, ecx, edx; |
@@ -788,6 +799,8 @@ static void __cpuinit cpu_detect_tlb_amd(struct cpuinfo_x86 *c) | |||
788 | tlb_lli_2m[ENTRIES] = eax & mask; | 799 | tlb_lli_2m[ENTRIES] = eax & mask; |
789 | 800 | ||
790 | tlb_lli_4m[ENTRIES] = tlb_lli_2m[ENTRIES] >> 1; | 801 | tlb_lli_4m[ENTRIES] = tlb_lli_2m[ENTRIES] >> 1; |
802 | |||
803 | cpu_set_tlb_flushall_shift(c); | ||
791 | } | 804 | } |
792 | 805 | ||
793 | static const struct cpu_dev __cpuinitconst amd_cpu_dev = { | 806 | static const struct cpu_dev __cpuinitconst amd_cpu_dev = { |