--- /usr/src/linux-2.6.16/arch/i386/kernel/msr.c 2006-03-20 14:53:29.000000000 +0900 +++ arch/i386/kernel/msr.c 2007-08-22 09:18:06.000000000 +0900 @@ -48,22 +48,25 @@ static inline int wrmsr_eio(u32 reg, u32 eax, u32 edx) { - int err; - - err = wrmsr_safe(reg, eax, edx); - if (err) - err = -EIO; - return err; +// int err; + __asm__ __volatile__("wrmsr" : : "c"(reg), "a"(eax), "d"(edx)); +// err = wrmsr_safe(reg, eax, edx); +// if (err) +// err = -EIO; +// return err; + return 0; } static inline int rdmsr_eio(u32 reg, u32 *eax, u32 *edx) { - int err; +// int err; - err = rdmsr_safe(reg, eax, edx); - if (err) - err = -EIO; - return err; + __asm__ __volatile__("rdmsr":"=a"(*(eax)), "=d"(*(edx)):"c"(reg)); +// err = rdmsr_safe(reg, eax, edx); +// if (err) +// err = -EIO; +// return err; + return 0; } #ifdef CONFIG_SMP @@ -223,8 +226,8 @@ if (cpu >= NR_CPUS || !cpu_online(cpu)) return -ENXIO; /* No such CPU */ - if (!cpu_has(c, X86_FEATURE_MSR)) - return -EIO; /* MSR not supported */ +// if (!cpu_has(c, X86_FEATURE_MSR)) +// return -EIO; /* MSR not supported */ return 0; }