[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Sharing dom0 memory with hypervisor across hypercall


  • To: xen-devel@xxxxxxxxxxxxxxxxxxx
  • From: "Mike Sun" <msun@xxxxxxxxxx>
  • Date: Sat, 27 Sep 2008 16:17:58 -0400
  • Delivery-date: Sat, 27 Sep 2008 13:18:23 -0700
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:sender:to:subject:mime-version:content-type :content-transfer-encoding:content-disposition:x-google-sender-auth; b=AmKWzugvqRyKIMdqnmbgsR35vujddQ6pzm2Wcq3vM/eee1smmeX9hJV6SI3TlCERA7 YhuaAP0og9Y8cLXZFhzgGJA2Rl4oGlU63dH2rHJXOePeWyA9//8OYpAle/heLVrn51Bx SSCm1Qyzv057c3LhhUdFH7Q4eOIRJ5Uvfas/s=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

Hi,

For a research project implementation, I'm trying to allocate a large
buffer of memory in dom0, which would then be passed to the hypervisor
during a hypercall.  I've seen examples of this in xc_domain_save
where a dirty bitmap is passed during a log-dirty hypercall to get the
log-dirty status of pages.  It seems relatively straightforward in its
use of guest handles and copy_to_user().

My situation is different in that the hypervisor must copy to the
shared memory buffer allocated by dom0 not during the hypervisor call,
but upon subsequent faults of another guest domain(specifically, page
faults).  The copy_to_user() method would fail because I would not be
in dom0's address space, but in a guest domain's address space.

My approach was to provide a guest handle to the dom0 allocated buffer
via a hypercall.  The hypercall then determines the mfns of all the
pages of the dom0 buffer and stores this in a data structure in the
hypervisor.  The fault handler then maps the buffer pages into the
hypervisor address space using the mfns previousy determined during
the hypercall.  The fault handler can then copy into dom0's buffer.
Am I on the right track or is this not feasible?

My implementation does not seem to work correctly.  I allocate a
buffer in dom0 using xg_memalign(), pin it down with lock_pages(), and
perform a hypercall in which I pass the virtual address of the buffer
via a guest_handle.  In the hypervisor, the hypercall translates the
virtual address to an mfn by walking dom0's page tables.  These
actions seem to work correctly.  The fault handler maps the mfn of the
buffer using map_domain_page, and a copy is then done.  This seems to
fail.

Any ideas?  Have I completely misunderstood something?

Thanks,
Mike

--
msun@xxxxxxxxxx
http://msun.bluespot.org

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.