Não é possível ler de volta do MSR
Eu estou escrevendo um módulo de kernel e é sobre ler e escrever MSRs. Eu escrevi um programa simples para testar, mas ainda falha. Tudo o que está fazendo é escrever para o MSR e depois lê-lo de volta. Aqui está o código:
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;
}
A saída é semelhante a:
exit_write: hi=00000000 lo=0000000b
exit_write2: hi=00000000 lo=00000000
Alguém pode me dizer por que o valor de retorno é 0 na segunda saída, em vez do original? Há algo de errado com o meu código? Muito obrigado.