|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] Share Memory Between DomainU and Domain0
Hi there!
Have you made any progress with this? I've made some comments inline
below...
1. Dom0 grants access permission of pages to DomU using
"gnttab_grant_foreign_access_ref()"
2. Dom0 passes "Machine Page Numbers" and "Ref" to DomU through I/O Ring
3. DomU install granted pages. (Change original mfn to new mfn of Dom0)
A. map.host_addr = mfn_to_virt(pfn_to_mfn(DomU's PFN));
B. HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref,&map,count)
C. Set_phys_to_machine(DomU's PFN, Dom0's MFN)
In blkback.c
dom0_cache_vaddr = get_zeroed_page(GFP_KERNEL);
dom0_cache_mfn[i] = pfn_to_mfn(__pa(dom0_cache_vaddr) >>
PAGE_SHIFT);
share_ref = gnttab_claim_grant_reference(&share_ref_head);
BUG_ON(share_ref == -ENOSPC);
share_ref = gnttab_grant_foreign_access( req_domid,
dom0_cache_mfn[i], 1);
In blkfront.c
bret = RING_GET_RESPONSE(&info->ring, i);
map.host_addr =
mfn_to_virt(pfn_to_mfn(bret->map_pfn_mfn[j].pfn));
for(j < 0 ; j < number_of_pages ;j++){
map.dom = (domid_t) 0;
map.ref = bret->map_pfn_mfn[j].ref;
map.flags = ( GNTMAP_host_map | GNTMAP_readonly);
ret =
HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref,&map,1);
BUG_ON(ret);
set_phys_to_machine(
bret->map_pfn_mfn[j].pfn,
FOREIGN_FRAME((bret->map_pfn_mfn[j].mfn)));
}
For the sharing, I modified response struct. So it has grant ref, Dom0's
MFN and DomU's PFN now.
OK. Make sure your dom0 and domU are *definitely* using the same version of
the block drivers, and that both kernels are compiled to use your modified
request structure. Otherwise things will get very confused. If you're using
two kernels, make sure you rebuild them both.
How does dom0 know what the domU's pfn is in order to queue it in responses?
But I encountered Kernel Panic as DomU booted up.
<snip>
Question :
1. Should I update Page table with "HYPERVISOR_mmu_update" in DomU
although I call "HYPERVISOR_grant_table_op"??
That shouldn't be necessary.
2. Anyone can advice to me about this problem? (Anything about the
kernel panic message or mistakes in source code)
Are you trying to implement a shared buffer cache or something similar?
Could you possibly post your entire diff vs the standard block drivers so
that I can take a look at everything in context? I've written some similar
code to this but would like to look through a full diff if possible.
Cheers,
Mark
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|