All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: Yuanhan Liu <yuanhan.liu@linux.intel.com>, qemu-devel@nongnu.org
Cc: changchun.ouyang@intel.com, mst@redhat.com
Subject: Re: [Qemu-devel] [PATCH 2/7] vhost-user: add protocol feature negotiation
Date: Thu, 17 Sep 2015 15:12:55 +0800	[thread overview]
Message-ID: <55FA67F7.1000800@redhat.com> (raw)
In-Reply-To: <1442301035-7550-4-git-send-email-yuanhan.liu@linux.intel.com>



On 09/15/2015 03:10 PM, Yuanhan Liu wrote:
> From: "Michael S. Tsirkin" <mst@redhat.com>
>
> Support a separate bitmask for vhost-user protocol features,
> and messages to get/set protocol features.
>
> Invoke them at init.
>
> No features are defined yet.
>
> v2: leverage vhost_user_call for request handling -- Yuanhan Liu
>
> Signed-off-by: Michael S. Tsirkin <address@hidden>
> Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
> ---
>  docs/specs/vhost-user.txt | 37 +++++++++++++++++++++++++++++++++++++
>  hw/net/vhost_net.c        |  2 ++
>  hw/virtio/vhost-user.c    | 31 +++++++++++++++++++++++++++++++
>  include/hw/virtio/vhost.h |  1 +
>  4 files changed, 71 insertions(+)
>
> diff --git a/docs/specs/vhost-user.txt b/docs/specs/vhost-user.txt
> index 650bb18..70da3b1 100644
> --- a/docs/specs/vhost-user.txt
> +++ b/docs/specs/vhost-user.txt
> @@ -113,6 +113,7 @@ message replies. Most of the requests don't require replies. Here is a list of
>  the ones that do:
>  
>   * VHOST_GET_FEATURES
> + * VHOST_GET_PROTOCOL_FEATURES
>   * VHOST_GET_VRING_BASE
>  
>  There are several messages that the master sends with file descriptors passed
> @@ -127,6 +128,13 @@ in the ancillary data:
>  If Master is unable to send the full message or receives a wrong reply it will
>  close the connection. An optional reconnection mechanism can be implemented.
>  
> +Any protocol extensions are gated by protocol feature bits,
> +which allows full backwards compatibility on both master
> +and slave.
> +As older slaves don't support negotiating protocol features,
> +a feature bit was dedicated for this purpose:
> +#define VHOST_USER_F_PROTOCOL_FEATURES 30
> +
>  Message types
>  -------------
>  
> @@ -138,6 +146,8 @@ Message types
>        Slave payload: u64
>  
>        Get from the underlying vhost implementation the features bitmask.
> +      Feature bit VHOST_USER_F_PROTOCOL_FEATURES signals slave support for
> +      VHOST_USER_GET_PROTOCOL_FEATURES and VHOST_USER_SET_PROTOCOL_FEATURES.
>  
>   * VHOST_USER_SET_FEATURES
>  
> @@ -146,6 +156,33 @@ Message types
>        Master payload: u64
>  
>        Enable features in the underlying vhost implementation using a bitmask.
> +      Feature bit VHOST_USER_F_PROTOCOL_FEATURES signals slave support for
> +      VHOST_USER_GET_PROTOCOL_FEATURES and VHOST_USER_SET_PROTOCOL_FEATURES.
> +
> + * VHOST_USER_GET_PROTOCOL_FEATURES
> +
> +      Id: 15
> +      Equivalent ioctl: VHOST_GET_FEATURES
> +      Master payload: N/A
> +      Slave payload: u64
> +
> +      Get the protocol feature bitmask from the underlying vhost implementation.
> +      Only legal if feature bit VHOST_USER_F_PROTOCOL_FEATURES is present in
> +      VHOST_USER_GET_FEATURES.
> +      Note: slave that reported VHOST_USER_F_PROTOCOL_FEATURES must support
> +      this message even before VHOST_USER_SET_FEATURES was called.
> +
> + * VHOST_USER_SET_PROTOCOL_FEATURES
> +
> +      Id: 16
> +      Ioctl: VHOST_SET_FEATURES
> +      Master payload: u64
> +
> +      Enable protocol features in the underlying vhost implementation.
> +      Only legal if feature bit VHOST_USER_F_PROTOCOL_FEATURES is present in
> +      VHOST_USER_GET_FEATURES.
> +      Note: slave that reported VHOST_USER_F_PROTOCOL_FEATURES must support
> +      this message even before VHOST_USER_SET_FEATURES was called.
>  
>   * VHOST_USER_SET_OWNER
>  
> diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c
> index 5c1d11f..c864237 100644
> --- a/hw/net/vhost_net.c
> +++ b/hw/net/vhost_net.c
> @@ -152,8 +152,10 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options)
>          net->dev.backend_features = qemu_has_vnet_hdr(options->net_backend)
>              ? 0 : (1ULL << VHOST_NET_F_VIRTIO_NET_HDR);
>          net->backend = r;
> +        net->dev.protocol_features = 0;
>      } else {
>          net->dev.backend_features = 0;
> +        net->dev.protocol_features = 0;
>          net->backend = -1;
>      }
>      net->nc = options->net_backend;
> diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
> index 13677ac..43169a1 100644
> --- a/hw/virtio/vhost-user.c
> +++ b/hw/virtio/vhost-user.c
> @@ -24,6 +24,8 @@
>  #include <linux/vhost.h>
>  
>  #define VHOST_MEMORY_MAX_NREGIONS    8
> +#define VHOST_USER_F_PROTOCOL_FEATURES 30
> +#define VHOST_USER_PROTOCOL_FEATURE_MASK 0x0ULL
>  
>  typedef enum VhostUserRequest {
>      VHOST_USER_NONE = 0,
> @@ -41,6 +43,8 @@ typedef enum VhostUserRequest {
>      VHOST_USER_SET_VRING_KICK = 12,
>      VHOST_USER_SET_VRING_CALL = 13,
>      VHOST_USER_SET_VRING_ERR = 14,
> +    VHOST_USER_GET_PROTOCOL_FEATURES = 15,
> +    VHOST_USER_SET_PROTOCOL_FEATURES = 16,
>      VHOST_USER_MAX
>  } VhostUserRequest;
>  
> @@ -206,11 +210,13 @@ static int vhost_user_call(struct vhost_dev *dev, unsigned long int request,
>  
>      switch (msg_request) {
>      case VHOST_USER_GET_FEATURES:
> +    case VHOST_USER_GET_PROTOCOL_FEATURES:
>          need_reply = 1;
>          break;
>  
>      case VHOST_USER_SET_FEATURES:
>      case VHOST_USER_SET_LOG_BASE:
> +    case VHOST_USER_SET_PROTOCOL_FEATURES:
>          msg.u64 = *((__u64 *) arg);
>          msg.size = sizeof(m.u64);
>          break;
> @@ -308,6 +314,7 @@ static int vhost_user_call(struct vhost_dev *dev, unsigned long int request,
>  
>          switch (msg_request) {
>          case VHOST_USER_GET_FEATURES:
> +        case VHOST_USER_GET_PROTOCOL_FEATURES:
>              if (msg.size != sizeof(m.u64)) {
>                  error_report("Received bad msg size.");
>                  return -1;
> @@ -333,10 +340,34 @@ static int vhost_user_call(struct vhost_dev *dev, unsigned long int request,
>  
>  static int vhost_user_init(struct vhost_dev *dev, void *opaque)
>  {
> +    unsigned long long features;
> +    int err;
> +
>      assert(dev->vhost_ops->backend_type == VHOST_BACKEND_TYPE_USER);
>  
>      dev->opaque = opaque;
>  
> +    err = vhost_user_call(dev, VHOST_USER_GET_FEATURES, &features);
> +    if (err < 0) {
> +        return err;
> +    }
> +
> +    if (__virtio_has_feature(features, VHOST_USER_F_PROTOCOL_FEATURES)) {

Need rebase to master. (And use virtio_has_feature() here).

> +        dev->backend_features |= 1ULL << VHOST_USER_F_PROTOCOL_FEATURES;
> +
> +        err = vhost_user_call(dev, VHOST_USER_GET_PROTOCOL_FEATURES, &features);
> +        if (err < 0) {
> +            return err;
> +        }
> +
> +        dev->protocol_features = features & VHOST_USER_PROTOCOL_FEATURE_MASK;
> +        err = vhost_user_call(dev, VHOST_USER_SET_PROTOCOL_FEATURES,
> +                              &dev->protocol_features);
> +        if (err < 0) {
> +            return err;
> +        }
> +    }
> +
>      return 0;
>  }
>  
> diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h
> index dd51050..6467c73 100644
> --- a/include/hw/virtio/vhost.h
> +++ b/include/hw/virtio/vhost.h
> @@ -47,6 +47,7 @@ struct vhost_dev {
>      unsigned long long features;
>      unsigned long long acked_features;
>      unsigned long long backend_features;
> +    unsigned long long protocol_features;
>      bool started;
>      bool log_enabled;
>      unsigned long long log_size;

  reply	other threads:[~2015-09-17  7:13 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-15  7:10 [Qemu-devel] [PATCH 0/7 v9] vhost-user multiple queue support Yuanhan Liu
2015-09-15  7:10 ` [Qemu-devel] [PATCH 1/7] vhost-user: use VHOST_USER_XXX macro for switch statement Yuanhan Liu
2015-09-15  7:10 ` [Qemu-devel] [PATCH 1/2] vhost-user: add multiple queue support Yuanhan Liu
2015-09-15 14:56   ` Eric Blake
2015-09-16  2:07     ` Yuanhan Liu
2015-09-15  7:10 ` [Qemu-devel] [PATCH 2/7] vhost-user: add protocol feature negotiation Yuanhan Liu
2015-09-17  7:12   ` Jason Wang [this message]
2015-09-17  7:20     ` Yuanhan Liu
2015-09-15  7:10 ` [Qemu-devel] [PATCH 3/7] vhost: rename VHOST_RESET_OWNER to VHOST_RESET_DEVICE Yuanhan Liu
2015-09-15  7:10 ` [Qemu-devel] [PATCH 4/7] vhost-user: add VHOST_USER_GET_QUEUE_NUM message Yuanhan Liu
2015-09-15  7:10 ` [Qemu-devel] [PATCH 5/7] vhost: introduce vhost_backend_get_vq_index method Yuanhan Liu
2015-09-15  7:10 ` [Qemu-devel] [PATCH 6/7] vhost-user: add multiple queue support Yuanhan Liu
2015-09-15 15:02   ` Eric Blake
2015-09-16  2:06     ` Yuanhan Liu
2015-09-16  2:48       ` Yuanhan Liu
2015-09-16  8:10       ` Michael S. Tsirkin
2015-09-16  8:23         ` Yuanhan Liu
2015-09-16 14:15       ` Eric Blake
2015-09-16 14:53         ` Yuanhan Liu
2015-09-15  7:10 ` [Qemu-devel] [PATCH 7/7] vhost-user: add a new message to disable/enable a specific virt queue Yuanhan Liu
2015-09-16  8:12 ` [Qemu-devel] [PATCH 0/7 v9] vhost-user multiple queue support Michael S. Tsirkin
2015-09-16  8:17   ` Yuanhan Liu
2015-09-16 11:39 ` Marcel Apfelbaum
2015-09-16 12:23   ` Yuanhan Liu
2015-09-16 14:06     ` Marcel Apfelbaum
2015-09-17 12:23 ` Michael S. Tsirkin
2015-09-18  1:18   ` Yuanhan Liu
  -- strict thread matches above, loose matches on Subject: below --
2015-09-08  7:38 [Qemu-devel] [PATCH 0/7 v7] " Yuanhan Liu
2015-09-08  7:38 ` [Qemu-devel] [PATCH 2/7] vhost-user: add protocol feature negotiation Yuanhan Liu

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=55FA67F7.1000800@redhat.com \
    --to=jasowang@redhat.com \
    --cc=changchun.ouyang@intel.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=yuanhan.liu@linux.intel.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.