All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: xen-devel@lists.xensource.com, linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, Ian.Campbell@citrix.com
Subject: Re: [PATCH v6 03/19] xen: introduce XENMEM_exchange_and_pin and XENMEM_unpin
Date: Mon, 30 Sep 2013 10:54:05 -0400	[thread overview]
Message-ID: <20130930145405.GN3106@phenom.dumpdata.com> (raw)
In-Reply-To: <1380298207-29151-3-git-send-email-stefano.stabellini@eu.citrix.com>

On Fri, Sep 27, 2013 at 05:09: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@eu.citrix.com>

Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> 
> 
> Changes in v6:
> - update the comments and the hypercalls structures.
> 
> Changes in v5:
> - better comment for XENMEM_exchange_and_pin return codes;
> 
> 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 |   51 ++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 51 insertions(+), 0 deletions(-)
> 
> diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h
> index 2ecfe4f..49db252 100644
> --- a/include/xen/interface/memory.h
> +++ b/include/xen/interface/memory.h
> @@ -66,6 +66,9 @@ 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 contains the maximum number of bits addressable
> +     * by the caller. The addresses of the newly allocated pages have to
> +     * meet this restriction.
>       */
>      struct xen_memory_reservation in;
>  
> @@ -263,4 +266,52 @@ struct xen_remove_from_physmap {
>  };
>  DEFINE_GUEST_HANDLE_STRUCT(xen_remove_from_physmap);
>  
> +/*
> + * 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".
> + * 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 frame
> + * numbers of the newly-allocated memory.
> + * On X86 the frame numbers are machine frame numbers (mfns).
> + * On ARMv7 and ARMv8 the frame numbers are machine frame numbers (mfns).
> + * Returns zero on complete success, otherwise a negative error code.
> + * The most common error codes are:
> + *   -ENOSYS if not implemented
> + *   -EPERM  if the domain is not privileged for this operation
> + *   -EBUSY  if the page is already pinned
> + *   -EFAULT if an internal error occurs
> + * On complete success then always @nr_exchanged == @in.nr_extents.  On
> + * partial success @nr_exchanged indicates how much work was done and a
> + * negative error code is returned.
> + */
> +#define XENMEM_exchange_and_pin             26
> +
> +/*
> + * XENMEM_unpin unpins a set of pages, previously pinned by
> + * XENMEM_exchange_and_pin. After this call the p2m mapping of the pages can
> + * be transparently changed by the hypervisor, as usual. The pages are
> + * still accessible from the guest.
> + */
> +#define XENMEM_unpin             27
> +struct xen_unpin {
> +    /*
> +     * [IN] Details of memory extents to be unpinned (GMFN bases).
> +     * Note that @in.address_bits is ignored and unused.
> +     */
> +    struct xen_memory_reservation in;
> +    /*
> +     * [OUT] Number of input extents that were successfully unpinned.
> +     *  1. The first @nr_unpinned input extents were successfully
> +     *     unpinned.
> +     *  2. All other input extents are untouched.
> +     *  3. If not all input extents are unpinned then the return code of this
> +     *     command will be non-zero.
> +     */
> +    xen_ulong_t nr_unpinned;
> +};
> +DEFINE_GUEST_HANDLE_STRUCT(xen_unpin);
> +
>  #endif /* __XEN_PUBLIC_MEMORY_H__ */
> -- 
> 1.7.2.5
> 

WARNING: multiple messages have this Message-ID (diff)
From: konrad.wilk@oracle.com (Konrad Rzeszutek Wilk)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 03/19] xen: introduce XENMEM_exchange_and_pin and XENMEM_unpin
Date: Mon, 30 Sep 2013 10:54:05 -0400	[thread overview]
Message-ID: <20130930145405.GN3106@phenom.dumpdata.com> (raw)
In-Reply-To: <1380298207-29151-3-git-send-email-stefano.stabellini@eu.citrix.com>

