linux-stable/drivers/pinctrl
Jim Lin db93facfb0 pinctrl: Fix two deadlocks
This patch is to fix two deadlock cases.
Deadlock 1:
CPU #1
 pinctrl_register-> pinctrl_get ->
 create_pinctrl
 (Holding lock pinctrl_maps_mutex)
 -> get_pinctrl_dev_from_devname
 (Trying to acquire lock pinctrldev_list_mutex)
CPU #0
 pinctrl_unregister
 (Holding lock pinctrldev_list_mutex)
 -> pinctrl_put ->> pinctrl_free ->
 pinctrl_dt_free_maps -> pinctrl_unregister_map
 (Trying to acquire lock pinctrl_maps_mutex)

Simply to say
CPU#1 is holding lock A and trying to acquire lock B,
CPU#0 is holding lock B and trying to acquire lock A.

Deadlock 2:
CPU #3
 pinctrl_register-> pinctrl_get ->
 create_pinctrl
 (Holding lock pinctrl_maps_mutex)
 -> get_pinctrl_dev_from_devname
 (Trying to acquire lock pinctrldev_list_mutex)
CPU #2
 pinctrl_unregister
 (Holding lock pctldev->mutex)
 -> pinctrl_put ->> pinctrl_free ->
 pinctrl_dt_free_maps -> pinctrl_unregister_map
 (Trying to acquire lock pinctrl_maps_mutex)
CPU #0
 tegra_gpio_request
 (Holding lock pinctrldev_list_mutex)
 -> pinctrl_get_device_gpio_range
 (Trying to acquire lock pctldev->mutex)

Simply to say
CPU#3 is holding lock A and trying to acquire lock D,
CPU#2 is holding lock B and trying to acquire lock A,
CPU#0 is holding lock D and trying to acquire lock B.

Cc: Stable <stable@vger.kernel.org>
Signed-off-by: Jim Lin <jilin@nvidia.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2015-01-14 14:20:33 +01:00
..
berlin pinctrl: berlin: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
freescale Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
intel Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
mvebu pinctrl: mvebu: drop owner assignment from platform_drivers 2014-10-20 16:21:22 +02:00
nomadik Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
qcom Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
samsung Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
sh-pfc pinctrl: sh-pfc: drop owner assignment from platform_drivers 2014-10-20 16:21:24 +02:00
sirf pinctrl: sirf: drop owner assignment from platform_drivers 2014-10-20 16:21:24 +02:00
spear Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
sunxi Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
vt8500 pinctrl: vt8500: drop owner assignment from platform_drivers 2014-10-20 16:21:26 +02:00
core.c pinctrl: Fix two deadlocks 2015-01-14 14:20:33 +01:00
core.h
devicetree.c
devicetree.h
Kconfig pinctrl: Move Intel Baytrail pinctrl driver under intel directory 2014-10-29 10:35:20 +01:00
Makefile pinctrl: Move Intel Baytrail pinctrl driver under intel directory 2014-10-29 10:35:20 +01:00
pinconf-generic.c pinctrl: pinconf-generic: Declare dt_params/conf_items const 2014-11-11 13:00:25 +01:00
pinconf.c
pinconf.h
pinctrl-adi2-bf54x.c
pinctrl-adi2-bf60x.c
pinctrl-adi2.c pinctrl: adi2: Remove duplicate gpiochip_remove_pin_ranges 2014-09-05 10:33:51 +02:00
pinctrl-adi2.h
pinctrl-as3722.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-at91.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
pinctrl-at91.h pinctrl: at91: use own header 2014-10-29 09:28:35 +01:00
pinctrl-bcm281xx.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
pinctrl-bcm2835.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-coh901.c pinctrl: remove all usage of gpio_remove ret val in driver/pinctl 2014-07-22 16:34:12 +02:00
pinctrl-coh901.h
pinctrl-falcon.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-lantiq.c pinctrl: clean up after enable refactoring 2014-09-04 10:05:07 +02:00
pinctrl-lantiq.h pinctrl: lantiq: Fix header file include guard 2014-04-22 08:41:35 +02:00
pinctrl-palmas.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-rockchip.c pinctrl: rockchip: Avoid losing interrupts when supporting both edges 2015-01-14 14:20:32 +01:00
pinctrl-single.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-st.c pinctrl: st: Add irq_disable hook to st_gpio_irqchip 2015-01-07 10:44:39 +01:00
pinctrl-tb10x.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
pinctrl-tegra-xusb.c USB patches for 3.19-rc1 2014-12-14 14:57:16 -08:00
pinctrl-tegra.c pinctrl: clean up after enable refactoring 2014-09-04 10:05:07 +02:00
pinctrl-tegra.h pinctrl: tegra: add missing kerneldoc 2014-04-22 16:55:41 +02:00
pinctrl-tegra20.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-tegra30.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-tegra114.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-tegra124.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-tz1090-pdc.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-tz1090.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-u300.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-utils.c
pinctrl-utils.h
pinctrl-xway.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinmux.c pinctrl: clean up after enable refactoring 2014-09-04 10:05:07 +02:00
pinmux.h