From 593ac218e030fd7d69960e8f7fd21fb983b66be9 Mon Sep 17 00:00:00 2001 From: jhb Date: Tue, 3 May 2016 00:35:11 +0000 Subject: [PATCH] Fix an off by one error when remapping MSI-X vectors. pci_remap_msix() can be used to alter the mapping of allocated MSI-X vectors to the MSI-X table. The code had an off by one error when adding the IRQ resources after performing a remap. This was fatal for any vectors in the table that used the "last" valid IRQ as those vectors were assigned a garbage IRQ value. MFC after: 3 days --- sys/dev/pci/pci.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c index fd23f3b0a6fa..a7749b2858bd 100644 --- a/sys/dev/pci/pci.c +++ b/sys/dev/pci/pci.c @@ -1855,7 +1855,7 @@ pci_remap_msix_method(device_t dev, device_t child, int count, for (i = 0; i < count; i++) { if (vectors[i] == 0) continue; - irq = msix->msix_vectors[vectors[i]].mv_irq; + irq = msix->msix_vectors[vectors[i] - 1].mv_irq; resource_list_add(&dinfo->resources, SYS_RES_IRQ, i + 1, irq, irq, 1); } @@ -1869,7 +1869,7 @@ pci_remap_msix_method(device_t dev, device_t child, int count, printf("---"); else printf("%d", - msix->msix_vectors[vectors[i]].mv_irq); + msix->msix_vectors[vectors[i] - 1].mv_irq); } printf("\n"); }