summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
authorLadi Prosek2016-12-16 14:07:08 +0100
committerMichael Brown2017-01-22 14:22:19 +0100
commitfba3b39900af52e695d59bc34f28bb8d22526ddb (patch)
tree6b2b6062085e52e545306937e48fcf6af5774cca /src/include
parent[virtio] Simplify virtqueue shutdown (diff)
downloadipxe-fba3b39900af52e695d59bc34f28bb8d22526ddb.tar.gz
ipxe-fba3b39900af52e695d59bc34f28bb8d22526ddb.tar.xz
ipxe-fba3b39900af52e695d59bc34f28bb8d22526ddb.zip
[virtio] Remove queue size limit in legacy virtio
Virtio 0.9 implementation was limited to the maximum virtqueue size of MAX_QUEUE_NUM and the virtio-net driver would fail to initialize on hosts exceeding this limit. This commit lifts the restriction by allocating the queue memory based on the actual queue size instead of using a fixed maximum. Note that virtio 1.0 still uses the MAX_QUEUE_NUM constant to cap the size (unfortunately this functionality is not available in virtio 0.9). 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/include')
-rw-r--r--src/include/ipxe/virtio-pci.h2
-rw-r--r--src/include/ipxe/virtio-ring.h6
2 files changed, 4 insertions, 4 deletions
diff --git a/src/include/ipxe/virtio-pci.h b/src/include/ipxe/virtio-pci.h
index f3c9b17c..f3074f14 100644
--- a/src/include/ipxe/virtio-pci.h
+++ b/src/include/ipxe/virtio-pci.h
@@ -196,9 +196,11 @@ static inline void vp_del_vq(unsigned int ioaddr, int queue_index)
struct vring_virtqueue;
+void vp_free_vq(struct vring_virtqueue *vq);
int vp_find_vq(unsigned int ioaddr, int queue_index,
struct vring_virtqueue *vq);
+
/* Virtio 1.0 I/O routines abstract away the three possible HW access
* mechanisms - memory, port I/O, and PCI cfg space access. Also built-in
* are endianness conversions - to LE on write and from LE on read. */
diff --git a/src/include/ipxe/virtio-ring.h b/src/include/ipxe/virtio-ring.h
index d2ded300..e608e624 100644
--- a/src/include/ipxe/virtio-ring.h
+++ b/src/include/ipxe/virtio-ring.h
@@ -71,14 +71,12 @@ struct vring {
+ PAGE_MASK) & ~PAGE_MASK) + \
(sizeof(struct vring_used) + sizeof(struct vring_used_elem) * num))
-typedef unsigned char virtio_queue_t[PAGE_MASK + vring_size(MAX_QUEUE_NUM)];
-
struct vring_virtqueue {
- virtio_queue_t queue;
+ unsigned char *queue;
struct vring vring;
u16 free_head;
u16 last_used_idx;
- void *vdata[MAX_QUEUE_NUM];
+ void **vdata;
/* PCI */
int queue_index;
struct virtio_pci_region notification;