diff options
author | Axel Lin <axel.lin@ingics.com> | 2013-08-18 08:34:22 -0400 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2013-08-23 02:56:27 -0400 |
commit | f0059021084137b4ffd2ffc7ee4b62a895c4c84a (patch) | |
tree | 1ee24558547d5aebe9b5ce2a93ecc330738c7e68 /drivers/pinctrl | |
parent | 031b8ce01b93aca6f3fb8982994f7015a9f73953 (diff) |
pinctrl: core: Hold pinctrldev_list_mutex mutex while traversing pinctrldev_list
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>
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r-- | drivers/pinctrl/core.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c index a97b717e3ad3..ff06582103c0 100644 --- a/drivers/pinctrl/core.c +++ b/drivers/pinctrl/core.c | |||
@@ -392,6 +392,8 @@ static int pinctrl_get_device_gpio_range(unsigned gpio, | |||
392 | { | 392 | { |
393 | struct pinctrl_dev *pctldev = NULL; | 393 | struct pinctrl_dev *pctldev = NULL; |
394 | 394 | ||
395 | mutex_lock(&pinctrldev_list_mutex); | ||
396 | |||
395 | /* Loop over the pin controllers */ | 397 | /* Loop over the pin controllers */ |
396 | list_for_each_entry(pctldev, &pinctrldev_list, node) { | 398 | list_for_each_entry(pctldev, &pinctrldev_list, node) { |
397 | struct pinctrl_gpio_range *range; | 399 | struct pinctrl_gpio_range *range; |
@@ -400,10 +402,13 @@ static int pinctrl_get_device_gpio_range(unsigned gpio, | |||
400 | if (range != NULL) { | 402 | if (range != NULL) { |
401 | *outdev = pctldev; | 403 | *outdev = pctldev; |
402 | *outrange = range; | 404 | *outrange = range; |
405 | mutex_unlock(&pinctrldev_list_mutex); | ||
403 | return 0; | 406 | return 0; |
404 | } | 407 | } |
405 | } | 408 | } |
406 | 409 | ||
410 | mutex_unlock(&pinctrldev_list_mutex); | ||
411 | |||
407 | return -EPROBE_DEFER; | 412 | return -EPROBE_DEFER; |
408 | } | 413 | } |
409 | 414 | ||