What about CPUs with inconsistent cpuid levels? Yes, they can and do happen, as we discussed on IRC.
Borislav Petkov <b...@alien8.de> wrote: >From: Borislav Petkov <b...@suse.de> > >We do that once earlier now and cache it into new_cpu_data.cpuid_level >so no need for the EFLAGS.ID toggling dance anymore. > >Signed-off-by: Borislav Petkov <b...@suse.de> >--- > arch/x86/kernel/head_32.S | 17 ++++------------- > 1 file changed, 4 insertions(+), 13 deletions(-) > >diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S >index 73e084a6d2c5..e893ac09ca03 100644 >--- a/arch/x86/kernel/head_32.S >+++ b/arch/x86/kernel/head_32.S >@@ -410,18 +410,7 @@ default_entry: > /* > * 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 */ >@@ -447,7 +436,9 @@ default_entry: > movb %cl,X86_MASK > movl %edx,X86_CAPABILITY > >-is486: movl $0x50022,%ecx # set AM, WP, NE and MP >+is486: >+ movb $4,X86 >+ movl $0x50022,%ecx # set AM, WP, NE and MP > movl %cr0,%eax > andl $0x80000011,%eax # Save PG,PE,ET > orl %ecx,%eax -- Sent from my mobile phone. Please excuse brevity and lack of formatting. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/