Fixup CPUID for 32-bit x86
authorJens Axboe <axboe@kernel.dk>
Tue, 18 Dec 2012 18:54:40 +0000 (19:54 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 18 Dec 2012 18:54:40 +0000 (19:54 +0100)
Signed-off-by: Jens Axboe <axboe@kernel.dk>
arch/arch-x86-common.h
crc/crc32c-intel.c

index 1e62354418c01d41e5bc2bf975617fbad314d315..d533d22d536bce1ffbc162a1cdb50af1ae4f3848 100644 (file)
@@ -4,24 +4,17 @@
 static inline void do_cpuid(unsigned int *eax, unsigned int *ebx,
                            unsigned int *ecx, unsigned int *edx)
 {
 static inline void do_cpuid(unsigned int *eax, unsigned int *ebx,
                            unsigned int *ecx, unsigned int *edx)
 {
-       unsigned int id = *eax;
-
-       asm("movl %4, %%eax;"
-           "cpuid;"
-           "movl %%eax, %0;"
-           "movl %%ebx, %1;"
-           "movl %%ecx, %2;"
-           "movl %%edx, %3;"
-               : "=r" (*eax), "=r" (*ebx), "=r" (*ecx), "=r" (*edx)
-               : "r" (id)
-               : "eax", "ebx", "ecx", "edx");
+       asm volatile("cpuid"
+               : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx)
+               : "0" (*eax), "2" (*ecx)
+               : "memory");
 }
 
 #define ARCH_HAVE_INIT
 extern int tsc_reliable;
 static inline int arch_init(char *envp[])
 {
 }
 
 #define ARCH_HAVE_INIT
 extern int tsc_reliable;
 static inline int arch_init(char *envp[])
 {
-       unsigned int eax, ebx, ecx, edx;
+       unsigned int eax, ebx, ecx = 0, edx;
 
        /*
         * Check for TSC
 
        /*
         * Check for TSC
index 8e1cd587dcec85adc2a75ec4bd824e75457514b5..0b0f193c0564a75de8d5d00e80695af40e49dd6a 100644 (file)
@@ -81,7 +81,7 @@ uint32_t crc32c_intel(unsigned char const *data, unsigned long length)
 void crc32c_intel_probe(void)
 {
        if (!crc32c_probed) {
 void crc32c_intel_probe(void)
 {
        if (!crc32c_probed) {
-               unsigned int eax, ebx, ecx, edx;
+               unsigned int eax, ebx, ecx = 0, edx;
 
                eax = 1;
 
 
                eax = 1;