On Thu, Mar 12, 2026 at 09:08:33AM +0100, Laurent Vivier wrote:
On 3/12/26 05:39, David Gibson wrote:
On Mon, Mar 09, 2026 at 10:47:44AM +0100, Laurent Vivier wrote:
iPXE places the vnet header in one virtqueue descriptor and the payload in another. When passt maps these descriptors, it needs two iovecs per virtqueue element to handle this layout.
Without this, passt crashes with:
ASSERTION FAILED in virtqueue_map_desc (virtio.c:403): num_sg < max_num_sg
Signed-off-by: Laurent Vivier
--- udp_vu.c | 8 ++++---- vu_common.c | 15 +++++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/udp_vu.c b/udp_vu.c index cb5274aa1d81..47659b0402fd 100644 --- a/udp_vu.c +++ b/udp_vu.c @@ -34,7 +34,7 @@ #include "vu_common.h" static struct iovec iov_vu [VIRTQUEUE_MAX_SIZE]; -static struct vu_virtq_element elem [VIRTQUEUE_MAX_SIZE]; +static struct vu_virtq_element elem [VIRTQUEUE_MAX_SIZE / IOV_PER_ELEM];
The two level structure of the queues (array of elems, each pointing to an array of iovs) confuses me a bit. I would have thought that VIRTQUEUE_MAX_SIZE represented the maximum number of elements, even if those elements had multiple iovs. Can you enlighten me?
In all the code until now I supposed the number of iovec is equal to the number of element because we had only one iovec per element.
At virtio level, VIRTQUEUE_MAX_SIZE is the number of vring_desc in a virtqueue, and a vring_desc is translated to an iovec in virtqueue_map_desc() that are collected to an element in vu_queue_map_desc(). So in passt, the maximum number of collected iovec will be VIRTQUEUE_MAX_SIZE and the maximum of element is VIRTQUEUE_MAX_SIZE if we have only one iovec per element.
Ok... sorry, I'm still unclear. Is the "element" a concept that's part of the "hardware" interface? Or just part of the structure on the software side?
I'm reworking all of this to be able to have several iovec per element on demand (in vu_queue_map_desc()). This patch and previous one will be dropped.
Ok. -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson