]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
gpio: sim: lock device when calling device_is_bound()
authorBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Mon, 18 May 2026 09:53:17 +0000 (11:53 +0200)
committerBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Thu, 21 May 2026 12:36:06 +0000 (14:36 +0200)
The kerneldoc for device_is_bound() says it must be called with the
device lock taken. Add missing synchronization to this driver.

Fixes: 7fb3287946f9 ("gpio: sim: stop using dev-sync-probe")
Link: https://patch.msgid.link/20260518-gpio-dev-lock-v1-1-cc4736f3ff0b@oss.qualcomm.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
drivers/gpio/gpio-sim.c

index e19701c2ed673f8ec5a2475e632388197a78339c..0da2c5a45843ea22ef39273c2e39dc128664f0b2 100644 (file)
@@ -901,7 +901,7 @@ static int gpio_sim_device_activate(struct gpio_sim_device *dev)
        struct platform_device *pdev;
        struct fwnode_handle *swnode;
        struct gpio_sim_bank *bank;
-       int ret;
+       int ret = 0;
 
        lockdep_assert_held(&dev->lock);
 
@@ -945,9 +945,12 @@ static int gpio_sim_device_activate(struct gpio_sim_device *dev)
        }
 
        wait_for_device_probe();
-       if (!device_is_bound(&pdev->dev)) {
-               ret = -ENXIO;
-               goto err_unregister_pdev;
+
+       scoped_guard(device, &pdev->dev) {
+               if (!device_is_bound(&pdev->dev)) {
+                       ret = -ENXIO;
+                       goto err_unregister_pdev;
+               }
        }
 
        dev->pdev = pdev;