Hi, I cannot get a shared page in domU. In a domU, I used the folloing code to grant a page to another domU. share_mem = (share_mem_desp *) __get_free_page(GFP_KERNEL); share_mem->gref = gnttab_grant_foreign_access(domid_remote, virt_to_mfn(share_mem), 0); In another domU, I used the folloing code to get the shared page. share_vmarea = alloc_vm_area(PAGE_SIZE); gnttab_set_map_op( &map_op, (unsigned long)share_vmarea->addr, GNTMAP_host_map, gref, domid_remote ); HYPERVISOR_grant_table_op( GNTTABOP_map_grant_ref, &map_op, 1 ); While using the exactly same code to get the shared page in dom0, it woks all well. But it cannot work in domU. I use Xen 4.1.1 and fedora 14 ( linux 3.1.0 both for dom0 and domU ). Can anyone help me? Thanks! -- Xin _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
On Thu, Nov 10, 2011 at 1:15 PM, Xin Jin <jxinpku@gmail.com> wrote:> Hi, I cannot get a shared page in domU. > In a domU, I used the folloing code to grant a page to another domU. > share_mem = (share_mem_desp *) __get_free_page(GFP_KERNEL); > share_mem->gref = gnttab_grant_foreign_access(domid_remote, > virt_to_mfn(share_mem), 0); > In another domU, I used the folloing code to get the shared page. > share_vmarea = alloc_vm_area(PAGE_SIZE); > gnttab_set_map_op( &map_op, (unsigned long)share_vmarea->addr, > GNTMAP_host_map, gref, domid_remote ); > HYPERVISOR_grant_table_op( GNTTABOP_map_grant_ref, &map_op, 1 ); > While using the exactly same code to get the shared page in dom0, it woks > all well. But it cannot work in domU. > I use Xen 4.1.1 and fedora 14 ( linux 3.1.0 both for dom0 and domU ). > Can anyone help me?On the interface struct when you issue the hypercall you need to specify the domid that can use the gref. Maybe the default is domid 0. The struct grant_entry_v1 has member domid for the foreign guest, check that value.> Thanks! > -- Xin > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel > >-- +-=====---------------------------+ | +---------------------------------+ | This space intentionally blank for notetaking. | | | Daniel Castro, | | | | Consultant/Programmer.| | | | U Andes | +-------------------------------------+ _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
In share_mem->gref gnttab_grant_foreign_access(domid_remote, virt_to_mfn(share_mem), 0); I have explicitly specified the domid that can use the gref as "domid_remote". What else can be wrong? On Thu, Nov 10, 2011 at 12:09 AM, Daniel Castro <evil.dani@gmail.com> wrote:> On Thu, Nov 10, 2011 at 1:15 PM, Xin Jin <jxinpku@gmail.com> wrote: > > Hi, I cannot get a shared page in domU. > > In a domU, I used the folloing code to grant a page to another domU. > > share_mem = (share_mem_desp *) __get_free_page(GFP_KERNEL); > > share_mem->gref = gnttab_grant_foreign_access(domid_remote, > > virt_to_mfn(share_mem), 0); > > In another domU, I used the folloing code to get the shared page. > > share_vmarea = alloc_vm_area(PAGE_SIZE); > > gnttab_set_map_op( &map_op, (unsigned long)share_vmarea->addr, > > GNTMAP_host_map, gref, domid_remote ); > > HYPERVISOR_grant_table_op( GNTTABOP_map_grant_ref, &map_op, 1 ); > > While using the exactly same code to get the shared page in dom0, it woks > > all well. But it cannot work in domU. > > I use Xen 4.1.1 and fedora 14 ( linux 3.1.0 both for dom0 and domU ). > > Can anyone help me? > On the interface struct when you issue the hypercall you need to > specify the domid that can use the gref. Maybe the default is domid 0. > The struct grant_entry_v1 has member domid for the foreign guest, > check that value. > > > Thanks! > > -- Xin > > > > > > _______________________________________________ > > Xen-devel mailing list > > Xen-devel@lists.xensource.com > > http://lists.xensource.com/xen-devel > > > > > > > > -- > +-=====---------------------------+ > | +---------------------------------+ | This space intentionally blank > for notetaking. > | | | Daniel Castro, | > | | | Consultant/Programmer.| > | | | U Andes | > +-------------------------------------+ >-- Xin JIN PhD student Department of Computer Science Princeton University _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Konrad Rzeszutek Wilk
2011-Nov-10 22:21 UTC
Re: [Xen-devel] Cannot get shared page in domU
On Thu, Nov 10, 2011 at 10:54:23AM -0500, Xin Jin wrote:> In > > share_mem->gref > gnttab_grant_foreign_access(domid_remote, virt_to_mfn(share_mem), 0);Huh? There are four parameters for that function. When you setup your map_op, are you setting GNTMAP_application_map | GNTMAP_contains_pte ? Or are using GNTMAP_host_map Did you look in the 3.1 linux kerne in the gntdev.c driver? Or the other drivers? Can you use grant-alloc for your code (which can setup shared memory segements between guests) instead of doing this in the kernel?> > I have explicitly specified the domid that can use the gref as > "domid_remote". > > What else can be wrong? > > On Thu, Nov 10, 2011 at 12:09 AM, Daniel Castro <evil.dani@gmail.com> wrote: > > > On Thu, Nov 10, 2011 at 1:15 PM, Xin Jin <jxinpku@gmail.com> wrote: > > > Hi, I cannot get a shared page in domU. > > > In a domU, I used the folloing code to grant a page to another domU. > > > share_mem = (share_mem_desp *) __get_free_page(GFP_KERNEL); > > > share_mem->gref = gnttab_grant_foreign_access(domid_remote, > > > virt_to_mfn(share_mem), 0); > > > In another domU, I used the folloing code to get the shared page. > > > share_vmarea = alloc_vm_area(PAGE_SIZE); > > > gnttab_set_map_op( &map_op, (unsigned long)share_vmarea->addr, > > > GNTMAP_host_map, gref, domid_remote ); > > > HYPERVISOR_grant_table_op( GNTTABOP_map_grant_ref, &map_op, 1 ); > > > While using the exactly same code to get the shared page in dom0, it woks > > > all well. But it cannot work in domU. > > > I use Xen 4.1.1 and fedora 14 ( linux 3.1.0 both for dom0 and domU ). > > > Can anyone help me? > > On the interface struct when you issue the hypercall you need to > > specify the domid that can use the gref. Maybe the default is domid 0. > > The struct grant_entry_v1 has member domid for the foreign guest, > > check that value. > > > > > Thanks! > > > -- Xin > > > > > > > > > _______________________________________________ > > > Xen-devel mailing list > > > Xen-devel@lists.xensource.com > > > http://lists.xensource.com/xen-devel > > > > > > > > > > > > > > -- > > +-=====---------------------------+ > > | +---------------------------------+ | This space intentionally blank > > for notetaking. > > | | | Daniel Castro, | > > | | | Consultant/Programmer.| > > | | | U Andes | > > +-------------------------------------+ > > > > > > -- > Xin JIN > PhD student > Department of Computer Science > Princeton University> _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
On Thu, Nov 10, 2011 at 5:21 PM, Konrad Rzeszutek Wilk < konrad.wilk@oracle.com> wrote:> On Thu, Nov 10, 2011 at 10:54:23AM -0500, Xin Jin wrote: > > In > > > > share_mem->gref > > gnttab_grant_foreign_access(domid_remote, virt_to_mfn(share_mem), 0); > > Huh? There are four parameters for that function. >The function I use is int gnttab_grant_foreign_access(domid_t domid, unsigned long frame, int readonly); It only has 3 parameters. The function void gnttab_grant_foreign_access_ref(grant_ref_t ref, domid_t domid, unsigned long frame, int readonly); has 4 papameters.> > When you setup your map_op, are you setting > GNTMAP_application_map | GNTMAP_contains_pte > ? > Or are using GNTMAP_host_map >I use GNTMAP_host_map to get the grant page as following. share_vmarea = alloc_vm_area(PAGE_SIZE); gnttab_set_map_op( &map_op, (unsigned long)share_vmarea->addr, GNTMAP_host_map, gref, domid_remote ); HYPERVISOR_grant_table_op( GNTTABOP_map_grant_ref, &map_op, 1 );> Did you look in the 3.1 linux kerne in the gntdev.c driver? Or the other > drivers? > Can you use grant-alloc for your code (which can setup shared memory > segements between guests) instead of doing this in the kernel? > > I''m writing a kernel driver module, which tries to communicate betweendomUs through shared memory. I only want to use grant table, and do not want to involve Xen event channel. When I did as the code above, the code works well in dom0. It means dom0 can use the following hypercall "share_vmarea = alloc_vm_area(PAGE_SIZE); gnttab_set_map_op( &map_op, (unsigned long)share_vmarea->addr, GNTMAP_host_map, gref, domid_remote ); HYPERVISOR_grant_table_op( GNTTABOP_map_grant_ref, &map_op, 1 );" to get the grant page successfully. But when I use the same code in domU, it cause errors in kernel "unable to request kernel paging request at ffffc900000da00c". (I used the right remote_domid to specify which domain to grant the page to.) Do you know what''s wrong? How can I get it right?> > > > I have explicitly specified the domid that can use the gref as > > "domid_remote". > > > > What else can be wrong? > > > > On Thu, Nov 10, 2011 at 12:09 AM, Daniel Castro <evil.dani@gmail.com> > wrote: > > > > > On Thu, Nov 10, 2011 at 1:15 PM, Xin Jin <jxinpku@gmail.com> wrote: > > > > Hi, I cannot get a shared page in domU. > > > > In a domU, I used the folloing code to grant a page to another domU. > > > > share_mem = (share_mem_desp *) __get_free_page(GFP_KERNEL); > > > > share_mem->gref = gnttab_grant_foreign_access(domid_remote, > > > > virt_to_mfn(share_mem), 0); > > > > In another domU, I used the folloing code to get the shared page. > > > > share_vmarea = alloc_vm_area(PAGE_SIZE); > > > > gnttab_set_map_op( &map_op, (unsigned long)share_vmarea->addr, > > > > GNTMAP_host_map, gref, domid_remote ); > > > > HYPERVISOR_grant_table_op( GNTTABOP_map_grant_ref, &map_op, 1 ); > > > > While using the exactly same code to get the shared page in dom0, it > woks > > > > all well. But it cannot work in domU. > > > > I use Xen 4.1.1 and fedora 14 ( linux 3.1.0 both for dom0 and domU ). > > > > Can anyone help me? > > > On the interface struct when you issue the hypercall you need to > > > specify the domid that can use the gref. Maybe the default is domid 0. > > > The struct grant_entry_v1 has member domid for the foreign guest, > > > check that value. > > > > > > > Thanks! > > > > -- Xin > > > > > > > > > > > > _______________________________________________ > > > > Xen-devel mailing list > > > > Xen-devel@lists.xensource.com > > > > http://lists.xensource.com/xen-devel > > > > > > > > > > > > > > > > > > > > -- > > > +-=====---------------------------+ > > > | +---------------------------------+ | This space intentionally blank > > > for notetaking. > > > | | | Daniel Castro, | > > > | | | Consultant/Programmer.| > > > | | | U Andes | > > > +-------------------------------------+ > > > > > > > > > > > -- > > Xin JIN > > PhD student > > Department of Computer Science > > Princeton University > > > _______________________________________________ > > Xen-devel mailing list > > Xen-devel@lists.xensource.com > > http://lists.xensource.com/xen-devel > >-- Xin JIN PhD student Department of Computer Science Princeton University _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel