pinctrl: core: Hold pctldev->mutex mutex lock while traversing gpio_ranges list
authorAxel Lin <axel.lin@ingics.com>
Sun, 18 Aug 2013 12:40:29 +0000 (20:40 +0800)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 23 Aug 2013 06:56:28 +0000 (08:56 +0200)
Hold pctldev->mutex mutex_lock when traverse the list.

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

index ff06582103c01021c78b29c1e782ed05c36a4088..faeb8726aee0a2fc7df416d0076299f631cd18c9 100644 (file)
@@ -357,14 +357,17 @@ static bool pinctrl_ready_for_gpio_range(unsigned gpio)
        /* Loop over the pin controllers */
        list_for_each_entry(pctldev, &pinctrldev_list, node) {
                /* Loop over the ranges */
+               mutex_lock(&pctldev->mutex);
                list_for_each_entry(range, &pctldev->gpio_ranges, node) {
                        /* Check if any gpio range overlapped with gpio chip */
                        if (range->base + range->npins - 1 < chip->base ||
                            range->base > chip->base + chip->ngpio - 1)
                                continue;
+                       mutex_unlock(&pctldev->mutex);
                        mutex_unlock(&pinctrldev_list_mutex);
                        return true;
                }
+               mutex_unlock(&pctldev->mutex);
        }
 
        mutex_unlock(&pinctrldev_list_mutex);