x86/CPU: Change query logic so CPUID is enabled before testing
Presently we check first if CPUID is enabled. If it is not already enabled, then we next call identify_cpu_without_cpuid() and clear X86_FEATURE_CPUID. Unfortunately, identify_cpu_without_cpuid() is the function where CPUID becomes _enabled_ on Cyrix 6x86/6x86L CPUs. Reverse the calling sequence so that CPUID is first enabled, and then check a second time to see if the feature has now been activated. [ bp: Massage commit message and remove trailing whitespace. ] Suggested-by: Andy Lutomirski <luto@amacapital.net> Signed-off-by: Matthew Whitehead <tedheadster@gmail.com> Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Andy Lutomirski <luto@amacapital.net> Cc: David Woodhouse <dwmw@amazon.co.uk> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/20180921212041.13096-3-tedheadster@gmail.com
This commit is contained in:
		
							parent
							
								
									03b099bdcd
								
							
						
					
					
						commit
						2893cc8ff8
					
				| @ -1076,6 +1076,9 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c) | ||||
| 	memset(&c->x86_capability, 0, sizeof c->x86_capability); | ||||
| 	c->extended_cpuid_level = 0; | ||||
| 
 | ||||
| 	if (!have_cpuid_p()) | ||||
| 		identify_cpu_without_cpuid(c); | ||||
| 
 | ||||
| 	/* cyrix could have cpuid enabled via c_identify()*/ | ||||
| 	if (have_cpuid_p()) { | ||||
| 		cpu_detect(c); | ||||
| @ -1093,7 +1096,6 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c) | ||||
| 		if (this_cpu->c_bsp_init) | ||||
| 			this_cpu->c_bsp_init(c); | ||||
| 	} else { | ||||
| 		identify_cpu_without_cpuid(c); | ||||
| 		setup_clear_cpu_cap(X86_FEATURE_CPUID); | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user