aboutsummaryrefslogtreecommitdiffstats
path: root/src/drivers/bus
diff options
context:
space:
mode:
authorLadi Prosek <lprosek@redhat.com>2016-12-16 10:54:32 +0100
committerMichael Brown <mcb30@ipxe.org>2017-01-22 13:18:28 +0000
commite45451c6994f6e93729ee3860e45fa965483356f (patch)
tree42a29a9d741bedf9e99aec7e84723c6dc12dcb55 /src/drivers/bus
parentdfbbc16ae392e8f4ab62e15a99cdfb32a06af557 (diff)
downloadipxe-e45451c6994f6e93729ee3860e45fa965483356f.tar.gz
[virtio] Cap queue size to MAX_QUEUE_NUM
vpm_find_vqs incorrectly accepted the host provided queue size with no regard to iPXE's internal limitations. Virtio 1.0 makes it possible for the driver to override the queue size to reduce memory requirements and iPXE is a great use case for this feature. Also removing the extra vq->vring.num assignment which is already handled in vring_init. Signed-off-by: Ladi Prosek <lprosek@redhat.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/bus')
-rw-r--r--src/drivers/bus/virtio-pci.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/drivers/bus/virtio-pci.c b/src/drivers/bus/virtio-pci.c
index 3311595fb..1fcf9bae0 100644
--- a/src/drivers/bus/virtio-pci.c
+++ b/src/drivers/bus/virtio-pci.c
@@ -358,12 +358,18 @@ int vpm_find_vqs(struct virtio_pci_modern_device *vdev,
return -EINVAL;
}
+ if (size > MAX_QUEUE_NUM) {
+ /* iPXE networking tends to be not perf critical so there's no
+ * need to accept large queue sizes.
+ */
+ size = MAX_QUEUE_NUM;
+ }
+
vq = &vqs[i];
vq->queue_index = i;
/* get offset of notification word for this vq */
off = vpm_ioread16(vdev, &vdev->common, COMMON_OFFSET(queue_notify_off));
- vq->vring.num = size;
vring_init(&vq->vring, size, (unsigned char *)vq->queue);