60 lines
2.1 KiB
Diff
60 lines
2.1 KiB
Diff
|
|
From d42fea8a40c4a5d8909103910d86da8e674d1fb2 Mon Sep 17 00:00:00 2001
|
||
|
|
From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma@redhat.com>
|
||
|
|
Date: Mon, 14 Mar 2022 18:34:52 +0100
|
||
|
|
Subject: [PATCH] vdpa: Adapt vhost_vdpa_get_vring_base to SVQ
|
||
|
|
MIME-Version: 1.0
|
||
|
|
Content-Type: text/plain; charset=UTF-8
|
||
|
|
Content-Transfer-Encoding: 8bit
|
||
|
|
|
||
|
|
This is needed to achieve migration, so the destination can restore its
|
||
|
|
index.
|
||
|
|
|
||
|
|
Setting base as last used idx, so destination will see as available all
|
||
|
|
the entries that the device did not use, including the in-flight
|
||
|
|
processing ones.
|
||
|
|
|
||
|
|
This is ok for networking, but other kinds of devices might have
|
||
|
|
problems with these retransmissions.
|
||
|
|
|
||
|
|
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||
|
|
Acked-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
|
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
||
|
|
Signed-off-by: fangyi <eric.fangyi@huawei.com>
|
||
|
|
---
|
||
|
|
hw/virtio/vhost-vdpa.c | 17 +++++++++++++++++
|
||
|
|
1 file changed, 17 insertions(+)
|
||
|
|
|
||
|
|
diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
|
||
|
|
index 8245345bcd..428137f654 100644
|
||
|
|
--- a/hw/virtio/vhost-vdpa.c
|
||
|
|
+++ b/hw/virtio/vhost-vdpa.c
|
||
|
|
@@ -1143,8 +1143,25 @@ static int vhost_vdpa_set_vring_base(struct vhost_dev *dev,
|
||
|
|
static int vhost_vdpa_get_vring_base(struct vhost_dev *dev,
|
||
|
|
struct vhost_vring_state *ring)
|
||
|
|
{
|
||
|
|
+ struct vhost_vdpa *v = dev->opaque;
|
||
|
|
int ret;
|
||
|
|
|
||
|
|
+ if (v->shadow_vqs_enabled) {
|
||
|
|
+ VhostShadowVirtqueue *svq = g_ptr_array_index(v->shadow_vqs,
|
||
|
|
+ ring->index);
|
||
|
|
+
|
||
|
|
+ /*
|
||
|
|
+ * Setting base as last used idx, so destination will see as available
|
||
|
|
+ * all the entries that the device did not use, including the in-flight
|
||
|
|
+ * processing ones.
|
||
|
|
+ *
|
||
|
|
+ * TODO: This is ok for networking, but other kinds of devices might
|
||
|
|
+ * have problems with these retransmissions.
|
||
|
|
+ */
|
||
|
|
+ ring->num = svq->last_used_idx;
|
||
|
|
+ return 0;
|
||
|
|
+ }
|
||
|
|
+
|
||
|
|
ret = vhost_vdpa_call(dev, VHOST_GET_VRING_BASE, ring);
|
||
|
|
trace_vhost_vdpa_get_vring_base(dev, ring->index, ring->num);
|
||
|
|
return ret;
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|