From: Stephen Hemminger Date: Fri, 6 Jun 2014 23:50:33 +0000 (-0700) Subject: igb_uio: MSI-X cleanups X-Git-Tag: spdx-start~10514 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=fa4a13c9dd41068723d13f9629fcc584ba1164cd;p=dpdk.git igb_uio: MSI-X cleanups Since only one MSI-X entry is ever defined, there is no need to put it as an array in the driver private data structure. One msix_entry can just be put on the stack and initialized there. Also remove the unused backport defines related to MSI-X. I suspect this code was just inherited from some other project and never cleaned up. Signed-off-by: Stephen Hemminger Acked-by: Thomas Monjalon --- diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c index d6eff4b5a3..ba38d23d91 100644 --- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c +++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c @@ -37,19 +37,6 @@ #endif #include -/** - * MSI-X related macros, copy from linux/pci_regs.h in kernel 2.6.39, - * but none of them in kernel 2.6.35. - */ -#ifndef PCI_MSIX_ENTRY_SIZE -#define PCI_MSIX_ENTRY_SIZE 16 -#define PCI_MSIX_ENTRY_LOWER_ADDR 0 -#define PCI_MSIX_ENTRY_UPPER_ADDR 4 -#define PCI_MSIX_ENTRY_DATA 8 -#define PCI_MSIX_ENTRY_VECTOR_CTRL 12 -#define PCI_MSIX_ENTRY_CTRL_MASKBIT 1 -#endif - #ifdef RTE_PCI_CONFIG #define PCI_SYS_FILE_BUF_SIZE 10 #define PCI_DEV_CAP_REG 0xA4 @@ -59,8 +46,6 @@ #define PCI_DEV_CTRL_EXT_TAG_MASK (1 << PCI_DEV_CTRL_EXT_TAG_SHIFT) #endif -#define IGBUIO_NUM_MSI_VECTORS 1 - /** * A structure describing the private information for a uio device. */ @@ -69,8 +54,6 @@ struct rte_uio_pci_dev { struct pci_dev *pdev; spinlock_t lock; /* spinlock for accessing PCI config space or msix data in multi tasks/isr */ enum rte_intr_mode mode; - struct msix_entry \ - msix_entries[IGBUIO_NUM_MSI_VECTORS]; /* pointer to the msix vectors to be allocated later */ }; static char *intr_mode = NULL; @@ -555,6 +538,7 @@ static int igbuio_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) { struct rte_uio_pci_dev *udev; + struct msix_entry msix_entry; int err; udev = kzalloc(sizeof(struct rte_uio_pci_dev), GFP_KERNEL); @@ -619,12 +603,10 @@ igbuio_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) /* check if it need to try msix first */ if (igbuio_intr_mode_preferred == RTE_INTR_MODE_MSIX) { - int vector; - - for (vector = 0; vector < IGBUIO_NUM_MSI_VECTORS; vector ++) - udev->msix_entries[vector].entry = vector; - - if (pci_enable_msix(udev->pdev, udev->msix_entries, IGBUIO_NUM_MSI_VECTORS) == 0) { + /* Only 1 msi-x vector needed */ + msix_entry.entry = 0; + if (pci_enable_msix(dev, &msix_entry, 1) == 0) { + dev_dbg(&dev->dev, "using MSI-X"); udev->mode = RTE_INTR_MODE_MSIX; } else { @@ -635,7 +617,7 @@ igbuio_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) switch (udev->mode) { case RTE_INTR_MODE_MSIX: udev->info.irq_flags = 0; - udev->info.irq = udev->msix_entries[0].vector; + udev->info.irq = msix_entry.vector; break; case RTE_INTR_MODE_MSI: break; @@ -682,6 +664,7 @@ static void igbuio_pci_remove(struct pci_dev *dev) { struct uio_info *info = pci_get_drvdata(dev); + struct rte_uio_pci_dev *udev = igbuio_get_uio_pci_dev(info); if (info->priv == NULL) { pr_notice("Not igbuio device\n"); @@ -691,8 +674,7 @@ igbuio_pci_remove(struct pci_dev *dev) sysfs_remove_group(&dev->dev.kobj, &dev_attr_grp); uio_unregister_device(info); igbuio_pci_release_iomem(info); - if (((struct rte_uio_pci_dev *)info->priv)->mode == - RTE_INTR_MODE_MSIX) + if (udev->mode == RTE_INTR_MODE_MSIX) pci_disable_msix(dev); pci_release_regions(dev); pci_disable_device(dev);