On Fri, Sep 27, 2013 at 05:09: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@eu.citrix.com>

Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> 
> 
> Changes in v6:
> - update the comments and the hypercalls structures.
> 
> Changes in v5:
> - better comment for XENMEM_exchange_and_pin return codes;
> 
> 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 |   51 ++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 51 insertions(+), 0 deletions(-)
> 
> diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h
> index 2ecfe4f..49db252 100644
> --- a/include/xen/interface/memory.h
> +++ b/include/xen/interface/memory.h
> @@ -66,6 +66,9 @@ 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 contains the maximum number of bits addressable
> +     * by the caller. The addresses of the newly allocated pages have to
> +     * meet this restriction.
>       */
>      struct xen_memory_reservation in;
>  
> @@ -263,4 +266,52 @@ struct xen_remove_from_physmap {
>  };
>  DEFINE_GUEST_HANDLE_STRUCT(xen_remove_from_physmap);
>  
> +/*
> + * 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".
> + * 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 frame
> + * numbers of the newly-allocated memory.
> + * On X86 the frame numbers are machine frame numbers (mfns).
> + * On ARMv7 and ARMv8 the frame numbers are machine frame numbers (mfns).
> + * Returns zero on complete success, otherwise a negative error code.
> + * The most common error codes are:
> + *   -ENOSYS if not implemented
> + *   -EPERM  if the domain is not privileged for this operation
> + *   -EBUSY  if the page is already pinned
> + *   -EFAULT if an internal error occurs
> + * On complete success then always @nr_exchanged == @in.nr_extents.  On
> + * partial success @nr_exchanged indicates how much work was done and a
> + * negative error code is returned.
> + */
> +#define XENMEM_exchange_and_pin             26
> +
> +/*
> + * XENMEM_unpin unpins a set of pages, previously pinned by
> + * XENMEM_exchange_and_pin. After this call the p2m mapping of the pages can
> + * be transparently changed by the hypervisor, as usual. The pages are
> + * still accessible from the guest.
> + */
> +#define XENMEM_unpin             27
> +struct xen_unpin {
> +    /*
> +     * [IN] Details of memory extents to be unpinned (GMFN bases).
> +     * Note that @in.address_bits is ignored and unused.
> +     */
> +    struct xen_memory_reservation in;
> +    /*
> +     * [OUT] Number of input extents that were successfully unpinned.
> +     *  1. The first @nr_unpinned input extents were successfully
> +     *     unpinned.
> +     *  2. All other input extents are untouched.
> +     *  3. If not all input extents are unpinned then the return code of this
> +     *     command will be non-zero.
> +     */
> +    xen_ulong_t nr_unpinned;
> +};
> +DEFINE_GUEST_HANDLE_STRUCT(xen_unpin);
> +
>  #endif /* __XEN_PUBLIC_MEMORY_H__ */
> -- 
> 1.7.2.5
> 

  reply	other threads:[~2013-09-30 14:54 UTC|newest]

