Messages in this thread Patch in this message | | | From | Borislav Petkov <> | Subject | [PATCH 3/4] x86, head_32: Remove CPUID detection from default_entry | Date | Sun, 3 Feb 2013 17:14:38 +0100 |
| |
From: Borislav Petkov <bp@suse.de>
We do that once earlier now and cache it into boot_cpu_data.cpuid_level so no need for the EFLAGS.ID toggling dance anymore.
Signed-off-by: Borislav Petkov <bp@suse.de> --- arch/x86/kernel/head_32.S | 40 +++++++--------------------------------- 1 file changed, 7 insertions(+), 33 deletions(-)
diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S index ce6b557017f4..0dba3598cf02 100644 --- a/arch/x86/kernel/head_32.S +++ b/arch/x86/kernel/head_32.S @@ -334,25 +334,14 @@ default_entry: movl %eax,%cr0 /* - * New page tables may be in 4Mbyte page mode and may - * be using the global pages. + * New page tables may be in 4Mbyte page mode and may be using the global pages. * - * NOTE! If we are on a 486 we may have no cr4 at all! - * Specifically, cr4 exists if and only if CPUID exists - * and has flags other than the FPU flag set. + * NOTE! If we are on a 486 we may have no cr4 at all! Specifically, cr4 exists + * if and only if CPUID exists (which has been checked above) and has flags + * other than the FPU flag set. */ - movl $X86_EFLAGS_ID,%ecx - pushl %ecx - popfl - pushfl - popl %eax - pushl $0 - popfl - pushfl - popl %edx - xorl %edx,%eax - testl %ecx,%eax - jz 6f # No ID flag = no CPUID = no CR4 + cmpl $-1, pa(X86_CPUID) + je 6f # No CPUID = no CR4 movl $1,%eax cpuid @@ -389,7 +378,6 @@ default_entry: btsl $_EFER_NX, %eax /* Make changes effective */ wrmsr - 6: /* @@ -417,21 +405,7 @@ default_entry: call *%eax 1: -/* - * Check if it is 486 - */ - movl $-1,X86_CPUID # -1 for no CPUID initially - movb $4,X86 # at least 486 - pushfl # push EFLAGS - popl %eax # get EFLAGS - movl %eax,%ecx # save original EFLAGS - xorl $0x200000,%eax # flip ID bit in EFLAGS - pushl %eax # copy to EFLAGS - popfl # set EFLAGS - pushfl # get new EFLAGS - popl %eax # put it in eax - xorl %ecx,%eax # change in flags - testl $0x200000,%eax # check if ID bit changed + cmpl $-1,X86_CPUID je is486 /* get vendor info */ -- 1.8.1.2.422.g08c0e7f
| |