aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel
diff options
context:
space:
mode:
authorBorislav Petkov <borislav.petkov@amd.com>2012-08-06 13:00:39 -0400
committerH. Peter Anvin <hpa@zytor.com>2012-08-06 22:18:39 -0400
commit057237bb35a605d795fd787868a1088705f26ee5 (patch)
tree952a863f6c8ced5ad8e4b28b6c195c4b324e5bad /arch/x86/kernel
parentb46882e4c4de4813947fce940fe74af794a1eb72 (diff)
x86, cpu: Preset default tlb_flushall_shift on AMD
Run the mprotect.c microbenchmark on all our families >= K8 and preset the flushall shift variable accordingly. Signed-off-by: Borislav Petkov <borislav.petkov@amd.com> Link: http://lkml.kernel.org/r/1344272439-29080-5-git-send-email-bp@amd64.org Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r--arch/x86/kernel/cpu/amd.c13
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
740static 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
740static void __cpuinit cpu_detect_tlb_amd(struct cpuinfo_x86 *c) 751static 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
793static const struct cpu_dev __cpuinitconst amd_cpu_dev = { 806static const struct cpu_dev __cpuinitconst amd_cpu_dev = {