diff options
Diffstat (limited to 'arch/x86/kernel/cpu/common.c')
| -rw-r--r-- | arch/x86/kernel/cpu/common.c | 35 | 
1 files changed, 34 insertions, 1 deletions
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 6b9333b429b..a5fbc3c5fcc 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -144,6 +144,8 @@ static int __init x86_xsave_setup(char *s)  {  	setup_clear_cpu_cap(X86_FEATURE_XSAVE);  	setup_clear_cpu_cap(X86_FEATURE_XSAVEOPT); +	setup_clear_cpu_cap(X86_FEATURE_AVX); +	setup_clear_cpu_cap(X86_FEATURE_AVX2);  	return 1;  }  __setup("noxsave", x86_xsave_setup); @@ -452,6 +454,35 @@ void __cpuinit cpu_detect_cache_sizes(struct cpuinfo_x86 *c)  	c->x86_cache_size = l2size;  } +u16 __read_mostly tlb_lli_4k[NR_INFO]; +u16 __read_mostly tlb_lli_2m[NR_INFO]; +u16 __read_mostly tlb_lli_4m[NR_INFO]; +u16 __read_mostly tlb_lld_4k[NR_INFO]; +u16 __read_mostly tlb_lld_2m[NR_INFO]; +u16 __read_mostly tlb_lld_4m[NR_INFO]; + +/* + * tlb_flushall_shift shows the balance point in replacing cr3 write + * with multiple 'invlpg'. It will do this replacement when + *   flush_tlb_lines <= active_lines/2^tlb_flushall_shift. + * If tlb_flushall_shift is -1, means the replacement will be disabled. + */ +s8  __read_mostly tlb_flushall_shift = -1; + +void __cpuinit cpu_detect_tlb(struct cpuinfo_x86 *c) +{ +	if (this_cpu->c_detect_tlb) +		this_cpu->c_detect_tlb(c); + +	printk(KERN_INFO "Last level iTLB entries: 4KB %d, 2MB %d, 4MB %d\n" \ +		"Last level dTLB entries: 4KB %d, 2MB %d, 4MB %d\n"	     \ +		"tlb_flushall_shift is 0x%x\n", +		tlb_lli_4k[ENTRIES], tlb_lli_2m[ENTRIES], +		tlb_lli_4m[ENTRIES], tlb_lld_4k[ENTRIES], +		tlb_lld_2m[ENTRIES], tlb_lld_4m[ENTRIES], +		tlb_flushall_shift); +} +  void __cpuinit detect_ht(struct cpuinfo_x86 *c)  {  #ifdef CONFIG_X86_HT @@ -911,6 +942,8 @@ void __init identify_boot_cpu(void)  #else  	vgetcpu_set_mode();  #endif +	if (boot_cpu_data.cpuid_level >= 2) +		cpu_detect_tlb(&boot_cpu_data);  }  void __cpuinit identify_secondary_cpu(struct cpuinfo_x86 *c) @@ -947,7 +980,7 @@ static void __cpuinit __print_cpu_msr(void)  		index_max = msr_range_array[i].max;  		for (index = index_min; index < index_max; index++) { -			if (rdmsrl_amd_safe(index, &val)) +			if (rdmsrl_safe(index, &val))  				continue;  			printk(KERN_INFO " MSR%08x: %016llx\n", index, val);  		}  |