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.

questionAnswers(1)

yourAnswerToTheQuestion