Thread overview: 133+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-27 16:09 [PATCH v6 0/19] enable swiotlb-xen on arm and arm64 Stefano Stabellini
2013-09-27 16:09 ` Stefano Stabellini
2013-09-27 16:09 ` Stefano Stabellini
2013-09-27 16:09 ` [PATCH v6 01/19] arm: make SWIOTLB available Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09 ` [PATCH v6 02/19] arm64: define DMA_ERROR_CODE Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-30 10:47   ` Catalin Marinas
2013-09-30 10:47     ` Catalin Marinas
2013-09-30 10:47     ` Catalin Marinas
2013-09-27 16:09 ` [PATCH v6 03/19] xen: introduce XENMEM_exchange_and_pin and XENMEM_unpin Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-30 14:54   ` Konrad Rzeszutek Wilk [this message]
2013-09-30 14:54     ` Konrad Rzeszutek Wilk
2013-09-27 16:09 ` [PATCH v6 04/19] xen: make xen_create_contiguous_region return the dma address Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09 ` [PATCH v6 05/19] swiotlb-xen: support autotranslate guests Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09 ` [PATCH v6 06/19] xen/arm,arm64: enable SWIOTLB_XEN Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-30 15:14   ` Konrad Rzeszutek Wilk
2013-09-30 15:14     ` Konrad Rzeszutek Wilk
2013-09-27 16:09 ` [PATCH v6 07/19] swiotlb-xen: introduce xen_swiotlb_set_dma_mask Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09 ` [PATCH v6 08/19] arm/xen: get_dma_ops: return xen_dma_ops if we are running on Xen Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-30 15:17   ` Konrad Rzeszutek Wilk
2013-09-30 15:17     ` Konrad Rzeszutek Wilk
2013-09-30 15:17     ` Konrad Rzeszutek Wilk
2013-09-27 16:09 ` [PATCH v6 09/19] arm64/xen: " Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-30 10:48   ` Catalin Marinas
2013-09-30 10:48     ` Catalin Marinas
2013-09-30 10:48     ` Catalin Marinas
2013-09-27 16:09 ` [PATCH v6 10/19] xen: introduce xen_alloc/free_coherent_pages Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-30 15:31   ` Konrad Rzeszutek Wilk
2013-09-30 15:31     ` Konrad Rzeszutek Wilk
2013-10-01 13:40     ` Catalin Marinas
2013-10-01 13:40       ` Catalin Marinas
2013-10-01 13:40       ` Catalin Marinas
2013-10-02 17:03       ` Stefano Stabellini
2013-10-02 17:03         ` Stefano Stabellini
2013-10-02 17:03         ` Stefano Stabellini
2013-10-02 17:07         ` Catalin Marinas
2013-10-02 17:07           ` Catalin Marinas
2013-10-02 17:07           ` Catalin Marinas
2013-10-02 17:14           ` Stefano Stabellini
2013-10-02 17:14             ` Stefano Stabellini
2013-10-02 17:14             ` Stefano Stabellini
2013-09-27 16:09 ` [PATCH v6 11/19] swiotlb-xen: use xen_alloc/free_coherent_pages Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-27 16:09   ` Stefano Stabellini
2013-09-30 15:34   ` Konrad Rzeszutek Wilk
2013-09-30 15:34     ` Konrad Rzeszutek Wilk
2013-09-27 16:10 ` [PATCH v6 12/19] swiotlb: don't assume that io_tlb_start-io_tlb_end is coherent Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-30 15:56   ` Konrad Rzeszutek Wilk
2013-09-30 15:56     ` Konrad Rzeszutek Wilk
2013-10-02 17:31     ` Stefano Stabellini
2013-10-02 17:31       ` Stefano Stabellini
2013-10-02 17:31       ` Stefano Stabellini
2013-10-04 13:23       ` Konrad Rzeszutek Wilk
2013-10-04 13:23         ` Konrad Rzeszutek Wilk
2013-09-27 16:10 ` [PATCH v6 13/19] ASoC: Samsung: Rename dma_ops by samsung_dma_ops Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-27 16:10 ` [PATCH v6 14/19] swiotlb: print a warning when the swiotlb is full Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-30 15:58   ` Konrad Rzeszutek Wilk
2013-09-30 15:58     ` Konrad Rzeszutek Wilk
2013-10-09 17:31     ` Stefano Stabellini
2013-10-09 17:31       ` Stefano Stabellini
2013-10-09 17:31       ` Stefano Stabellini
2013-09-27 16:10 ` [PATCH v6 15/19] swiotlb-xen: call dma_capable only if dev->dma_mask is allocated Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-30 16:02   ` Konrad Rzeszutek Wilk
2013-09-30 16:02     ` Konrad Rzeszutek Wilk
2013-10-02 17:13     ` Stefano Stabellini
2013-10-02 17:13       ` Stefano Stabellini
2013-10-02 17:13       ` Stefano Stabellini
2013-10-02 17:22       ` Konrad Rzeszutek Wilk
2013-10-02 17:22         ` Konrad Rzeszutek Wilk
2013-10-02 17:22         ` Konrad Rzeszutek Wilk
2013-10-03 18:35         ` Rob Herring
2013-10-03 18:35           ` Rob Herring
2013-10-03 18:35           ` Rob Herring
2013-09-27 16:10 ` [PATCH v6 16/19] arm,arm64: do not always merge biovec if we are running on Xen Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-27 16:10   ` [PATCH v6 16/19] arm, arm64: " Stefano Stabellini
2013-09-30 16:06   ` [PATCH v6 16/19] arm,arm64: " Konrad Rzeszutek Wilk
2013-09-30 16:06     ` [PATCH v6 16/19] arm, arm64: " Konrad Rzeszutek Wilk
2013-09-30 16:06     ` Konrad Rzeszutek Wilk
2013-10-09 17:54     ` [PATCH v6 16/19] arm,arm64: " Stefano Stabellini
2013-10-09 17:54       ` Stefano Stabellini
2013-10-09 17:54       ` Stefano Stabellini
2013-09-27 16:10 ` [PATCH v6 17/19] xen: introduce XENMEM_pin Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-30 17:22   ` Konrad Rzeszutek Wilk
2013-09-30 17:22     ` Konrad Rzeszutek Wilk
2013-09-27 16:10 ` [PATCH v6 18/19] swiotlb-xen: introduce a rbtree to track phys to bus mappings Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-30 17:27   ` Konrad Rzeszutek Wilk
2013-09-30 17:27     ` Konrad Rzeszutek Wilk
2013-10-02 17:23     ` Stefano Stabellini
2013-10-02 17:23       ` Stefano Stabellini
2013-10-02 17:23       ` Stefano Stabellini
2013-10-09 17:25     ` Stefano Stabellini
2013-10-09 17:25       ` Stefano Stabellini
2013-10-09 17:25       ` Stefano Stabellini
2013-09-27 16:10 ` [PATCH v6 19/19] swiotlb-xen: instead of bouncing on the swiotlb, pin single pages Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-27 16:10   ` Stefano Stabellini
2013-09-30 17:39   ` Konrad Rzeszutek Wilk
2013-09-30 17:39     ` Konrad Rzeszutek Wilk
2013-10-09 17:27     ` Stefano Stabellini
2013-10-09 17:27       ` Stefano Stabellini
2013-10-09 17:27       ` Stefano Stabellini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130930145405.GN3106@phenom.dumpdata.com \
    --to=konrad.wilk@oracle.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.