[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: |
Felipe Franciosi |
Subject: |
Re: [Qemu-devel] [PATCH] Avoid additional GET_FEATURES call on vhost-user |
Date: |
Thu, 22 Sep 2016 13:22:56 +0000 |
> On 19 Sep 2016, at 18:42, Michael S. Tsirkin <address@hidden> wrote:
>
> 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!
No problem! Done! :)
http://lists.nongnu.org/archive/html/qemu-devel/2016-09/msg05582.html
Felipe
>
>
> 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
>>