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

Re: [Xen-devel] [PATCH v4 1/1] public/io/netif.h: add gref mapping control messages


  • To: 'Joao Martins' <joao.m.martins@xxxxxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxx>
  • From: Paul Durrant <Paul.Durrant@xxxxxxxxxx>
  • Date: Wed, 20 Sep 2017 08:23:20 +0000
  • Accept-language: en-GB, en-US
  • Cc: Wei Liu <wei.liu2@xxxxxxxxxx>
  • Delivery-date: Wed, 20 Sep 2017 08:23:34 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xen.org>
  • Thread-index: AQHTMXq3ZrQlGt55z0ml22Bp1sID46K9cCsw
  • Thread-topic: [PATCH v4 1/1] public/io/netif.h: add gref mapping control messages

> -----Original Message-----
> From: Joao Martins [mailto:joao.m.martins@xxxxxxxxxx]
> Sent: 19 September 2017 20:08
> To: Xen-devel <xen-devel@xxxxxxxxxxxxx>
> Cc: Wei Liu <wei.liu2@xxxxxxxxxx>; Paul Durrant <Paul.Durrant@xxxxxxxxxx>;
> Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>; Joao Martins
> <joao.m.martins@xxxxxxxxxx>
> Subject: [PATCH v4 1/1] public/io/netif.h: add gref mapping control messages
> 
> Adds 3 messages to allow guest to let backend keep grants mapped,
> such that 1) guests allowing fast recycling of pages can avoid doing
> grant ops for those cases, or otherwise 2) preferring copies over
> grants and 3) always using a fixed set of pages for network I/O.
> 
> The three control ring messages added are:
>  - Add grefs to be mapped by backend
>  - Remove grefs mappings (If they are not in use)
>  - Get maximum amount of grefs kept mapped.
> 
> Signed-off-by: Joao Martins <joao.m.martins@xxxxxxxxxx>

I think the text is clear enough now. Now for the netfront/netback patches :-)

Reviewed-by: Paul Durrant <paul.durrant@xxxxxxxxxx>

