[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL V2 01/25] vhost: move descriptor translation to vhost_svq_vring_wr
From: |
Jason Wang |
Subject: |
[PULL V2 01/25] vhost: move descriptor translation to vhost_svq_vring_write_descs |
Date: |
Wed, 20 Jul 2022 17:02:49 +0800 |
From: Eugenio Pérez <eperezma@redhat.com>
It's done for both in and out descriptors so it's better placed here.
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
---
hw/virtio/vhost-shadow-virtqueue.c | 38 +++++++++++++++++++++++++++-----------
1 file changed, 27 insertions(+), 11 deletions(-)
diff --git a/hw/virtio/vhost-shadow-virtqueue.c
b/hw/virtio/vhost-shadow-virtqueue.c
index 56c96eb..e2184a4 100644
--- a/hw/virtio/vhost-shadow-virtqueue.c
+++ b/hw/virtio/vhost-shadow-virtqueue.c
@@ -122,17 +122,35 @@ static bool vhost_svq_translate_addr(const
VhostShadowVirtqueue *svq,
return true;
}
-static void vhost_vring_write_descs(VhostShadowVirtqueue *svq, hwaddr *sg,
- const struct iovec *iovec, size_t num,
- bool more_descs, bool write)
+/**
+ * Write descriptors to SVQ vring
+ *
+ * @svq: The shadow virtqueue
+ * @sg: Cache for hwaddr
+ * @iovec: The iovec from the guest
+ * @num: iovec length
+ * @more_descs: True if more descriptors come in the chain
+ * @write: True if they are writeable descriptors
+ *
+ * Return true if success, false otherwise and print error.
+ */
+static bool vhost_svq_vring_write_descs(VhostShadowVirtqueue *svq, hwaddr *sg,
+ const struct iovec *iovec, size_t num,
+ bool more_descs, bool write)
{
uint16_t i = svq->free_head, last = svq->free_head;
unsigned n;
uint16_t flags = write ? cpu_to_le16(VRING_DESC_F_WRITE) : 0;
vring_desc_t *descs = svq->vring.desc;
+ bool ok;
if (num == 0) {
- return;
+ return true;
+ }
+
+ ok = vhost_svq_translate_addr(svq, sg, iovec, num);
+ if (unlikely(!ok)) {
+ return false;
}
for (n = 0; n < num; n++) {
@@ -150,6 +168,7 @@ static void vhost_vring_write_descs(VhostShadowVirtqueue
*svq, hwaddr *sg,
}
svq->free_head = le16_to_cpu(svq->desc_next[last]);
+ return true;
}
static bool vhost_svq_add_split(VhostShadowVirtqueue *svq,
@@ -169,21 +188,18 @@ static bool vhost_svq_add_split(VhostShadowVirtqueue *svq,
return false;
}
- ok = vhost_svq_translate_addr(svq, sgs, elem->out_sg, elem->out_num);
+ ok = vhost_svq_vring_write_descs(svq, sgs, elem->out_sg, elem->out_num,
+ elem->in_num > 0, false);
if (unlikely(!ok)) {
return false;
}
- vhost_vring_write_descs(svq, sgs, elem->out_sg, elem->out_num,
- elem->in_num > 0, false);
-
- ok = vhost_svq_translate_addr(svq, sgs, elem->in_sg, elem->in_num);
+ ok = vhost_svq_vring_write_descs(svq, sgs, elem->in_sg, elem->in_num,
false,
+ true);
if (unlikely(!ok)) {
return false;
}
- vhost_vring_write_descs(svq, sgs, elem->in_sg, elem->in_num, false, true);
-
/*
* Put the entry in the available array (but don't update avail->idx until
* they do sync).
--
2.7.4
- [PULL V2 00/25] Net patches, Jason Wang, 2022/07/20
- [PULL V2 01/25] vhost: move descriptor translation to vhost_svq_vring_write_descs,
Jason Wang <=
- [PULL V2 02/25] virtio-net: Expose MAC_TABLE_ENTRIES, Jason Wang, 2022/07/20
- [PULL V2 03/25] virtio-net: Expose ctrl virtqueue logic, Jason Wang, 2022/07/20
- [PULL V2 04/25] vdpa: Avoid compiler to squash reads to used idx, Jason Wang, 2022/07/20
- [PULL V2 06/25] vhost: Move vhost_svq_kick call to vhost_svq_add, Jason Wang, 2022/07/20
- [PULL V2 07/25] vhost: Check for queue full at vhost_svq_add, Jason Wang, 2022/07/20
- [PULL V2 08/25] vhost: Decouple vhost_svq_add from VirtQueueElement, Jason Wang, 2022/07/20
- [PULL V2 09/25] vhost: Add SVQDescState, Jason Wang, 2022/07/20
- [PULL V2 10/25] vhost: Track number of descs in SVQDescState, Jason Wang, 2022/07/20
- [PULL V2 11/25] vhost: add vhost_svq_push_elem, Jason Wang, 2022/07/20
- [PULL V2 05/25] vhost: Reorder vhost_svq_kick, Jason Wang, 2022/07/20