powerpc/pseries/msi: Let core code check for contiguous entries
authorThomas Gleixner <tglx@linutronix.de>
Fri, 10 Dec 2021 22:19:22 +0000 (23:19 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 16 Dec 2021 21:16:40 +0000 (22:16 +0100)
Set the domain info flag and remove the check.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/20211210221814.720998720@linutronix.de
arch/powerpc/platforms/pseries/msi.c

index 27cd1fb..fb2919f 100644 (file)
@@ -321,27 +321,6 @@ out:
        return request;
 }
 
-static int check_msix_entries(struct pci_dev *pdev)
-{
-       struct msi_desc *entry;
-       int expected;
-
-       /* There's no way for us to express to firmware that we want
-        * a discontiguous, or non-zero based, range of MSI-X entries.
-        * So we must reject such requests. */
-
-       expected = 0;
-       for_each_pci_msi_entry(entry, pdev) {
-               if (entry->msi_index != expected) {
-                       pr_debug("rtas_msi: bad MSI-X entries.\n");
-                       return -EINVAL;
-               }
-               expected++;
-       }
-
-       return 0;
-}
-
 static void rtas_hack_32bit_msi_gen2(struct pci_dev *pdev)
 {
        u32 addr_hi, addr_lo;
@@ -380,9 +359,6 @@ static int rtas_prepare_msi_irqs(struct pci_dev *pdev, int nvec_in, int type,
        if (quota && quota < nvec)
                return quota;
 
-       if (type == PCI_CAP_ID_MSIX && check_msix_entries(pdev))
-               return -EINVAL;
-
        /*
         * Firmware currently refuse any non power of two allocation
         * so we round up if the quota will allow it.
@@ -529,9 +505,16 @@ static struct irq_chip pseries_pci_msi_irq_chip = {
        .irq_write_msi_msg      = pseries_msi_write_msg,
 };
 
+
+/*
+ * Set MSI_FLAG_MSIX_CONTIGUOUS as there is no way to express to
+ * firmware to request a discontiguous or non-zero based range of
+ * MSI-X entries. Core code will reject such setup attempts.
+ */
 static struct msi_domain_info pseries_msi_domain_info = {
        .flags = (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
-                 MSI_FLAG_MULTI_PCI_MSI  | MSI_FLAG_PCI_MSIX),
+                 MSI_FLAG_MULTI_PCI_MSI  | MSI_FLAG_PCI_MSIX |
+                 MSI_FLAG_MSIX_CONTIGUOUS),
        .ops   = &pseries_pci_msi_domain_ops,
        .chip  = &pseries_pci_msi_irq_chip,
 };