mirror of
https://github.com/clearlinux/kvmtool.git
synced 2026-08-26 16:28:12 +00:00
kvm tools: Fix MSI-X table size set up
We at most have VIRTIO_PCI_MAX_VQ entries for virt queue,
VIRTIO_PCI_MAX_CONFIG entries for config.
To quote the PCI spec:
System software reads this field to determine the
MSI-X Table Size N, which is encoded as N-1.
For example, a returned value of "00000000011"
indicates a table size of 4.
So, we should set table size to
VIRTIO_PCI_MAX_VQ + VIRTIO_PCI_MAX_CONFIG - 1
not
VIRTIO_PCI_MAX_VQ + VIRTIO_PCI_MAX_CONFIG
Acked-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
@@ -5,7 +5,8 @@
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define VIRTIO_PCI_MAX_VQ 3
|
||||
#define VIRTIO_PCI_MAX_VQ 3
|
||||
#define VIRTIO_PCI_MAX_CONFIG 1
|
||||
|
||||
struct kvm;
|
||||
|
||||
@@ -44,7 +45,7 @@ struct virtio_pci {
|
||||
u32 msix_io_block;
|
||||
u32 msix_pba_block;
|
||||
u64 msix_pba;
|
||||
struct msix_table msix_table[VIRTIO_PCI_MAX_VQ + 1];
|
||||
struct msix_table msix_table[VIRTIO_PCI_MAX_VQ + VIRTIO_PCI_MAX_CONFIG];
|
||||
|
||||
/* virtio queue */
|
||||
u16 queue_selector;
|
||||
|
||||
+12
-1
@@ -287,7 +287,18 @@ int virtio_pci__init(struct kvm *kvm, struct virtio_pci *vpci, void *dev,
|
||||
|
||||
vpci->pci_hdr.msix.cap = PCI_CAP_ID_MSIX;
|
||||
vpci->pci_hdr.msix.next = 0;
|
||||
vpci->pci_hdr.msix.ctrl = (VIRTIO_PCI_MAX_VQ + 1);
|
||||
/*
|
||||
* We at most have VIRTIO_PCI_MAX_VQ entries for virt queue,
|
||||
* VIRTIO_PCI_MAX_CONFIG entries for config.
|
||||
*
|
||||
* To quote the PCI spec:
|
||||
*
|
||||
* System software reads this field to determine the
|
||||
* MSI-X Table Size N, which is encoded as N-1.
|
||||
* For example, a returned value of "00000000011"
|
||||
* indicates a table size of 4.
|
||||
*/
|
||||
vpci->pci_hdr.msix.ctrl = (VIRTIO_PCI_MAX_VQ + VIRTIO_PCI_MAX_CONFIG - 1);
|
||||
|
||||
/*
|
||||
* Both table and PBA could be mapped on the same BAR, but for now
|
||||
|
||||
Reference in New Issue
Block a user