[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH v8 12/21] vdpa: delay set_vring_ready after DRIVER_OK
From: |
Eugenio Pérez |
Subject: |
[RFC PATCH v8 12/21] vdpa: delay set_vring_ready after DRIVER_OK |
Date: |
Thu, 19 May 2022 21:12:57 +0200 |
To restore the device in the destination of a live migration we send the
commands through control virtqueue. For a device to read CVQ it must
have received DRIVER_OK status bit.
However this open a window where the device could start receiving
packets in rx queue 0 before it receive the RSS configuration. To avoid
that, we will not send vring_enable until all configuration is used by
the device.
As a first step, reverse the DRIVER_OK and SET_VRING_ENABLE steps.
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
---
hw/virtio/vhost-vdpa.c | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
index 31b3d4d013..13e5e2a061 100644
--- a/hw/virtio/vhost-vdpa.c
+++ b/hw/virtio/vhost-vdpa.c
@@ -748,13 +748,18 @@ static int vhost_vdpa_get_vq_index(struct vhost_dev *dev,
int idx)
return idx;
}
+/**
+ * Set ready all vring of the device
+ *
+ * @dev: Vhost device
+ */
static int vhost_vdpa_set_vring_ready(struct vhost_dev *dev)
{
int i;
trace_vhost_vdpa_set_vring_ready(dev);
- for (i = 0; i < dev->nvqs; ++i) {
+ for (i = 0; i < dev->vq_index_end; ++i) {
struct vhost_vring_state state = {
- .index = dev->vq_index + i,
+ .index = i,
.num = 1,
};
vhost_vdpa_call(dev, VHOST_VDPA_SET_VRING_ENABLE, &state);
@@ -1117,7 +1122,6 @@ static int vhost_vdpa_dev_start(struct vhost_dev *dev,
bool started)
if (unlikely(!ok)) {
return -1;
}
- vhost_vdpa_set_vring_ready(dev);
} else {
ok = vhost_vdpa_svqs_stop(dev);
if (unlikely(!ok)) {
@@ -1131,16 +1135,22 @@ static int vhost_vdpa_dev_start(struct vhost_dev *dev,
bool started)
}
if (started) {
+ int r;
memory_listener_register(&v->listener, &address_space_memory);
- return vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_DRIVER_OK);
+ r = vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_DRIVER_OK);
+ if (unlikely(r)) {
+ return r;
+ }
+ vhost_vdpa_set_vring_ready(dev);
} else {
vhost_vdpa_reset_device(dev);
vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE |
VIRTIO_CONFIG_S_DRIVER);
memory_listener_unregister(&v->listener);
- return 0;
}
+
+ return 0;
}
static int vhost_vdpa_set_log_base(struct vhost_dev *dev, uint64_t base,
--
2.27.0
- [RFC PATCH v8 01/21] virtio-net: Expose ctrl virtqueue logic, (continued)
- [RFC PATCH v8 01/21] virtio-net: Expose ctrl virtqueue logic, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 03/21] vdpa: control virtqueue support on shadow virtqueue, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 04/21] virtio: Make virtqueue_alloc_element non-static, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 05/21] vhost: Add vhost_iova_tree_find, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 06/21] vdpa: Add map/unmap operation callback to SVQ, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 07/21] vhost: move descriptor translation to vhost_svq_vring_write_descs, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 08/21] vhost: Add SVQElement, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 09/21] vhost: Add svq copy desc mode, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 11/21] vhost: Update kernel headers, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 10/21] vhost: Add vhost_svq_inject, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 12/21] vdpa: delay set_vring_ready after DRIVER_OK,
Eugenio Pérez <=
- [RFC PATCH v8 13/21] vhost: Add ShadowVirtQueueStart operation, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 14/21] vhost: Make possible to check for device exclusive vq group, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 16/21] vdpa: Add vhost_vdpa_start_control_svq, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 17/21] vdpa: Add asid attribute to vdpa device, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 18/21] vdpa: Extract get features part from vhost_vdpa_get_max_queue_pairs, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 21/21] vdpa: Add x-cvq-svq, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 15/21] vhost: add vhost_svq_poll, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 19/21] vhost: Add reference counting to vhost_iova_tree, Eugenio Pérez, 2022/05/19
- [RFC PATCH v8 20/21] vdpa: Add x-svq to NetdevVhostVDPAOptions, Eugenio Pérez, 2022/05/19