diff options
| -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 = { |
