Bug 3767
Summary: | Wrong CPU flags on Cyrix MII CPU | ||
---|---|---|---|
Product: | Platform Specific/Hardware | Reporter: | Ondrej Zary (linux) |
Component: | i386 | Assignee: | Zwane Mwaikambo (zwane) |
Status: | CLOSED CODE_FIX | ||
Severity: | normal | ||
Priority: | P2 | ||
Hardware: | i386 | ||
OS: | Linux | ||
Kernel Version: | 2.4.x, 2.6.x | Subsystem: | |
Regression: | --- | Bisected commit-id: | |
Attachments: |
Print more capabilities
Clear ECX before CPUID |
Description
Ondrej Zary
2004-11-18 09:42:04 UTC
I take it this behaviour only started with 2.6.8? I did not remember this in previous versions. So, I've just tested 2.6.10-rc2, two different builds of 2.6.7 and one 2.6.0: 2.6.10-rc2: fpu de tsc msr cx8 pge cmov mmx cyrix_arr est 2.6.7: fpu de tsc msr cx8 pge cmov mmx cyrix_arr tm2 2.6.7min: fpu de tsc msr cx8 pge cmov mmx cyrix_arr cid 2.6.0min: fpu de tsc msr cx8 pge cmov mmx cyrix_arr cid The 2.6.0min and 2.6.7min were compiled with minimal configuration required to boot from IDE drive and do 'cat /proc/cpuinfo'. According to include/asm/cpufeature.h, all these bogus (on my system) flags (EST, TM2, CID and XTPR) are for recent Intel CPUs. It looks like they depend on kernel configuration (two different 2.6.7 kernels show different flags) - I think that some garbage gets into the "recent Intel" part of flags somehow. Thank you for testing those older versions, it should help a lot tracking down the source of the problem. dmesg - it's always the same with all kernels: CPU: After generic identify, caps: 0080a135 00000000 00000000 00000000 CPU: After vendor identify, caps: 0080a135 00000000 00000000 00000000 CPU: After all inits, caps: 0080a135 00000000 00000000 00000004 CPU: Cyrix M II 3x Core/Bus Clock stepping 04 and complete /proc/cpuinfo (from 2.6.9): processor : 0 vendor_id : CyrixInstead cpu family : 6 model : 2 model name : M II 3x Core/Bus Clock stepping : 4 cpu MHz : 225.006 fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu de tsc msr cx8 pge cmov mmx cyrix_arr tm2 xtpr bogomips : 443.39 Now I really wonder what's wrong... Tried Slackware 10.0 Install CD (2.4.26): fpu de tsc msr cx8 pge cmov mmx cyrix_arr ds_cpl est cid and Knoppix 3.6: 2.4.27 - same as Slackware 2.6.7 - everything OK: fpu de tsc msr cx8 pge cmov mmx cyrix_arr Could you compare header files? /usr/include/asm/cpufeature.h Created attachment 4133 [details]
Print more capabilities
Could you please test the latest kernel with this patch? Thanks
Created attachment 4134 [details]
Clear ECX before CPUID
With your patch, the last number displayed in all CPU capabilities changed from
kernel to kernel. Then I tried manually how CPUID instruction works on my CPU -
and found out that it does not update ebx and ecx registers. The attached patch
fixes the bug by clearing ecx register before calling CPUID (no need to clear
ebx as its value does not seem to be used by kernel). Is it OK or will it break
anything?
Interesting, Intel actually lists %ecx as reserved too on older processors, so i think the kernel is at fault, we probably should only be printing those extended capabilities on specific cpus which list valid values for ecx return. The cpus in question would be newer P4 etc. |