Tejun, Gerry, On 17.06.15 17:02:20, Jiang Liu wrote: > On 2015/6/17 16:48, Robert Richter wrote: > > static struct msi_desc *msix_get_desc(struct pci_dev *dev, u16 entry) > > { > > +#ifdef CONFIG_PCI_MSI > > struct msi_desc *desc; > > > > list_for_each_entry(desc, &dev->msi_list, list) { > > if (desc->msi_attrib.entry_nr == entry) > > return desc; > > } > > - > > +#endif > Hi Robert, > While at it, could you please help to use for_each_pci_msi_entry() > from include/linux/msi.h instead of hard-coding? We are trying to refine > the msi_list related code, > so we don't need to touch this code again later. While looking into this I realized the code can be much more simplified so that the desc lookup function can be removed at all. See below. Sorry for the patch noise. -Robert >From e43b79f0afd794d3e37ec0922c75e44b1c3f2e22 Mon Sep 17 00:00:00 2001 From: Robert Richter <rrichter@xxxxxxxxxx> Date: Wed, 17 Jun 2015 10:33:22 +0200 Subject: [PATCH v2] ahci, msix: Fix build error for !PCI_MSI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It turned out the irq vector of the msix can be obtained from struct msix_entry. This makes the lookup function for msi_desc obsolete. This fixes a build error if PCI_MSI is unset: drivers/ata/ahci.c: In function ‘msix_get_desc’: drivers/ata/ahci.c:1210:2: error: ‘struct pci_dev’ has no member named ‘msi_list’ Catched by Fengguang's build bot. Reported-by: kbuild test robot <fengguang.wu@xxxxxxxxx> Signed-off-by: Robert Richter <rrichter@xxxxxxxxxx> --- drivers/ata/ahci.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index bdedaa4f9d7b..c478a40e32c6 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c @@ -1203,18 +1203,6 @@ static inline void ahci_gtf_filter_workaround(struct ata_host *host) {} #endif -static struct msi_desc *msix_get_desc(struct pci_dev *dev, u16 entry) -{ - struct msi_desc *desc; - - list_for_each_entry(desc, &dev->msi_list, list) { - if (desc->msi_attrib.entry_nr == entry) - return desc; - } - - return NULL; -} - /* * ahci_init_msix() only implements single MSI-X support, not multiple * MSI-X per-port interrupts. This is needed for host controllers that only @@ -1223,7 +1211,6 @@ static struct msi_desc *msix_get_desc(struct pci_dev *dev, u16 entry) static int ahci_init_msix(struct pci_dev *pdev, unsigned int n_ports, struct ahci_host_priv *hpriv) { - struct msi_desc *desc; int rc, nvec; struct msix_entry entry = {}; @@ -1248,13 +1235,7 @@ static int ahci_init_msix(struct pci_dev *pdev, unsigned int n_ports, if (rc < 0) goto fail; - desc = msix_get_desc(pdev, 0); /* first entry */ - if (!desc) { - rc = -EINVAL; - goto fail; - } - - hpriv->irq = desc->irq; + hpriv->irq = entry.vector; return 1; fail: -- 2.1.1 -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html