99c66a8868
Call shost_for_each_device() with holding host->host_lock will cause a
deadlock situation, which will cause the system to stall (the log as
follow). Fix this issue by using __shost_for_each_device() in
ufshcd_pending_cmds().
stalls on CPUs/tasks:
all trace:
__switch_to+0x120/0x170
0xffff800011643998
ask dump for CPU 5:
ask:kworker/u16:2 state:R running task stack: 0 pid: 80 ppid: 2 flags:0x0000000a
orkqueue: events_unbound async_run_entry_fn
all trace:
__switch_to+0x120/0x170
0x0
ask dump for CPU 6:
ask:kworker/u16:6 state:R running task stack: 0 pid: 164 ppid: 2 flags:0x0000000a
orkqueue: events_unbound async_run_entry_fn
all trace:
__switch_to+0x120/0x170
0xffff54e7c4429f80
ask dump for CPU 7:
ask:kworker/u16:4 state:R running task stack: 0 pid: 153 ppid: 2 flags:0x0000000a
orkqueue: events_unbound async_run_entry_fn
all trace:
__switch_to+0x120/0x170
blk_mq_run_hw_queue+0x34/0x110
blk_mq_sched_insert_request+0xb0/0x120
blk_execute_rq_nowait+0x68/0x88
blk_execute_rq+0x4c/0xd8
__scsi_execute+0xec/0x1d0
scsi_vpd_inquiry+0x84/0xf0
scsi_get_vpd_buf+0x34/0xb8
scsi_attach_vpd+0x34/0x140
scsi_probe_and_add_lun+0xa6c/0xab8
__scsi_scan_target+0x438/0x4f8
scsi_scan_channel+0x6c/0xa8
scsi_scan_host_selected+0xf0/0x150
do_scsi_scan_host+0x88/0x90
scsi_scan_host+0x1b4/0x1d0
ufshcd_async_scan+0x248/0x310
async_run_entry_fn+0x30/0x178
process_one_work+0x1e8/0x368
worker_thread+0x40/0x478
kthread+0x174/0x180
ret_from_fork+0x10/0x20
Link: https://lore.kernel.org/r/20211214120537.531628-1-huobean@gmail.com
Fixes:
|
||
---|---|---|
.. | ||
cdns-pltfrm.c | ||
Kconfig | ||
Makefile | ||
tc-dwc-g210-pci.c | ||
tc-dwc-g210-pltfrm.c | ||
tc-dwc-g210.c | ||
tc-dwc-g210.h | ||
ti-j721e-ufs.c | ||
ufs_bsg.c | ||
ufs_bsg.h | ||
ufs_quirks.h | ||
ufs-debugfs.c | ||
ufs-debugfs.h | ||
ufs-exynos.c | ||
ufs-exynos.h | ||
ufs-fault-injection.c | ||
ufs-fault-injection.h | ||
ufs-hisi.c | ||
ufs-hisi.h | ||
ufs-hwmon.c | ||
ufs-mediatek-trace.h | ||
ufs-mediatek.c | ||
ufs-mediatek.h | ||
ufs-qcom-ice.c | ||
ufs-qcom.c | ||
ufs-qcom.h | ||
ufs-sysfs.c | ||
ufs-sysfs.h | ||
ufs.h | ||
ufshcd-crypto.c | ||
ufshcd-crypto.h | ||
ufshcd-dwc.c | ||
ufshcd-dwc.h | ||
ufshcd-pci.c | ||
ufshcd-pltfrm.c | ||
ufshcd-pltfrm.h | ||
ufshcd.c | ||
ufshcd.h | ||
ufshci-dwc.h | ||
ufshci.h | ||
ufshpb.c | ||
ufshpb.h | ||
unipro.h |