ARM: sa1111: ensure we only touch RAB bus type devices when removing
authorRussell King <rmk+kernel@armlinux.org.uk>
Sat, 3 Sep 2016 08:14:58 +0000 (09:14 +0100)
committerRussell King <rmk+kernel@armlinux.org.uk>
Tue, 20 Sep 2016 13:21:07 +0000 (14:21 +0100)
When removing a SA1111 device, we try to remove all child devices.
However, we must only remove our own RAB bus typed devices from the
tree, there may be other devices present which should not be touched.

This is necessary before we introduce gpiochip to SA1111 to avoid
incorrectly trying to remove the gpiochip device, leading to an oops
in __release_resource().

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
arch/arm/common/sa1111.c

index 2e076c492005b57b5ce978fc87b03e1c2292b41b..303c62861d842673500bce4a8a1afa3c3a4df85b 100644 (file)
@@ -815,6 +815,8 @@ static int __sa1111_probe(struct device *me, struct resource *mem, int irq)
 static int sa1111_remove_one(struct device *dev, void *data)
 {
        struct sa1111_dev *sadev = SA1111_DEV(dev);
+       if (dev->bus != &sa1111_bus_type)
+               return 0;
        device_del(&sadev->dev);
        release_resource(&sadev->res);
        put_device(&sadev->dev);