dm: pci: Fix device PCI iteration
authorMichal Suchanek <msuchanek@suse.de>
Wed, 12 Oct 2022 19:57:52 +0000 (21:57 +0200)
committerSimon Glass <sjg@chromium.org>
Tue, 18 Oct 2022 03:17:12 +0000 (21:17 -0600)
When there is no PCI bus uclass_first_device will return no bus and no
error which will result in pci_find_first_device calling
skip_to_next_device with no bus, and the bus is only checked at the end
of the while cycle, not the beginning.

Fixes: 76c3fbcd3d ("dm: pci: Add a way to iterate through all PCI devices")
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/pci/pci-uclass.c

index 058b2f6..5cff81a 100644 (file)
@@ -1217,7 +1217,7 @@ static int skip_to_next_device(struct udevice *bus, struct udevice **devp)
         * Scan through all the PCI controllers. On x86 there will only be one
         * but that is not necessarily true on other hardware.
         */
-       do {
+       while (bus) {
                device_find_first_child(bus, &dev);
                if (dev) {
                        *devp = dev;
@@ -1226,7 +1226,7 @@ static int skip_to_next_device(struct udevice *bus, struct udevice **devp)
                ret = uclass_next_device(&bus);
                if (ret)
                        return ret;
-       } while (bus);
+       }
 
        return 0;
 }