Nie można odczytać z MSR

Piszę moduł jądra i dotyczy on odczytu i zapisu MSR. Napisałem prosty program do testowania, ale nadal nie działa. Wszystko, co robi, to pisanie do MSR, a następnie czytanie. Oto kod:

static int __init test3_init(void)
{
    uint32_t hi,lo;
    hi=0; lo=0xb;
    asm volatile("mov %0,%%eax"::"r"(lo));
    asm volatile("mov %0,%%edx"::"r"(hi));
    asm volatile("mov $0x38d,%ecx");
    asm volatile("wrmsr");
    printk("exit_write: hi=%08x lo=%08x\n",hi,lo);
    asm volatile("mov $0x38d,%ecx");
    asm volatile("rdmsr":"=a"(lo),"=d"(hi));
    printk("exit_write2: hi=%08x lo=%08x\n",hi,lo);
    return 0;
}

Dane wyjściowe wyglądają tak:

exit_write: hi=00000000 lo=0000000b

exit_write2: hi=00000000 lo=00000000

Czy ktoś może mi powiedzieć, dlaczego wartość powrotu jest równa 0 na drugim wyjściu, zamiast oryginału? Czy coś jest nie tak z moim kodem? Wielkie dzięki.

questionAnswers(1)

yourAnswerToTheQuestion