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.