|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] xen_cr3_to_pfn
On Tue, 2011-05-10 at 21:37 +0100, Nimgaonkar, Satyajeet wrote:
> Hi,
> I am trying to read the value of cr3 from a VCPU assigned to a Dom
> U. I am invoking a custom hypercall and then attempting to read the
> value of cr3 in the hypercall handler. Below is the code of my
> hypercall handler.
> Here I am creating an object of the vcpu_guest_context and trying to
> read the value of ctrlreg[3] using xen_cr3_to_pfn macro. But I am
> getting the value of this (i.e. pgdaddr) as 0. Can anyone please tell
> me what am I doing wrong here.??
You have failed to initialise ctx for one thing.
> I also found a function called read_cr3(). And I am getting some 8 bit
> values for this function e.g. 27ca4000. Does this look right??
What values do you expect cr3 to contain? The contents of the cr3
register is defined by the processor architecture. You need to find
yourself a copy of e.g. "IA-32 Intel Architecture Software Developers
Guide Volume 3: System Programming Guide" (or the AMD equivalent) and
read it. The PDFs are readily available on the manufacturers websites.
I'm afraid that xen-devel is really not the place to be schooled in
basic processor architecture like this.
> Also then what is the difference between read_cr3 and xen_cr3_to_pfn.
Have you not read the code for each function? If you had then I think
the difference would be pretty obvious.
Ian.
> I read in some documentation that read_cr3 is not reliable hence use
> xen_cr3_to_pfn.
>
> unsigned long CR3;
> unsigned long pgdaddr;
> vcpu_guest_context_t ctx;
>
> void do_jeet1(void){
>
> printk ("Successfull Hypercall made to __HYPERVISOR_jeet1\n");
> CR3 = read_cr3();
> pgdaddr = xen_cr3_to_pfn(ctx.ctrlreg[3]);
>
> printk ("CR3:%lx\n", CR3);
> printk ("PGDADDR:%lx\n", pgdaddr);
>
> }
>
> Thanks.
>
> Regards,
> Jeet
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|