[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [patch V2 17/23] PCI/MSI: Split out !IRQDOMAIN code



On Mon, Dec 06, 2021 at 11:27:51PM +0100, Thomas Gleixner wrote:
> Split out the non irqdomain code into its own file.
> 
> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Tested-by: Juergen Gross <jgross@xxxxxxxx>
> Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx>

Acked-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>

> ---
> V2: Add proper includes and fix variable name - Cedric
> ---
>  drivers/pci/msi/Makefile |    5 ++--
>  drivers/pci/msi/legacy.c |   52 
> +++++++++++++++++++++++++++++++++++++++++++++++
>  drivers/pci/msi/msi.c    |   46 -----------------------------------------
>  3 files changed, 55 insertions(+), 48 deletions(-)
> 
> --- a/drivers/pci/msi/Makefile
> +++ b/drivers/pci/msi/Makefile
> @@ -1,5 +1,6 @@
>  # SPDX-License-Identifier: GPL-2.0
>  #
>  # Makefile for the PCI/MSI
> -obj-$(CONFIG_PCI)            += pcidev_msi.o
> -obj-$(CONFIG_PCI_MSI)                += msi.o
> +obj-$(CONFIG_PCI)                    += pcidev_msi.o
> +obj-$(CONFIG_PCI_MSI)                        += msi.o
> +obj-$(CONFIG_PCI_MSI_ARCH_FALLBACKS) += legacy.o
> --- /dev/null
> +++ b/drivers/pci/msi/legacy.c
> @@ -0,0 +1,52 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * PCI Message Signaled Interrupt (MSI).
> + *
> + * Legacy architecture specific setup and teardown mechanism.
> + */
> +#include <linux/msi.h>
> +#include <linux/pci.h>
> +
> +/* Arch hooks */
> +int __weak arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc)
> +{
> +     return -EINVAL;
> +}
> +
> +void __weak arch_teardown_msi_irq(unsigned int irq)
> +{
> +}
> +
> +int __weak arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
> +{
> +     struct msi_desc *desc;
> +     int ret;
> +
> +     /*
> +      * If an architecture wants to support multiple MSI, it needs to
> +      * override arch_setup_msi_irqs()
> +      */
> +     if (type == PCI_CAP_ID_MSI && nvec > 1)
> +             return 1;
> +
> +     for_each_pci_msi_entry(desc, dev) {
> +             ret = arch_setup_msi_irq(dev, desc);
> +             if (ret)
> +                     return ret < 0 ? ret : -ENOSPC;
> +     }
> +
> +     return 0;
> +}
> +
> +void __weak arch_teardown_msi_irqs(struct pci_dev *dev)
> +{
> +     struct msi_desc *desc;
> +     int i;
> +
> +     for_each_pci_msi_entry(desc, dev) {
> +             if (desc->irq) {
> +                     for (i = 0; i < desc->nvec_used; i++)
> +                             arch_teardown_msi_irq(desc->irq + i);
> +             }
> +     }
> +}
> --- a/drivers/pci/msi/msi.c
> +++ b/drivers/pci/msi/msi.c
> @@ -50,52 +50,6 @@ static void pci_msi_teardown_msi_irqs(st
>  #define pci_msi_teardown_msi_irqs    arch_teardown_msi_irqs
>  #endif
>  
> -#ifdef CONFIG_PCI_MSI_ARCH_FALLBACKS
> -/* Arch hooks */
> -int __weak arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc)
> -{
> -     return -EINVAL;
> -}
> -
> -void __weak arch_teardown_msi_irq(unsigned int irq)
> -{
> -}
> -
> -int __weak arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
> -{
> -     struct msi_desc *entry;
> -     int ret;
> -
> -     /*
> -      * If an architecture wants to support multiple MSI, it needs to
> -      * override arch_setup_msi_irqs()
> -      */
> -     if (type == PCI_CAP_ID_MSI && nvec > 1)
> -             return 1;
> -
> -     for_each_pci_msi_entry(entry, dev) {
> -             ret = arch_setup_msi_irq(dev, entry);
> -             if (ret < 0)
> -                     return ret;
> -             if (ret > 0)
> -                     return -ENOSPC;
> -     }
> -
> -     return 0;
> -}
> -
> -void __weak arch_teardown_msi_irqs(struct pci_dev *dev)
> -{
> -     int i;
> -     struct msi_desc *entry;
> -
> -     for_each_pci_msi_entry(entry, dev)
> -             if (entry->irq)
> -                     for (i = 0; i < entry->nvec_used; i++)
> -                             arch_teardown_msi_irq(entry->irq + i);
> -}
> -#endif /* CONFIG_PCI_MSI_ARCH_FALLBACKS */
> -
>  /*
>   * PCI 2.3 does not specify mask bits for each MSI interrupt.  Attempting to
>   * mask all MSI interrupts by clearing the MSI enable bit does not work
> 



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.