On Mon, 2011-05-23 at 14:52 +0100, veerasena reddy wrote:
> Hi,
>
> Thanks a lot for quick reply.
>
> I modified my code to get physical page address and now i do not see
> error message on XEN hypervisor.
> Could you please correct if am writing proper physical address or not?
>
> We can write the page address to hypervisor using wrmsr() but who
> should set hypercall_page which is declared as extern in hypercall.h
> on HVM? Because when i try to invoke HYPERCALL_xxxx(), it reported
> hypercall_page not declared. Do we need to enable CONFIG_XEN in HVM
> kernel in order to invoke hypercalls to hypervisor?
Which kernel are you running with?
This should all be taken care of for you in a kernel with PVHVM support
enabled.
> Could you please share any sample code if you have to get a clear
> understanding of HVM hypercalls.
>
> {
> char id[13];
> unsigned int msr1;
> unsigned long my_hpage_phys;
> int my_hpage_lo, my_hpage_hi;
>
> __asm__ __volatile__(
> "cpuid"
> : "=b" (*(int *)(&id[0])),
> "=d" (*(int *)(&id[8])),
> "=c" (*(int *)(&id[4]))
> : "a" (0x40000000)
> );
> id[12]='\0';
> printk("CPU ID read- %s\n", id);
>
> /* Read MSR register */
> __asm__ __volatile__(
> "cpuid"
> : "=b" (*(int *)(&msr1))
> : "a" (0x40000002)
> );
>
> my_hpage_phys = __get_free_page(GFP_ATOMIC);
> hypercall_page = virt_to_phys(my_hpage_phys);
> printk("my_hpage_phys get_free = %lx\n", my_hpage_phys);
> printk("hypercal_page = %p\n", hypercall_page);
>
> my_hpage_lo = (unsigned long)hypercall_page & 0xffffffff;
> my_hpage_hi = (unsigned long)hypercall_page >> 32;
> printk("my_hpage lo = %x hi = %x\n", my_hpage_lo,
> my_hpage_hi);
> /* Write hypercall page address to MSR */
> wrmsr(msr1, my_hpage_lo, my_hpage_hi);
>
> return 0;
> }
>
> ================= output on HVM ==========
> [root@localhost src]# dmesg
> my_hypercall_page @ ffffffffa0388000
> CPU ID read- XenVMMXenVMM
> my_hpage_phys get_free = ffff880005c0b000
> hypercal_page = 0000000005c0b000
> my_hpage lo = 5c0b000 hi = 0
> ============================
>
> Thanks & Regards,
> VSR.
>
> On Mon, May 23, 2011 at 1:52 PM, Ian Campbell
> <Ian.Campbell@xxxxxxxxxx> wrote:
> On Mon, 2011-05-23 at 08:48 +0100, veeruyours wrote:
> > Hi,
> >
> > I recently started working on XEN, and I am looking for ways
> to invoke
> > hypercalls from HVM.
> > I followed your instructions and succeeded in reading MSR
> register.
> > But when i attempt to write the physical address of a 4K
> page from my HVM
> > guest (2.6.30 kernel), i observed the XEN hypervisor
> reporting it as bad
> > GMFN as follows.
> >
> > [root@f13 ~]# xm dmesg -c
> > (XEN) traps.c:664:d17 Bad GMFN ffff88001e925 (MFN
> ffffffffffffffff) to MSR
> > 40000000
>
>
> That supposed GMFN (fff88001e925) looks an awful lot like a
> virtual
> address and not a physical one to me, unless your guest really
> has >4TB
> of RAM assigned...
>
>
> >
> > Could you please help me in understanding what went wrong in
> my
> > implementation.
> >
> > I am running XEN 4.0.1 on AMD 64bit machine with svm support
> and the dom0
> > kernel running 2.6.32.39.
> >
> > The
> > Thanks & Regards,
> > VSR.
> >
> >
> > --
> > View this message in context:
> http://xen.1045712.n5.nabble.com/HVM-hypercalls-tp2541346p4418332.html
> > Sent from the Xen - Dev mailing list archive at Nabble.com.
> >
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@xxxxxxxxxxxxxxxxxxx
> > http://lists.xensource.com/xen-devel
>
>
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|