> ---
> v4:
> * Declare xen_netif_gref parameters are input or output.
> * Clarify status field and that it doesn't require to be set to zero
> prior to its usage.
> * Clarify on ADD_GREF_MAPPING is 'all or nothing'
> * Improve last paragraph of DEL_GREF_MAPPING
> 
> v3:
> * Use DEL for unmapping grefs instead of PUT
> * Rname from xen_netif_gref_alloc to xen_netif_gref
> * Add 'status' field on xen_netif_gref
> * Clarify what 'inflight' means
> * Use "beginning of the page" instead of "beginning of the grant"
> * Mention that page needs to be r/w (as it will have to modify \.status)
> ---
>  xen/include/public/io/netif.h | 123
> ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 123 insertions(+)
> 
> diff --git a/xen/include/public/io/netif.h b/xen/include/public/io/netif.h
> index ca0061410d..2454448baa 100644
> --- a/xen/include/public/io/netif.h
> +++ b/xen/include/public/io/netif.h
> @@ -353,6 +353,9 @@ struct xen_netif_ctrl_request {
>  #define XEN_NETIF_CTRL_TYPE_SET_HASH_MAPPING_SIZE 5
>  #define XEN_NETIF_CTRL_TYPE_SET_HASH_MAPPING      6
>  #define XEN_NETIF_CTRL_TYPE_SET_HASH_ALGORITHM    7
> +#define XEN_NETIF_CTRL_TYPE_GET_GREF_MAPPING_SIZE 8
> +#define XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPING      9
> +#define XEN_NETIF_CTRL_TYPE_DEL_GREF_MAPPING     10
> 
>      uint32_t data[3];
>  };
> @@ -391,6 +394,44 @@ struct xen_netif_ctrl_response {
>  };
> 
>  /*
> + * Static Grants (struct xen_netif_gref)
> + * =====================================
> + *
> + * A frontend may provide a fixed set of grant references to be mapped on
> + * the backend. The message of type
> XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPING
> + * prior its usage in the command ring allows for creation of these mappings.
> + * The backend will maintain a fixed amount of these mappings.
> + *
> + * XEN_NETIF_CTRL_TYPE_GET_GREF_MAPPING_SIZE lets a frontend
> query how many
> + * of these mappings can be kept.
> + *
> + * Each entry in the XEN_NETIF_CTRL_TYPE_{ADD,DEL}_GREF_MAPPING
> input table has
> + * the following format:
> + *
> + *    0     1     2     3     4     5     6     7  octet
> + * +-----+-----+-----+-----+-----+-----+-----+-----+
> + * | grant ref             |  flags    |  status   |
> + * +-----+-----+-----+-----+-----+-----+-----+-----+
> + *
> + * grant ref: grant reference (IN)
> + * flags: flags describing the control operation (IN)
> + * status: XEN_NETIF_CTRL_STATUS_* (OUT)
> + *
> + * 'status' is an output parameter which does not require to be set to zero
> + * prior to its usage in the corresponding control messages.
> + */
> +
> +struct xen_netif_gref {
> +       grant_ref_t ref;
> +       uint16_t flags;
> +
> +#define _XEN_NETIF_CTRLF_GREF_readonly    0
> +#define XEN_NETIF_CTRLF_GREF_readonly
> (1U<<_XEN_NETIF_CTRLF_GREF_readonly)
> +
> +       uint16_t status;
> +};
> +
> +/*
>   * Control messages
>   * ================
>   *
> @@ -609,6 +650,88 @@ struct xen_netif_ctrl_response {
>   *       invalidate any table data outside that range.
>   *       The grant reference may be read-only and must remain valid until
>   *       the response has been processed.
> + *
> + * XEN_NETIF_CTRL_TYPE_GET_GREF_MAPPING_SIZE
> + * -----------------------------------------
> + *
> + * This is sent by the frontend to fetch the number of grefs that can be kept
> + * mapped in the backend.
> + *
> + * Request:
> + *
> + *  type    = XEN_NETIF_CTRL_TYPE_GET_GREF_MAPPING_SIZE
> + *  data[0] = queue index (assumed 0 for single queue)
> + *  data[1] = 0
> + *  data[2] = 0
> + *
> + * Response:
> + *
> + *  status = XEN_NETIF_CTRL_STATUS_NOT_SUPPORTED     - Operation not
> + *                                                     supported
> + *           XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER - The queue index
> is
> + *                                                     out of range
> + *           XEN_NETIF_CTRL_STATUS_SUCCESS           - Operation successful
> + *  data   = maximum number of entries allowed in the gref mapping table
> + *           (if operation was successful) or zero if it is not supported.
> + *
> + * XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPING
> + * ------------------------------------
> + *
> + * This is sent by the frontend for backend to map a list of grant
> + * references.
> + *
> + * Request:
> + *
> + *  type    = XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPING
> + *  data[0] = queue index
> + *  data[1] = grant reference of page containing the mapping list
> + *            (r/w and assumed to start at beginning of page)
> + *  data[2] = size of list in entries
> + *
> + * Response:
> + *
> + *  status = XEN_NETIF_CTRL_STATUS_NOT_SUPPORTED     - Operation not
> + *                                                     supported
> + *           XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER - Operation failed
> + *           XEN_NETIF_CTRL_STATUS_SUCCESS           - Operation successful
> + *
> + * NOTE: Each entry in the input table has the format outlined
> + *       in struct xen_netif_gref.
> + *       Contrary to XEN_NETIF_CTRL_TYPE_DEL_GREF_MAPPING, the struct
> + *       xen_netif_gref 'status' field is not used and therefore the response
> + *       'status' determines the success of this operation. In case of
> + *       failure none of grants mappings get added in the backend.
> + *
> + * XEN_NETIF_CTRL_TYPE_DEL_GREF_MAPPING
> + * ------------------------------------
> + *
> + * This is sent by the frontend for backend to unmap a list of grant
> + * references.
> + *
> + * Request:
> + *
> + *  type    = XEN_NETIF_CTRL_TYPE_DEL_GREF_MAPPING
> + *  data[0] = queue index
> + *  data[1] = grant reference of page containing the mapping list
> + *            (r/w and assumed to start at beginning of page)
> + *  data[2] = size of list in entries
> + *
> + * Response:
> + *
> + *  status = XEN_NETIF_CTRL_STATUS_NOT_SUPPORTED     - Operation not
> + *                                                     supported
> + *           XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER - Operation failed
> + *           XEN_NETIF_CTRL_STATUS_SUCCESS           - Operation successful
> + *  data   = number of entries that were unmapped
> + *
> + * NOTE: Each entry in the input table has the format outlined in struct
> + *       xen_netif_gref.
> + *       The struct xen_netif_gref 'status' field determines if the entry
> + *       was successfully removed.
> + *       The entries used are only the ones representing grant references 
> that
> + *       were previously the subject of a
> XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPING
> + *       operation. Any other entries will have their status set to
> + *       XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER upon completion.
>   */
> 
>  DEFINE_RING_TYPES(xen_netif_ctrl,
> --
> 2.11.0


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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