Re: PCI: Add stub pci_irq_vector and others

From: Bjorn Helgaas
Date: Fri Sep 20 2019 - 15:42:22 EST


On Wed, Sep 04, 2019 at 10:26:00PM +1000, Herbert Xu wrote:
> On Wed, Sep 04, 2019 at 05:10:34AM -0700, Ard Biesheuvel wrote:
> >
> > This is the reason we have so many empty static inline functions in
> > header files - it ensures that the symbols are declared even if the
> > only invocations are from dead code.
>
> Does this patch work?
>
> ---8<---
> This patch adds stub functions pci_alloc_irq_vectors_affinity and
> pci_irq_vector when CONFIG_PCI is off so that drivers can use them
> without resorting to ifdefs.
>
> It also moves the PCI_IRQ_* macros outside of the ifdefs so that
> they are always available.
>
> Fixes: 625f269a5a7a ("crypto: inside-secure - add support for...")
> Reported-by: kbuild test robot <lkp@xxxxxxxxx>
> Reported-by: YueHaibing <yuehaibing@xxxxxxxxxx>
> Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>

Since you've already sent your crypto pull request for v5.4, would you
like me to include this in mine?

If you'd rather send it yourself, I'd prefer:

PCI: Add pci_irq_vector() and other stubs when !CONFIG_PCI

Add stub functions pci_alloc_irq_vectors_affinity() and
pci_irq_vector() when CONFIG_PCI is off so drivers can use them
without resorting to ifdefs.

Also move the PCI_IRQ_* macros outside of the ifdefs so they are
always available.

Acked-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>

> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 9e700d9f9f28..74415ee62211 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -925,6 +925,11 @@ enum {
> PCI_SCAN_ALL_PCIE_DEVS = 0x00000040, /* Scan all, not just dev 0 */
> };
>
> +#define PCI_IRQ_LEGACY (1 << 0) /* Allow legacy interrupts */
> +#define PCI_IRQ_MSI (1 << 1) /* Allow MSI interrupts */
> +#define PCI_IRQ_MSIX (1 << 2) /* Allow MSI-X interrupts */
> +#define PCI_IRQ_AFFINITY (1 << 3) /* Auto-assign affinity */
> +
> /* These external functions are only available when PCI support is enabled */
> #ifdef CONFIG_PCI
>
> @@ -1408,11 +1413,6 @@ resource_size_t pcibios_window_alignment(struct pci_bus *bus,
> int pci_set_vga_state(struct pci_dev *pdev, bool decode,
> unsigned int command_bits, u32 flags);
>
> -#define PCI_IRQ_LEGACY (1 << 0) /* Allow legacy interrupts */
> -#define PCI_IRQ_MSI (1 << 1) /* Allow MSI interrupts */
> -#define PCI_IRQ_MSIX (1 << 2) /* Allow MSI-X interrupts */
> -#define PCI_IRQ_AFFINITY (1 << 3) /* Auto-assign affinity */
> -
> /*
> * Virtual interrupts allow for more interrupts to be allocated
> * than the device has interrupts for. These are not programmed
> @@ -1517,14 +1517,6 @@ static inline int pci_irq_get_node(struct pci_dev *pdev, int vec)
> }
> #endif
>
> -static inline int
> -pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
> - unsigned int max_vecs, unsigned int flags)
> -{
> - return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs, flags,
> - NULL);
> -}
> -
> /**
> * pci_irqd_intx_xlate() - Translate PCI INTx value to an IRQ domain hwirq
> * @d: the INTx IRQ domain
> @@ -1780,8 +1772,29 @@ static inline const struct pci_device_id *pci_match_id(const struct pci_device_i
> struct pci_dev *dev)
> { return NULL; }
> static inline bool pci_ats_disabled(void) { return true; }
> +
> +static inline int pci_irq_vector(struct pci_dev *dev, unsigned int nr)
> +{
> + return -EINVAL;
> +}
> +
> +static inline int
> +pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
> + unsigned int max_vecs, unsigned int flags,
> + struct irq_affinity *aff_desc)
> +{
> + return -ENOSPC;
> +}
> #endif /* CONFIG_PCI */
>
> +static inline int
> +pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
> + unsigned int max_vecs, unsigned int flags)
> +{
> + return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs, flags,
> + NULL);
> +}
> +
> #ifdef CONFIG_PCI_ATS
> /* Address Translation Service */
> void pci_ats_init(struct pci_dev *dev);
> --
> Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
> Home Page: http://gondor.apana.org.au/~herbert/
> PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt