qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] Avoid additional GET_FEATURES call on vhost-use


From: Michael S. Tsirkin
Subject: Re: [Qemu-devel] [PATCH] Avoid additional GET_FEATURES call on vhost-user
Date: Mon, 19 Sep 2016 20:42:07 +0300

Thanks for the reminder. 2.8 is open now so I can integrate this.
I would appreciate it if you could rebase this top of

        commit d1b4259f1ab18af24e6a297edb6a8f71691f3256
        Author: Maxime Coquelin <address@hidden>
        Date:   Tue Sep 13 15:30:30 2016 +0200
            virtio-bus: Plug devices after features are negotiated

test and repost if it still works.

Thanks!


On Mon, Sep 19, 2016 at 05:25:49PM +0000, Felipe Franciosi wrote:
> Gentle ping.
> 
>  
> 
> Thanks,
> 
> Felipe
> 
>  
> 
> From: Marc-André Lureau <address@hidden>
> Date: Thursday, 25 August 2016 at 12:14
> To: Felipe Franciosi <address@hidden>, "address@hidden"
> <address@hidden>, "Michael S. Tsirkin" <address@hidden>
> Subject: Re: [Qemu-devel] [PATCH] Avoid additional GET_FEATURES call on
> vhost-user
> 
>  
> 
>     Hi
> 
>      
> 
>     On Sat, Aug 20, 2016 at 3:28 AM Felipe Franciosi <address@hidden>
>     wrote:
> 
>         Vhost-user requires an early GET_FEATURES call to determine if the
>         slave supports protocol feature negotiation. An extra GET_FEATURES
>         call is made after vhost_backend_init() to actually set the device
>         features.
> 
>         This patch moves the actual setting of the device features to both
>         implementations (kernel/user) of vhost_backend_init(), therefore
>         eliminating the need for a second call.
> 
>         Signed-off-by: Felipe Franciosi <address@hidden>
> 
> 
> 
>     Reviewed-by: Marc-André Lureau <address@hidden>
> 
>      
> 
>         ---
>          hw/virtio/vhost-backend.c | 27 ++++++++++++++++++---------
>          hw/virtio/vhost-user.c    |  1 +
>          hw/virtio/vhost.c         |  9 ---------
>          3 files changed, 19 insertions(+), 18 deletions(-)
> 
>         diff --git a/hw/virtio/vhost-backend.c b/hw/virtio/vhost-backend.c
>         index 7681f15..a519fe2 100644
>         --- a/hw/virtio/vhost-backend.c
>         +++ b/hw/virtio/vhost-backend.c
>         @@ -25,15 +25,6 @@ static int vhost_kernel_call(struct vhost_dev *dev,
>         unsigned long int request,
>              return ioctl(fd, request, arg);
>          }
> 
>         -static int vhost_kernel_init(struct vhost_dev *dev, void *opaque)
>         -{
>         -    assert(dev->vhost_ops->backend_type == 
> VHOST_BACKEND_TYPE_KERNEL);
>         -
>         -    dev->opaque = opaque;
>         -
>         -    return 0;
>         -}
>         -
>          static int vhost_kernel_cleanup(struct vhost_dev *dev)
>          {
>              int fd = (uintptr_t) dev->opaque;
>         @@ -172,6 +163,24 @@ static int vhost_kernel_get_vq_index(struct
>         vhost_dev *dev, int idx)
>              return idx - dev->vq_index;
>          }
> 
>         +static int vhost_kernel_init(struct vhost_dev *dev, void *opaque)
>         +{
>         +    uint64_t features;
>         +    int r;
>         +
>         +    assert(dev->vhost_ops->backend_type == 
> VHOST_BACKEND_TYPE_KERNEL);
>         +
>         +    dev->opaque = opaque;
>         +
>         +    r = vhost_kernel_get_features(dev, &features);
>         +    if (r < 0) {
>         +        return r;
>         +    }
>         +    dev->features = features;
>         +
>         +    return 0;
>         +}
>         +
>          static const VhostOps kernel_ops = {
>                  .backend_type = VHOST_BACKEND_TYPE_KERNEL,
>                  .vhost_backend_init = vhost_kernel_init,
>         diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
>         index b57454a..684f6d7 100644
>         --- a/hw/virtio/vhost-user.c
>         +++ b/hw/virtio/vhost-user.c
>         @@ -578,6 +578,7 @@ static int vhost_user_init(struct vhost_dev *dev,
>         void *opaque)
>              if (err < 0) {
>                  return err;
>              }
>         +    dev->features = features;
> 
>              if (virtio_has_feature(features, VHOST_USER_F_PROTOCOL_FEATURES))
>         {
>                  dev->backend_features |= 1ULL <<
>         VHOST_USER_F_PROTOCOL_FEATURES;
>         diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
>         index 3d0c807..cb9870a 100644
>         --- a/hw/virtio/vhost.c
>         +++ b/hw/virtio/vhost.c
>         @@ -1037,7 +1037,6 @@ static void vhost_virtqueue_cleanup(struct
>         vhost_virtqueue *vq)
>          int vhost_dev_init(struct vhost_dev *hdev, void *opaque,
>                             VhostBackendType backend_type, uint32_t
>         busyloop_timeout)
>          {
>         -    uint64_t features;
>              int i, r, n_initialized_vqs = 0;
> 
>              hdev->migration_blocker = NULL;
>         @@ -1063,12 +1062,6 @@ int vhost_dev_init(struct vhost_dev *hdev, void
>         *opaque,
>                  goto fail;
>              }
> 
>         -    r = hdev->vhost_ops->vhost_get_features(hdev, &features);
>         -    if (r < 0) {
>         -        VHOST_OPS_DEBUG("vhost_get_features failed");
>         -        goto fail;
>         -    }
>         -
>              for (i = 0; i < hdev->nvqs; ++i, ++n_initialized_vqs) {
>                  r = vhost_virtqueue_init(hdev, hdev->vqs + i, hdev->vq_index 
> +
>         i);
>                  if (r < 0) {
>         @@ -1086,8 +1079,6 @@ int vhost_dev_init(struct vhost_dev *hdev, void
>         *opaque,
>                  }
>              }
> 
>         -    hdev->features = features;
>         -
>              hdev->memory_listener = (MemoryListener) {
>                  .begin = vhost_begin,
>                  .commit = vhost_commit,
>         --
>         1.9.5
> 
> 
>     --
> 
>     Marc-André Lureau
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]