]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mcb: mcb-pci: detect IO mapped devices before requesting resources
authorSanjuán García, Jorge <Jorge.SanjuanGarcia@duagon.com>
Thu, 23 May 2024 10:35:03 +0000 (10:35 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 4 Jun 2024 15:48:57 +0000 (17:48 +0200)
If the memory region is requested with devm_request_mem_region()
for an IO mapped device it will return an error and mcb-pci will
incorrectly report it with EBUSY code.

Make sure we identify if the reosure is IO mapped and fail early
with a correct ENOTSUPP code.

Reviewed-by: Jose Javier Rodriguez Barbarin <JoseJavier.Rodriguez@duagon.com>
Signed-off-by: Jorge Sanjuan Garcia <jorge.sanjuangarcia@duagon.com>
Link: https://lore.kernel.org/r/20240523103430.423340-1-jorge.sanjuangarcia@duagon.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/mcb/mcb-pci.c

index 53d9202ff9a7ce1b4a24e9aba50e2fb90ddb759a..3b634ea318c741f92edd9b7313f7934e75e1a197 100644 (file)
@@ -45,6 +45,14 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        }
        pci_set_master(pdev);
 
+       flags = pci_resource_flags(pdev, 0);
+       if (flags & IORESOURCE_IO) {
+               ret = -ENOTSUPP;
+               dev_err(&pdev->dev,
+                       "IO mapped PCI devices are not supported\n");
+               goto out_disable;
+       }
+
        priv->mapbase = pci_resource_start(pdev, 0);
        if (!priv->mapbase) {
                dev_err(&pdev->dev, "No PCI resource\n");
@@ -68,14 +76,6 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
                goto out_disable;
        }
 
-       flags = pci_resource_flags(pdev, 0);
-       if (flags & IORESOURCE_IO) {
-               ret = -ENOTSUPP;
-               dev_err(&pdev->dev,
-                       "IO mapped PCI devices are not supported\n");
-               goto out_disable;
-       }
-
        pci_set_drvdata(pdev, priv);
 
        priv->bus = mcb_alloc_bus(&pdev->dev);