mirror of
https://github.com/ipxe/ipxe
synced 2025-12-19 11:00:27 +03:00
[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>
This commit is contained in:
committed by
Michael Brown
parent
b782a56be7
commit
fba3b39900
@@ -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. */
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user