vfio-pci: Add debug config options to disable MSI/X KVM support

It's sometimes useful to be able to verify interrupts are passing
through correctly.

Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
Alex Williamson 2013-12-06 11:16:29 -07:00
parent 96eeeba0db
commit b3ebc10c37
1 changed files with 20 additions and 4 deletions

View File

@ -52,6 +52,8 @@
/* Extra debugging, trap acceleration paths for more logging */ /* Extra debugging, trap acceleration paths for more logging */
#define VFIO_ALLOW_MMAP 1 #define VFIO_ALLOW_MMAP 1
#define VFIO_ALLOW_KVM_INTX 1 #define VFIO_ALLOW_KVM_INTX 1
#define VFIO_ALLOW_KVM_MSI 1
#define VFIO_ALLOW_KVM_MSIX 1
struct VFIODevice; struct VFIODevice;
@ -590,9 +592,21 @@ static void vfio_msi_interrupt(void *opaque)
return; return;
} }
DPRINTF("%s(%04x:%02x:%02x.%x) vector %d\n", __func__, #ifdef VFIO_DEBUG
MSIMessage msg;
if (vdev->interrupt == VFIO_INT_MSIX) {
msg = msi_get_message(&vdev->pdev, nr);
} else if (vdev->interrupt == VFIO_INT_MSI) {
msg = msix_get_message(&vdev->pdev, nr);
} else {
abort();
}
DPRINTF("%s(%04x:%02x:%02x.%x) vector %d 0x%"PRIx64"/0x%x\n", __func__,
vdev->host.domain, vdev->host.bus, vdev->host.slot, vdev->host.domain, vdev->host.bus, vdev->host.slot,
vdev->host.function, nr); vdev->host.function, nr, msg.address, msg.data);
#endif
if (vdev->interrupt == VFIO_INT_MSIX) { if (vdev->interrupt == VFIO_INT_MSIX) {
msix_notify(&vdev->pdev, nr); msix_notify(&vdev->pdev, nr);
@ -660,7 +674,8 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr,
* Attempt to enable route through KVM irqchip, * Attempt to enable route through KVM irqchip,
* default to userspace handling if unavailable. * default to userspace handling if unavailable.
*/ */
vector->virq = msg ? kvm_irqchip_add_msi_route(kvm_state, *msg) : -1; vector->virq = msg && VFIO_ALLOW_KVM_MSIX ?
kvm_irqchip_add_msi_route(kvm_state, *msg) : -1;
if (vector->virq < 0 || if (vector->virq < 0 ||
kvm_irqchip_add_irqfd_notifier(kvm_state, &vector->interrupt, kvm_irqchip_add_irqfd_notifier(kvm_state, &vector->interrupt,
NULL, vector->virq) < 0) { NULL, vector->virq) < 0) {
@ -827,7 +842,8 @@ retry:
* Attempt to enable route through KVM irqchip, * Attempt to enable route through KVM irqchip,
* default to userspace handling if unavailable. * default to userspace handling if unavailable.
*/ */
vector->virq = kvm_irqchip_add_msi_route(kvm_state, vector->msg); vector->virq = VFIO_ALLOW_KVM_MSI ?
kvm_irqchip_add_msi_route(kvm_state, vector->msg) : -1;
if (vector->virq < 0 || if (vector->virq < 0 ||
kvm_irqchip_add_irqfd_notifier(kvm_state, &vector->interrupt, kvm_irqchip_add_irqfd_notifier(kvm_state, &vector->interrupt,
NULL, vector->virq) < 0) { NULL, vector->virq) < 0) {