aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorLaurent Vivier <lvivier@redhat.com>2026-03-18 10:19:40 +0100
committerStefano Brivio <sbrivio@redhat.com>2026-03-20 20:05:26 +0100
commitf5391ae1b72680718e90b5ff6d83feec13f55366 (patch)
tree101adf1a0a2534e10c2a2b390589736df45374f6
parentb9d076d8af993359ec7cd2eb97572c1fe0675089 (diff)
downloadpasst-f5391ae1b72680718e90b5ff6d83feec13f55366.tar
passt-f5391ae1b72680718e90b5ff6d83feec13f55366.tar.gz
passt-f5391ae1b72680718e90b5ff6d83feec13f55366.tar.bz2
passt-f5391ae1b72680718e90b5ff6d83feec13f55366.tar.lz
passt-f5391ae1b72680718e90b5ff6d83feec13f55366.tar.xz
passt-f5391ae1b72680718e90b5ff6d83feec13f55366.tar.zst
passt-f5391ae1b72680718e90b5ff6d83feec13f55366.zip
vu_handle_tx: Pass actual remaining out_sg capacity to vu_queue_pop()
In vu_handle_tx(), pass the actual remaining iovec capacity (ARRAY_SIZE(out_sg) - out_sg_count) to vu_queue_pop() rather than a fixed VU_MAX_TX_BUFFER_NB. This enables dynamic allocation of iovec entries to each element rather than reserving a fixed number of slots per descriptor. Signed-off-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--vu_common.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/vu_common.c b/vu_common.c
index 4d809ac..834a54f 100644
--- a/vu_common.c
+++ b/vu_common.c
@@ -20,8 +20,6 @@
#include "migrate.h"
#include "epoll_ctl.h"
-#define VU_MAX_TX_BUFFER_NB 2
-
/**
* vu_packet_check_range() - Check if a given memory zone is contained in
* a mapped guest memory region
@@ -177,13 +175,13 @@ static void vu_handle_tx(struct vu_dev *vdev, int index,
count = 0;
out_sg_count = 0;
- while (count < VIRTQUEUE_MAX_SIZE &&
- out_sg_count + VU_MAX_TX_BUFFER_NB <= VIRTQUEUE_MAX_SIZE) {
- int ret;
+ while (count < ARRAY_SIZE(elem) && out_sg_count < ARRAY_SIZE(out_sg)) {
struct iov_tail data;
+ int ret;
ret = vu_queue_pop(vdev, vq, &elem[count], NULL, 0,
- &out_sg[out_sg_count], VU_MAX_TX_BUFFER_NB);
+ &out_sg[out_sg_count],
+ ARRAY_SIZE(out_sg) - out_sg_count);
if (ret < 0)
break;
out_sg_count += elem[count].out_num;