If we know the offset of MSI-X capability, then use it to go fast. Signed-off-by: Hidetoshi Seto <seto.hidetoshi@xxxxxxxxxxxxxx> --- drivers/pci/msi.c | 19 +++++++++++++------ 1 files changed, 13 insertions(+), 6 deletions(-) diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 7eea1dd..4e5999e 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c @@ -88,12 +88,10 @@ static void msi_set_enable(struct pci_dev *dev, int enable) __msi_set_enable(dev, pci_find_capability(dev, PCI_CAP_ID_MSI), enable); } -static void msix_set_enable(struct pci_dev *dev, int enable) +static void __msix_set_enable(struct pci_dev *dev, int pos, int enable) { - int pos; u16 control; - pos = pci_find_capability(dev, PCI_CAP_ID_MSIX); if (pos) { pci_read_config_word(dev, pos + PCI_MSIX_FLAGS, &control); control &= ~PCI_MSIX_FLAGS_ENABLE; @@ -103,6 +101,12 @@ static void msix_set_enable(struct pci_dev *dev, int enable) } } +static void msix_set_enable(struct pci_dev *dev, int enable) +{ + __msix_set_enable(dev, pci_find_capability(dev, PCI_CAP_ID_MSIX), + enable); +} + static void msix_flush_writes(unsigned int irq) { struct msi_desc *entry; @@ -454,9 +458,11 @@ static int msix_capability_init(struct pci_dev *dev, u8 bir; void __iomem *base; - msix_set_enable(dev, 0);/* Ensure msix is disabled as I set it up */ - pos = pci_find_capability(dev, PCI_CAP_ID_MSIX); + + /* Ensure msix is disabled as I set it up */ + __msix_set_enable(dev, pos, 0); + /* Request & Map MSI-X table region */ pci_read_config_word(dev, msi_control_reg(pos), &control); nr_entries = multi_msix_capable(control); @@ -514,9 +520,10 @@ static int msix_capability_init(struct pci_dev *dev, set_irq_msi(entry->irq, entry); i++; } + /* Set MSI-X enabled bits */ pci_intx_for_msi(dev, 0); - msix_set_enable(dev, 1); + __msix_set_enable(dev, pos, 1); dev->msix_enabled = 1; return 0; -- -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html