|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] RIP register value in p2m_mem_access_check()
>>> On 06.03.13 at 11:55, Razvan Cojocaru <rzvncj@xxxxxxxxx> wrote:
> Hello again,
>
> simple test case: added the following statement in
> xen/arch/x86/mm/p2m.c, in function p2m_mem_access_check():
>
> printk("v->arch.user_regs.eip: 0x%016lx, __vmread(GUEST_RIP):
> 0x%016lx\n", v->arch.user_regs.eip, __vmread(GUEST_RIP));
>
> (where v is current) which dutifully prints out (at the first page fault):
>
> (XEN) v->arch.user_regs.eip: 0xfffff80002c13a7b, __vmread(GUEST_RIP):
> 0xfffff8000269ec0a
>
> They're not equal, and furthermore __vmread(GUEST_RIP) is the correct
> one (the same value returned by xc_domain_hvm_getcontext_partial()).
>
> The questions:
>
> 1. What's the Xen-friendliest way to retrieve the _correct_ values for
> RIP and all the other registers usually put in a struct hvm_hw_cpu
> instance, in p2m_mem_access_check()?
v->arch.user_regs.eip is what you should look at. It's
expected to be in sync with the VMCS value as long as
nothing (e.g. emulation) modified the value. There's code in
vmx_asm_vmexit_handler to sync the fields, and in
vmx_asm_do_vmentry to sync them back in the opposite
direction.
> 2. What's the explanation for why things run as they do now?
If the above doesn't work, you're likely in bigger trouble. So
you will want to hunt down why the user_regs field isn't what
you expect it to be.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |