Re: [PATCH] scsi: ufs: core: Fix a deadlock between clock scaling and device commands

From: Peter Wang

Date: Mon Oct 19 2026 - 06:48:47 EST


On Fri, 2026-10-16 at 21:46 +0900, Joonhoe Kim wrote
> Since commit 08b12cda6c44 ("scsi: ufs: core: Switch to
> scsi_get_internal_cmd()"), device management commands go through
> blk_execute_rq() on the pseudo SCSI device, which shares the tagset
> with the logical units, while ufshcd_dev_man_lock() holds
> clk_scaling_lock for reading.
>
> ufshcd_clock_scaling_prepare() and ufshcd_pause_command_processing()
> quiesce the tagset before taking clk_scaling_lock for writing. A
> device
> management command holding the lock for reading at that point is
> never
> dispatched and never times out, so the writer waits forever with all
> logical units quiesced. On a Lenovo Legion Tab Y700 Gen 5 this ended
> in
> a hung task panic.
>
> Take clk_scaling_lock before quiescing the tagset, and in
> ufshcd_clock_scaling_prepare() also wb_mutex, which is always taken
> before clk_scaling_lock. Release them in the reverse order. Commit
> b52d695d0620 ("scsi: ufs: core: Keep internal commands dispatchable
> during error handling") fixed the same problem in the error handler.
>
> Fixes: 08b12cda6c44 ("scsi: ufs: core: Switch to
> scsi_get_internal_cmd()")
> Fixes: dc5dcac53278 ("scsi: ufs: core: Add helpers to pause and
> resume command processing")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Joonhoe Kim <26rote@xxxxxxxxx>
> ---

Reviewed-by: Peter Wang <peter.wang@xxxxxxxxxxxx>