|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] Re: problem in using MSR in the hypervisor
I first used wrmsr_safe() to write a non-zero value into the msr
(MSR_P4_IQ_PERFCTR0), and then read the msr by rdmsr_safe(). But zero
is read.
long
On Fri, Oct 8, 2010 at 4:42 PM, Long Wang <longwang.longwang@xxxxxxxxx> wrote:
> I added code in the hypervisor to manipulate MSR. Here is my code in
> emulate_privileged_op() in the Xen hypervisor:
>
> ....
> // for WRMSR
> case MSR_P4_IQ_PERFCTR0:
> case MSR_P4_IQ_CCCR0:
> case MSR_P4_CRU_ESCR0:
> case MSR_P4_IQ_PERFCTR2:
> case MSR_P4_IQ_CCCR2:
> case MSR_P4_CRU_ESCR1:
> wrmsr_safe(regs->ecx, eax, edx);
> break;
> ......
> // for RDMSR
> case MSR_P4_IQ_PERFCTR0:
> case MSR_P4_IQ_CCCR0:
> case MSR_P4_CRU_ESCR0:
> case MSR_P4_IQ_PERFCTR2:
> case MSR_P4_IQ_CCCR2:
> case MSR_P4_CRU_ESCR1:
> printk("the_cs = 0x%x\n", the_cs);
> __asm__ volatile(
> "mov %%cs, %0\n"
> :"=r"(the_cs)
> :
> );
> printk("the_cs = 0x%x\n", the_cs);
> rdmsr_safe(regs->ecx, regs->eax, regs->edx);
> break;
>
>
> The wrmsr_safe() and rdmsr_safe() trigger a general protection fault,
> and the value read from the msr is 0. But I printed out the cs
> descriptor, and found the CPL is 0. Why there is a general protection
> fault here? How can I fix this?
>
> thanks,
> long
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|