Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9b77ace4 authored by Axel Lin's avatar Axel Lin Committed by Linus Walleij
Browse files

pinctrl: core: Add proper mutex lock in pinctrl_request_gpio



This one is missed in commit 42fed7ba "pinctrl: move subsystem mutex to
pinctrl_dev struct".

I think this fixes the race between pin_free() and pin_request() calls.
It protects accessing the members of pctldev->desc.
(e.g. update desc->mux_usecount, desc->gpio_owner, desc->mux_owner, etc)
Current code grabs pctldev->mutex before calling pinmux_free_gpio(),
but did not grab the mutex while calling pinmux_request_gpio().

Signed-off-by: default avatarAxel Lin <axel.lin@ingics.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 40604469
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -562,11 +562,15 @@ int pinctrl_request_gpio(unsigned gpio)
		return ret;
	}

	mutex_lock(&pctldev->mutex);

	/* Convert to the pin controllers number space */
	pin = gpio_to_pin(range, gpio);

	ret = pinmux_request_gpio(pctldev, range, pin, gpio);

	mutex_unlock(&pctldev->mutex);

	return ret;
}
EXPORT_SYMBOL_GPL(pinctrl_request_gpio);