ahci: compile out msi/msix infrastructure
PATCH v2 1/1 ahci: compile out msi/msix infrastructure
Quoting Arnd:
The AHCI driver is used for some on-chip devices that do not use PCI for probing, and it can be built even when CONFIG_PCI is disabled, but that now results in a build failure:
ata/libahci.c: In function 'ahci_host_activate_multi_irqs':
ata/libahci.c:2475:4: error: invalid use of undefined type 'struct msix_entry' ata/libahci.c:2475:21: error: dereferencing pointer to incomplete type 'struct msix_entry'
Add ifdef CONFIG_PCI_MSI infrastructure to compile out the mutli-msi and multi-msix code.
---
Changes in v2:
Arnd noticed that although I tested the CONFIG_PCI_MSI=n case on ARM, I neglected to re-test the CONFIG_PCI_MSI=y case. All fixed up now.
drivers/ata/ahci.h | 26 ++++++++++++++++++++++++-- drivers/ata/libahci.c | 7 +------ 2 files changed, 25 insertions(+), 8 deletions(-)
drivers/ata/ahci.h +24 -2
@@ -35,6 +35,7 @@#ifndef _AHCI_H#define _AHCI_H +#include <linux/pci.h> #include <linux/clk.h> #include <linux/libata.h> #include <linux/phy/phy.h>
@@ -237,12 +238,18 @@ enum {AHCI_HFLAG_DELAY_ENGINE = (1 <<15 ),/* do not start engine on port start (wait until error-handling stage) */ -AHCI_HFLAG_MULTI_MSI = (1 <<16 ),/* multiple PCI MSIs */ AHCI_HFLAG_NO_DEVSLP = (1 <<17 ),/* no device sleep */ AHCI_HFLAG_NO_FBS = (1 <<18 ),/* no FBS */ AHCI_HFLAG_EDGE_IRQ = (1 <<19 ),/* HOST_IRQ_STAT behaves as Edge Triggered */ - AHCI_HFLAG_MULTI_MSIX = (1 << 20), /* per-port MSI-X */ +#ifdef CONFIG_PCI_MSI +AHCI_HFLAG_MULTI_MSI = (1 <<20 ),/* multiple PCI MSIs */ +AHCI_HFLAG_MULTI_MSIX = (1 <<21 ),/* per-port MSI-X */ +#else +/* compile out MSI infrastructure */ +AHCI_HFLAG_MULTI_MSI =0 , + AHCI_HFLAG_MULTI_MSIX = 0, +#endif/* ap->flags bits */
@@ -355,6 +362,21 @@ struct ahci_host_priv {void (*start_engine)(struct ata_port *ap); }; +#ifdef CONFIG_PCI_MSI +static inline int ahci_irq_vector (struct ahci_host_priv *hpriv,int port) +{ +if (hpriv->flags &AHCI_HFLAG_MULTI_MSIX ) +return hpriv->msix[port].vector; +else +return hpriv->irq + port; +} +#else +static inline int ahci_irq_vector (struct ahci_host_priv *hpriv,int port) +{ +return hpriv->irq; +} +#endif +extern int ahci_ignore_sss;extern struct device_attribute *ahci_shost_attrs[];
drivers/ata/libahci.c +1 -6
@@ -2469,12 +2469,7 @@ static int ahci_host_activate_multi_irqs(struct ata_host *host,*/ for (i =0 ; i < host->n_ports; i++) {struct ahci_port_priv *pp = host->ports[i]->private_data; -int irq; - -if (hpriv->flags &AHCI_HFLAG_MULTI_MSIX ) - irq = hpriv->msix[i].vector; -else - irq = hpriv->irq + i; +int irq =ahci_irq_vector (hpriv, i);/* Do not receive interrupts sent by dummy ports */ if (!pp) {
PATCH v2 1/1 ahci: compile out msi/msix infrastructure
Quoted 7 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Dan" == Dan Williams <[email protected]> writes:
Quoting Arnd:
The AHCI driver is used for some on-chip devices that do not use PCI for probing, and it can be built even whenCONFIG_PCIis disabled, but that now results in a build failure:
Quoted 5 lines
ata/libahci.c: In function 'ahci_host_activate_multi_irqs':
ata/libahci.c:2475:4: error: invalid use of undefined type 'structmsix_entry'ata/libahci.c:2475:21: error: dereferencing pointer to incomplete type 'structmsix_entry'Add ifdef
CONFIG_PCI_MSIinfrastructure to compile out the mutli-msi and
s/mutli/multi/
Signature · 1 line
Bye, Peter Korsgaard
Tejun Heo
AppliedPATCH v2 1/1 ahci: compile out msi/msix infrastructure
In reply to Dan WilliamsQuoted 12 lines · Dan Williams
Quoting Arnd:
The AHCI driver is used for some on-chip devices that do not use PCI for probing, and it can be built even whenCONFIG_PCIis disabled, but that now results in a build failure:
ata/libahci.c: In function 'ahci_host_activate_multi_irqs':
ata/libahci.c:2475:4: error: invalid use of undefined type 'structmsix_entry'ata/libahci.c:2475:21: error: dereferencing pointer to incomplete type 'structmsix_entry'Add ifdef
CONFIG_PCI_MSIinfrastructure to compile out the mutli-msi and multi-msix code.
Quoted 6 lines
Reported-by Arnd Bergmann <[email protected]>Tested--by Arnd Bergmann <[email protected]>[arnd: fix up pci enabled case]Reported-by Paul Gortmaker <[email protected]>Fixes d684a90d38e2 ("ahci: per-port msix support")Signed-off-by Dan Williams <[email protected]>
Applied to libata/for-4.5 w/ the typo fixed.
Thanks.
Signature · 1 line
tejun