pinctrl: core: Hold pinctrldev_list_mutex mutex while traversing pinctrldev_list
authorAxel Lin <axel.lin@ingics.com>
Sun, 18 Aug 2013 12:34:22 +0000 (20:34 +0800)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 23 Aug 2013 06:56:27 +0000 (08:56 +0200)
This one is missed in commit 44d5f7bb "pinctrl: sink pinctrldev_list_mutex".

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/core.c

index a97b717e3ad31eedb41a73196122b8af6ab3eee7..ff06582103c01021c78b29c1e782ed05c36a4088 100644 (file)
@@ -392,6 +392,8 @@ static int pinctrl_get_device_gpio_range(unsigned gpio,
 {
        struct pinctrl_dev *pctldev = NULL;
 
+       mutex_lock(&pinctrldev_list_mutex);
+
        /* Loop over the pin controllers */
        list_for_each_entry(pctldev, &pinctrldev_list, node) {
                struct pinctrl_gpio_range *range;
@@ -400,10 +402,13 @@ static int pinctrl_get_device_gpio_range(unsigned gpio,
                if (range != NULL) {
                        *outdev = pctldev;
                        *outrange = range;
+                       mutex_unlock(&pinctrldev_list_mutex);
                        return 0;
                }
        }
 
+       mutex_unlock(&pinctrldev_list_mutex);
+
        return -EPROBE_DEFER;
 }