[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 07/10] xen: introduce XENMEM_exchange_and_pin and XENMEM_unpin
On Thu, 15 Aug 2013, Konrad Rzeszutek Wilk wrote: > On Thu, Aug 15, 2013 at 12:10:51PM +0100, Stefano Stabellini wrote: > > XENMEM_exchange can't be used by autotranslate guests because of two > > severe limitations: > > > > - it does not copy back the mfns into the out field for autotranslate > > guests; > > > > - it does not guarantee that the hypervisor won't change the p2m > > mappings for the exchanged pages while the guest is using them. Xen > > never promises to keep the p2m mapping stable for autotranslate guests > > in general. In practice it won't happen unless one uses uncommon > > features like memory sharing or paging. > > > > To overcome these problems I am introducing two new hypercalls. > > > > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > > > > > > Changes in v4: > > - rename XENMEM_get_dma_buf to XENMEM_exchange_and_pin; > > - rename XENMEM_put_dma_buf to XENMEM_unpin; > > - improve the documentation of the new hypercalls; > > - add a note about out.address_bits for XENMEM_exchange. > > --- > > include/xen/interface/memory.h | 37 +++++++++++++++++++++++++++++++++++++ > > 1 files changed, 37 insertions(+), 0 deletions(-) > > > > diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h > > index 2ecfe4f..5708ff8 100644 > > --- a/include/xen/interface/memory.h > > +++ b/include/xen/interface/memory.h > > @@ -66,6 +66,7 @@ struct xen_memory_exchange { > > /* > > * [IN] Details of memory extents to be exchanged (GMFN bases). > > * Note that @in.address_bits is ignored and unused. > > + * @out.address_bits should contain the address mask for the new pages. > > */ > > struct xen_memory_reservation in; > > > > @@ -263,4 +264,40 @@ struct xen_remove_from_physmap { > > }; > > DEFINE_GUEST_HANDLE_STRUCT(xen_remove_from_physmap); > > > > +#define XENMEM_exchange_and_pin 26 > > +/* > > + * This hypercall is similar to XENMEM_exchange: it takes the same > > + * struct as an argument and it exchanges the pages passed in with a new > > + * set of pages. The new pages are going to be "pinned": it's guaranteed > > + * that their p2m mapping won't be changed until explicitly "unpinned". > > + * The content of the exchanged pages is lost. > > + * Only normal guest r/w memory can be pinned: no granted pages or > > + * ballooned pages. > > + * If return code is zero then @out.extent_list provides the DMA frame > > + * numbers of the newly-allocated memory. > > + * Returns zero on complete success, otherwise a negative error code: > > + * -ENOSYS if not implemented > > + * -EINVAL if the page is already pinned > > + * -EFAULT if the physical to machine walk fails > > I don't know what that means. Physical to machine walk? That sounds like > you are trying to do some form of mind melt between robots and humans > while walking around the office. > > Could you expand this a bit please? Actually pfn to mfn resolution is not the only possible cause of -EFAULT, for example all the copy_to/from_guest failures return -EFAULT. I am just going to go for the generic "if an internal error occurs" _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |