All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2] Avoid additional GET_FEATURES call on vhost-user
@ 2016-09-22 12:13 Felipe Franciosi
  2016-09-23 16:06 ` Michael S. Tsirkin
  2016-10-09 22:33 ` Michael S. Tsirkin
  0 siblings, 2 replies; 7+ messages in thread
From: Felipe Franciosi @ 2016-09-22 12:13 UTC (permalink / raw)
  To: Michael S. Tsirkin, Marc-Andre Lureau; +Cc: qemu-devel, Felipe Franciosi

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 <felipe@nutanix.com>
---
v2. Rebase on d1b4259f

 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 272a5ec..0ffa4d1 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;
@@ -185,6 +176,24 @@ static int vhost_kernel_vsock_set_running(struct vhost_dev *dev, int start)
 }
 #endif /* CONFIG_VHOST_VSOCK */
 
+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 bd051ab..36fd35f 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -1051,7 +1051,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;
@@ -1077,12 +1076,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) {
@@ -1100,8 +1093,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

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2016-10-10 18:20 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-22 12:13 [Qemu-devel] [PATCH v2] Avoid additional GET_FEATURES call on vhost-user Felipe Franciosi
2016-09-23 16:06 ` Michael S. Tsirkin
2016-10-09 22:33 ` Michael S. Tsirkin
2016-10-10 15:17   ` Felipe Franciosi
2016-10-10 15:24     ` Michael S. Tsirkin
2016-10-10 15:31       ` Felipe Franciosi
2016-10-10 18:20         ` Michael S. Tsirkin

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.