linux/drivers
William Wu 39ba832e83 phy: rockchip-inno-usb2: fix possibe deadlock
The commit 611ec35fa1 ("phy: rockchip-inno-usb2: fix some
race conditions") use mutex lock to protect charger detect
work, but it will cause the following possible deadlock.

[ INFO: possible circular locking dependency detected ]
4.4.66 #563 Not tainted
-------------------------------------------------------
kworker/3:1/145 is trying to acquire lock:
(&rport->mutex){+.+...}, at: [<ffffff80083f286c>] rockchip_chg_detect_work+0x6c/0x3d0

but task is already holding lock:
((&(&rport->chg_work)->work)){+.+...}, at: [<ffffff80080be6e4>] process_one_work+0x1c4/0x6ac

which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:

-> #1 ((&(&rport->chg_work)->work)){+.+...}:
[<ffffff80080fda40>] __lock_acquire+0x15c0/0x195c
[<ffffff80080fe5e8>] lock_acquire+0x190/0x250
[<ffffff80080bf534>] flush_work+0x4c/0x274
[<ffffff80080bf944>] __cancel_work_timer+0x130/0x1c0
[<ffffff80080bf9fc>] cancel_delayed_work_sync+0x10/0x18
[<ffffff80083f17a8>] rockchip_usb2phy_exit+0x54/0x6c
[<ffffff80083f07ac>] phy_exit+0x64/0xb4
[<ffffff8008772810>] dwc3_core_exit+0x44/0x98
[<ffffff80087728b0>] dwc3_suspend_common+0x4c/0x5c
[<ffffff8008772a68>] dwc3_runtime_suspend+0x38/0x5c
[<ffffff8008571784>] pm_generic_runtime_suspend+0x28/0x38
[<ffffff8008573464>] __rpm_callback+0x40/0x74
[<ffffff80085734f4>] rpm_callback+0x5c/0x80
[<ffffff8008573bc4>] rpm_suspend+0x31c/0x688
[<ffffff80085751ec>] __pm_runtime_suspend+0x58/0xa4
[<ffffff800877efc0>] dwc3_rockchip_probe+0x3f8/0x574
[<ffffff800856bcd0>] platform_drv_probe+0x58/0xa4
[<ffffff8008569bb0>] driver_probe_device+0x118/0x2b0
[<ffffff8008569e9c>] __device_attach_driver+0x88/0x98
[<ffffff8008567f4c>] bus_for_each_drv+0x7c/0xac
[<ffffff80085699e4>] __device_attach+0xa8/0x128
[<ffffff800856a00c>] device_initial_probe+0x10/0x18
[<ffffff8008569000>] bus_probe_device+0x2c/0x90
[<ffffff800856948c>] deferred_probe_work_func+0x78/0xa8
[<ffffff80080be858>] process_one_work+0x338/0x6ac
[<ffffff80080bfd54>] worker_thread+0x300/0x428
[<ffffff80080c5758>] kthread+0x104/0x10c
[<ffffff8008083080>] ret_from_fork+0x10/0x50

-> #0 (&rport->mutex){+.+...}:
[<ffffff80080faacc>] print_circular_bug+0x64/0x2c4
[<ffffff80080fd70c>] __lock_acquire+0x128c/0x195c
[<ffffff80080fe5e8>] lock_acquire+0x190/0x250
[<ffffff8008c67ac0>] mutex_lock_nested+0x80/0x3d0
[<ffffff80083f286c>] rockchip_chg_detect_work+0x6c/0x3d0
[<ffffff80080be858>] process_one_work+0x338/0x6ac
[<ffffff80080bfd54>] worker_thread+0x300/0x428
[<ffffff80080c5758>] kthread+0x104/0x10c
[<ffffff8008083080>] ret_from_fork+0x10/0x50

other info that might help us debug this:

Possible unsafe locking scenario:

        CPU0                    CPU1
        ----                    ----
   lock((&(&rport->chg_work)->work));
                                lock(&rport->mutex);
                                lock((&(&rport->chg_work)->work));
   lock(&rport->mutex);

  *** DEADLOCK ***

2 locks held by kworker/3:1/145:

stack backtrace:
CPU: 3 PID: 145 Comm: kworker/3:1 Not tainted 4.4.66 #563
Hardware name: Rockchip RK3399 Evaluation Board v3 (Android) (DT)
Workqueue: events rockchip_chg_detect_work
Call trace:
[<ffffff800808a814>] dump_backtrace+0x0/0x1c8
[<ffffff800808a9f0>] show_stack+0x14/0x1c
[<ffffff80083c1fa0>] dump_stack+0xb0/0xec
[<ffffff80080fad10>] print_circular_bug+0x2a8/0x2c4
[<ffffff80080fd70c>] __lock_acquire+0x128c/0x195c
[<ffffff80080fe5e8>] lock_acquire+0x190/0x250
[<ffffff8008c67ac0>] mutex_lock_nested+0x80/0x3d0
[<ffffff80083f286c>] rockchip_chg_detect_work+0x6c/0x3d0
[<ffffff80080be858>] process_one_work+0x338/0x6ac
[<ffffff80080bfd54>] worker_thread+0x300/0x428
[<ffffff80080c5758>] kthread+0x104/0x10c
[<ffffff8008083080>] ret_from_fork+0x10/0x50

Change-Id: I4289afb05d334bf79000090f9071cf428817a583
Signed-off-by: William Wu <william.wu@rock-chips.com>
2017-06-08 10:47:10 +08:00
..
accessibility
acpi Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-05-06 14:23:00 +08:00
adc
amba
android ANDROID: binder: add hwbinder,vndbinder to BINDER_DEVICES. 2017-04-10 13:28:07 +05:30
ata ahci: Add Device ID for ASMedia 1061R and 1062R 2017-03-22 14:17:14 +08:00
atm
auxdisplay
base Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-05-06 14:23:00 +08:00
bcma bcma: use (get|put)_device when probing/removing device driver 2017-03-12 06:37:30 +01:00
block drbd: avoid redefinition of BITS_PER_PAGE 2017-05-08 07:46:01 +02:00
bluetooth LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
bus bus: vexpress-config: fix device reference leak 2017-01-19 20:17:22 +01:00
cdrom
char Merge branch 'linux-linaro-lsk-v4.4' into linux-linaro-lsk-v4.4-android 2017-05-26 12:03:29 +08:00
cir
clk LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
clocksource Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-03-01 18:40:28 +08:00
cmmb
connector
cpufreq cpufreq: rockchip: fix warning caused by passing invalid cpu id 2017-05-19 11:35:16 +08:00
cpuidle Merge branch 'linux-linaro-lsk-v4.4' into linux-linaro-lsk-v4.4-android 2016-10-18 12:31:07 +08:00
crypto crypto: caam - fix RNG deinstantiation error checking 2017-04-18 07:14:36 +02:00
dca
devfreq PM / devfreq: rockchip_dmc: add unify params for ddr frequency scanning. 2017-05-18 11:14:42 +08:00
dio
dma dmaengine: pl330: make transfer run infinitely without CPU intervention 2017-06-01 14:35:20 +08:00
dma-buf UPSTREAM: dma-buf: Add ioctls to allow userspace to flush 2017-05-16 18:33:15 +08:00
edac EDAC: Increment correct counter in edac_inc_ue_error() 2016-09-07 08:32:41 +02:00
eisa
extcon extcon: Add EXTCON_USB_VBUS_EN for USB Type-C 2016-10-07 15:42:26 +08:00
firewire firewire: net: fix fragmented datagram_size off-by-one 2016-11-10 16:36:35 +01:00
firmware firmware: rockchip: use sp_el1 from bl31 delivers 2017-06-05 14:28:44 +08:00
fmc
fpga
gpio gpio: rk8xx: print probe successful info 2017-04-28 17:43:16 +08:00
gpu drm/rockchip: limit gem buffer to 32bit mapping 2017-06-07 14:15:16 +08:00
headset_observe rk_headset: add headset type logic to compatible with cx2072x 2017-01-06 18:25:43 +08:00
hid hid: usbhid: enable hid to wakeup system if it supports remote wakeup 2017-04-24 19:28:56 +08:00
hsi
hv hv: don't reset hv_context.tsc_page on crash 2017-04-27 09:09:34 +02:00
hwmon Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-03-01 18:40:28 +08:00
hwspinlock
hwtracing Merge branch 'v4.4/topic/coresight' into linux-linaro-lsk-v4.4 2017-03-24 11:27:10 +08:00
i2c i2c: rk3x: Make sure the i2c transfer to be finished before system reboot 2017-05-26 12:03:12 +08:00
ide
idle intel_idle: Support for Intel Xeon Phi Processor x200 Product Family 2016-09-15 08:27:46 +02:00
iio LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
infiniband infiniband: call ipv6 route lookup via the stub interface 2017-05-25 14:30:07 +02:00
input driver: sensor-dev: use copy_to_user&&copy_from_user to do the user point 2017-05-22 12:00:32 +08:00
iommu LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
ipack
irqchip Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-05-06 14:23:00 +08:00
isdn isdn/gigaset: fix NULL-deref at probe 2017-03-26 12:13:19 +02:00
leds LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
lguest
lightnvm lightnvm: put bio before return 2016-09-24 10:07:35 +02:00
macintosh
mailbox mailbox: rk3368: fix error setting if mbox_msg is null 2017-05-08 15:46:26 +08:00
mcb mcb: Fixed bar number assignment for the gdd 2016-06-01 12:15:53 -07:00
md Merge branch 'linux-linaro-lsk-v4.4' into linux-linaro-lsk-v4.4-android 2017-05-26 12:03:29 +08:00
media LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
memory memory: omap-gpmc: Fix omap gpmc EXTRADELAY timing 2016-07-27 09:47:35 -07:00
memstick memstick: rtsx_usb_ms: Manage runtime PM when accessing the device 2016-10-28 03:01:35 -04:00
message
mfd mfd: fusb302: move notify to PD startup state 2017-05-25 11:57:00 +08:00
misc LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
mmc mmc: host: rk_sdmmc_ops: fix area access error 2017-05-25 20:07:45 +08:00
mtd LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
mtk_wcn_bt
mtk_wcn_combo
net LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
nfc Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2016-12-02 20:31:31 +08:00
ntb ntb_transport: Pick an unused queue 2017-02-23 17:43:10 +01:00
nubus
nvdimm libnvdimm: fix reconfig_mutex, mmap_sem, and jbd2_handle lockdep splat 2017-04-21 09:30:06 +02:00
nvme NVMe: tage the disk with flag of is_rk_disk 2017-01-05 09:17:28 +08:00
nvmem nvmem: rockchip-efuse: add support for rk322x-efuse 2017-05-11 19:21:53 +08:00
of LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
oprofile
parisc
parport parport: fix attempt to write duplicate procfiles 2017-03-30 09:35:17 +02:00
pci LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
pcmcia
perf Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2016-11-04 14:30:24 +08:00
phy phy: rockchip-inno-usb2: fix possibe deadlock 2017-06-08 10:47:10 +08:00
pinctrl Revert "UPSTREAM: pinctrl: rockchip: avoid hardirq-unsafe functions in irq_chip" 2017-06-06 20:52:45 +08:00
platform Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-05-06 14:23:00 +08:00
pnp PNP: Add Broadwell to Intel MCH size workaround 2016-08-16 09:30:48 +02:00
power LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
powercap
pps pps: do not crash when failed to register 2016-08-10 11:49:25 +02:00
ps3
ptp
pwm LSK 17.03 v4.4-android 2017-03-31 11:43:47 +08:00
rapidio
ras
regulator LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
remoteproc remoteproc: Fix potential race condition in rproc_add 2016-08-20 18:09:20 +02:00
reset
rk_nand driver: rk nand: update ftl to support slc nand 2017-04-27 16:38:02 +08:00
rpmsg
rtc Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-05-06 14:23:00 +08:00
s390 s390/zcrypt: Introduce CEX6 toleration 2017-03-30 09:35:20 +02:00
sbus
scsi Merge branch 'linux-linaro-lsk-v4.4' into linux-linaro-lsk-v4.4-android 2017-05-15 17:32:20 +08:00
sfi
sh
smc
sn
soc soc: rockchip: cpuinfo: read cpu version from eFuse 2017-06-02 16:40:04 +08:00
spi Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-03-01 18:40:28 +08:00
spmi
ssb ssb: Fix error routine when fallback SPROM fails 2017-01-09 08:07:42 +01:00
staging LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
switch drivers: switch: clear drvdata before device_destroy 2017-04-28 18:35:47 +08:00
target iscsi-target: Set session_fall_back_to_erl0 when forcing reinstatement 2017-05-20 14:26:58 +02:00
tc
testcode
thermal thermal: rockchip: rk3368: fix bad unlock balance issue 2017-04-24 10:38:57 +08:00
thunderbolt thunderbolt: Fix double free of drom buffer 2016-06-01 12:15:53 -07:00
tty LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
uio uio: fix dmem_region_start computation 2016-10-31 04:13:59 -06:00
usb LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
uwb uwb: fix device quirk on big-endian hosts 2017-05-25 14:30:17 +02:00
vfio vfio/type1: Remove locked page accounting workqueue 2017-05-20 14:27:00 +02:00
vhost vhost/scsi: fix reuse of &vq->iov[out] in response 2016-09-15 08:27:53 +02:00
video driver: video: rockchip: add new driver of vpu 2017-06-07 12:05:34 +08:00
virt
virtio virtio_balloon: init 1st buffer in stats vq 2017-03-31 09:49:53 +02:00
vlynq
vme vme: Fix wrong pointer utilization in ca91cx42_slave_get 2017-01-19 20:17:21 +01:00
w1 Merge branch 'linux-linaro-lsk-v4.4' into linux-linaro-lsk-v4.4-android 2017-03-20 12:03:10 +08:00
watchdog LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00
xen xen/acpi: upload PM state from init-domain to Xen 2017-03-30 09:35:18 +02:00
zorro
Kconfig rk_headset: re-enable driver/headset_observe/ 2016-09-27 18:14:36 +08:00
Makefile LSK 17.05 v4.4-android 2017-06-07 10:03:03 +08:00