diff options
| author | Laurent Vivier <lvivier@redhat.com> | 2026-03-18 10:19:40 +0100 |
|---|---|---|
| committer | Stefano Brivio <sbrivio@redhat.com> | 2026-03-20 20:05:26 +0100 |
| commit | f5391ae1b72680718e90b5ff6d83feec13f55366 (patch) | |
| tree | 101adf1a0a2534e10c2a2b390589736df45374f6 | |
| parent | b9d076d8af993359ec7cd2eb97572c1fe0675089 (diff) | |
| download | passt-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.c | 10 |
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; |
