diff options
Diffstat (limited to 'arch/x86/kernel/cpu/common.c')
| -rw-r--r-- | arch/x86/kernel/cpu/common.c | 30 | 
1 files changed, 19 insertions, 11 deletions
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index ef1b93f18ed1..e4ab2b42bd6f 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -148,6 +148,7 @@ 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_XSAVES);  	setup_clear_cpu_cap(X86_FEATURE_AVX);  	setup_clear_cpu_cap(X86_FEATURE_AVX2);  	return 1; @@ -161,6 +162,13 @@ static int __init x86_xsaveopt_setup(char *s)  }  __setup("noxsaveopt", x86_xsaveopt_setup); +static int __init x86_xsaves_setup(char *s) +{ +	setup_clear_cpu_cap(X86_FEATURE_XSAVES); +	return 1; +} +__setup("noxsaves", x86_xsaves_setup); +  #ifdef CONFIG_X86_32  static int cachesize_override = -1;  static int disable_x86_serial_nr = 1; @@ -481,26 +489,17 @@ u16 __read_mostly tlb_lld_2m[NR_INFO];  u16 __read_mostly tlb_lld_4m[NR_INFO];  u16 __read_mostly tlb_lld_1g[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 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, 1GB %d\n" -		"tlb_flushall_shift: %d\n", +		"Last level dTLB entries: 4KB %d, 2MB %d, 4MB %d, 1GB %d\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_lld_1g[ENTRIES], tlb_flushall_shift); +		tlb_lld_1g[ENTRIES]);  }  void detect_ht(struct cpuinfo_x86 *c) @@ -634,6 +633,15 @@ void get_cpu_cap(struct cpuinfo_x86 *c)  		c->x86_capability[9] = ebx;  	} +	/* Extended state features: level 0x0000000d */ +	if (c->cpuid_level >= 0x0000000d) { +		u32 eax, ebx, ecx, edx; + +		cpuid_count(0x0000000d, 1, &eax, &ebx, &ecx, &edx); + +		c->x86_capability[10] = eax; +	} +  	/* AMD-defined flags: level 0x80000001 */  	xlvl = cpuid_eax(0x80000000);  	c->extended_cpuid_level = xlvl;  |