Messages in this thread | ![/](/images/icornerl.gif) | | Subject | Re: [PATCH 2.6.24] x86: add sysfs interface for cpuid module | From | Yi Yang <> | Date | Wed, 30 Jan 2008 06:13:13 +0800 |
| |
On Tue, 2008-01-29 at 23:17 -0800, H. Peter Anvin wrote: > Yi Yang wrote: > >> > >> It's broken, because it doesn't take into account the fact that Intel > >> broke CPUID level 4 and made it "repeating" (neither did the cpuid char > >> device, because it predated the Intel braindamage; I've had a patch for > >> it privately for a while, but didn't push it upstream because paravirt > >> broke it royally and I wanted the situation to settle down.) > > > level 4 doesn't result in repeating on Intel CPU, cpuid module sets > > file offset to level, so cat /dev/cpu/*/cpuid will run cpuid instruction > > continuously. > > The issue is that Intel suddenly made CPUID ECX-sensitive, which there > is no way to represent. Function cpuid has reset ecx to 0 immediate before calling to __cpuid, so this shouldn't be a problem now.
in include/asm-x86/processor_32.h /* * Generic CPUID function * clear %ecx since some cpus (Cyrix MII) do not set or clear %ecx * resulting in stale register contents being returned. */ static inline void cpuid(unsigned int op, unsigned int *eax, unsigned int *ebx, unsigned int *ecx, unsigned int *edx) { *eax = op; *ecx = 0; __cpuid(eax, ebx, ecx, edx); } > > As far as cat /dev/cpu/*/cpuid, that's a user error. > > -hpa >
| ![\](/images/icornerr.gif) |