]> www.infradead.org Git - users/hch/misc.git/commitdiff
misc: pci_endpoint_test: Skip IRQ tests if irq is out of range
authorChristian Bruel <christian.bruel@foss.st.com>
Mon, 4 Aug 2025 17:09:14 +0000 (19:09 +0200)
committerManivannan Sadhasivam <mani@kernel.org>
Wed, 27 Aug 2025 13:09:06 +0000 (18:39 +0530)
The pci_endpoint_test tests the 32-bit MSI range. However, the device might
not have all vectors configured. For example, if msi_interrupts is 8 in the
ep function space or if the MSI Multiple Message Capable value is
configured as 4 (maximum 16 vectors).

In this case, do not attempt to run the test to avoid timeouts and directly
return the error value.

Signed-off-by: Christian Bruel <christian.bruel@foss.st.com>
Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
Link: https://patch.msgid.link/20250804170916.3212221-2-christian.bruel@foss.st.com
drivers/misc/pci_endpoint_test.c

index f935175d8bf5505ea63320a0df48d6063c47f11d..506a2847e5d22a1a3df0df938081d69ada6fb923 100644 (file)
@@ -436,7 +436,11 @@ static int pci_endpoint_test_msi_irq(struct pci_endpoint_test *test,
 {
        struct pci_dev *pdev = test->pdev;
        u32 val;
-       int ret;
+       int irq;
+
+       irq = pci_irq_vector(pdev, msi_num - 1);
+       if (irq < 0)
+               return irq;
 
        pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE,
                                 msix ? PCITEST_IRQ_TYPE_MSIX :
@@ -450,11 +454,7 @@ static int pci_endpoint_test_msi_irq(struct pci_endpoint_test *test,
        if (!val)
                return -ETIMEDOUT;
 
-       ret = pci_irq_vector(pdev, msi_num - 1);
-       if (ret < 0)
-               return ret;
-
-       if (ret != test->last_irq)
+       if (irq != test->last_irq)
                return -EIO;
 
        return 0;