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.br...@foss.st.com>
---
 drivers/misc/pci_endpoint_test.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c
index 1c156a3f845e..54f66ece25cd 100644
--- a/drivers/misc/pci_endpoint_test.c
+++ b/drivers/misc/pci_endpoint_test.c
@@ -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;
-- 
2.34.1


Reply via email to