[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 09/22] vhost: Add opaque member to SVQElement
From: |
Eugenio Pérez |
Subject: |
[PATCH 09/22] vhost: Add opaque member to SVQElement |
Date: |
Fri, 8 Jul 2022 12:50:00 +0200 |
When qemu injects buffers to the vdpa device it will be used to maintain
contextual data. If SVQ has no operation, it will be used to maintain
the VirtQueueElement pointer.
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
---
hw/virtio/vhost-shadow-virtqueue.h | 3 ++-
hw/virtio/vhost-shadow-virtqueue.c | 13 +++++++------
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/hw/virtio/vhost-shadow-virtqueue.h
b/hw/virtio/vhost-shadow-virtqueue.h
index 5646d875cb..3e1bea12ca 100644
--- a/hw/virtio/vhost-shadow-virtqueue.h
+++ b/hw/virtio/vhost-shadow-virtqueue.h
@@ -16,7 +16,8 @@
#include "hw/virtio/vhost-iova-tree.h"
typedef struct SVQElement {
- VirtQueueElement *elem;
+ /* Opaque data */
+ void *opaque;
/* Last descriptor of the chain */
uint32_t last_chain_id;
diff --git a/hw/virtio/vhost-shadow-virtqueue.c
b/hw/virtio/vhost-shadow-virtqueue.c
index 635b6b359f..01caa5887e 100644
--- a/hw/virtio/vhost-shadow-virtqueue.c
+++ b/hw/virtio/vhost-shadow-virtqueue.c
@@ -236,7 +236,7 @@ static uint16_t vhost_svq_last_desc_of_chain(const
VhostShadowVirtqueue *svq,
*/
static bool vhost_svq_add(VhostShadowVirtqueue *svq, const struct iovec
*out_sg,
size_t out_num, const struct iovec *in_sg,
- size_t in_num, VirtQueueElement *elem)
+ size_t in_num, void *opaque)
{
SVQElement *svq_elem;
unsigned qemu_head;
@@ -244,13 +244,12 @@ static bool vhost_svq_add(VhostShadowVirtqueue *svq,
const struct iovec *out_sg,
bool ok = vhost_svq_add_split(svq, out_sg, out_num, in_sg, in_num,
&qemu_head);
if (unlikely(!ok)) {
- g_free(elem);
return false;
}
n = out_num + in_num;
svq_elem = &svq->ring_id_maps[qemu_head];
- svq_elem->elem = elem;
+ svq_elem->opaque = opaque;
svq_elem->last_chain_id = vhost_svq_last_desc_of_chain(svq, n, qemu_head);
return true;
}
@@ -276,6 +275,8 @@ static bool vhost_svq_add_element(VhostShadowVirtqueue *svq,
elem->in_num, elem);
if (ok) {
vhost_svq_kick(svq);
+ } else {
+ g_free(elem);
}
return ok;
@@ -391,7 +392,7 @@ static void
vhost_svq_disable_notification(VhostShadowVirtqueue *svq)
static bool vhost_svq_is_empty_elem(SVQElement elem)
{
- return elem.elem == NULL;
+ return elem.opaque == NULL;
}
static SVQElement vhost_svq_empty_elem(void)
@@ -466,7 +467,7 @@ static void vhost_svq_flush(VhostShadowVirtqueue *svq,
break;
}
- elem = g_steal_pointer(&svq_elem.elem);
+ elem = g_steal_pointer(&svq_elem.opaque);
virtqueue_fill(vq, elem, len, i++);
}
@@ -634,7 +635,7 @@ void vhost_svq_stop(VhostShadowVirtqueue *svq)
for (unsigned i = 0; i < svq->vring.num; ++i) {
g_autofree VirtQueueElement *elem = NULL;
- elem = g_steal_pointer(&svq->ring_id_maps[i].elem);
+ elem = g_steal_pointer(&svq->ring_id_maps[i].opaque);
if (elem) {
virtqueue_detach_element(svq->vq, elem, 0);
}
--
2.31.1
- [PATCH 01/22] vhost: Return earlier if used buffers overrun, (continued)
- [PATCH 01/22] vhost: Return earlier if used buffers overrun, Eugenio Pérez, 2022/07/08
- [PATCH 02/22] vhost: move descriptor translation to vhost_svq_vring_write_descs, Eugenio Pérez, 2022/07/08
- [PATCH 03/22] vdpa: Clean vhost_vdpa_dev_start(dev, false), Eugenio Pérez, 2022/07/08
- [PATCH 04/22] virtio-net: Expose ctrl virtqueue logic, Eugenio Pérez, 2022/07/08
- [PATCH 06/22] vhost: Reorder vhost_svq_last_desc_of_chain, Eugenio Pérez, 2022/07/08
- [PATCH 05/22] vhost: Decouple vhost_svq_add_split from VirtQueueElement, Eugenio Pérez, 2022/07/08
- [PATCH 07/22] vhost: Add SVQElement, Eugenio Pérez, 2022/07/08
- [PATCH 08/22] vhost: Move last chain id to SVQ element, Eugenio Pérez, 2022/07/08
- [PATCH 11/22] vhost: add vhost_svq_push_elem, Eugenio Pérez, 2022/07/08
- [PATCH 10/22] vdpa: Small rename of error labels, Eugenio Pérez, 2022/07/08
- [PATCH 09/22] vhost: Add opaque member to SVQElement,
Eugenio Pérez <=
- [PATCH 12/22] vhost: Add vhost_svq_inject, Eugenio Pérez, 2022/07/08
- [PATCH 13/22] vhost: add vhost_svq_poll, Eugenio Pérez, 2022/07/08
- [PATCH 16/22] vhost: add detach SVQ operation, Eugenio Pérez, 2022/07/08
- [PATCH 18/22] vdpa: manual forward CVQ buffers, Eugenio Pérez, 2022/07/08
- [PATCH 15/22] vhost: Add svq avail_handler callback, Eugenio Pérez, 2022/07/08
- [PATCH 17/22] vdpa: Export vhost_vdpa_dma_map and unmap calls, Eugenio Pérez, 2022/07/08
- [PATCH 19/22] vdpa: Buffer CVQ support on shadow virtqueue, Eugenio Pérez, 2022/07/08
- [PATCH 20/22] vdpa: Extract get features part from vhost_vdpa_get_max_queue_pairs, Eugenio Pérez, 2022/07/08
- [PATCH 14/22] vhost: Add custom used buffer callback, Eugenio Pérez, 2022/07/08
- [PATCH 21/22] vdpa: Add device migration blocker, Eugenio Pérez, 2022/07/08