Mike Sun
2008-Sep-27 20:17 UTC
[Xen-devel] Sharing dom0 memory with hypervisor across hypercall
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@gatech.edu http://msun.bluespot.org _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Mike Sun
2008-Sep-27 21:31 UTC
[Xen-devel] Re: Sharing dom0 memory with hypervisor across hypercall
Whoops... nevermind. I had a stupid bug on my part. I''ve gotten it to work now. On Sat, Sep 27, 2008 at 4:17 PM, Mike Sun <msun@gatech.edu> wrote:> 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@gatech.edu > http://msun.bluespot.org >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel