mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
scsi: ufs: Fix ufshcd_hold() caused scheduling while atomic
commitc63d6099a7upstream. The async version of ufshcd_hold(async == true), which is only called in queuecommand path as for now, is expected to work in atomic context, thus it should not sleep or schedule out. When it runs into the condition that clocks are ON but link is still in hibern8 state, it should bail out without flushing the clock ungate work. Fixes:f2a785ac23("scsi: ufshcd: Fix race between clk scaling and ungate work") Link: https://lore.kernel.org/r/1581392451-28743-6-git-send-email-cang@codeaurora.org Reviewed-by: Hongwu Su <hongwus@codeaurora.org> Reviewed-by: Asutosh Das <asutoshd@codeaurora.org> Reviewed-by: Bean Huo <beanhuo@micron.com> Reviewed-by: Stanley Chu <stanley.chu@mediatek.com> Signed-off-by: Can Guo <cang@codeaurora.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a6047aaf91
commit
db1b2190d5
@@ -682,6 +682,11 @@ start:
|
||||
*/
|
||||
if (ufshcd_can_hibern8_during_gating(hba) &&
|
||||
ufshcd_is_link_hibern8(hba)) {
|
||||
if (async) {
|
||||
rc = -EAGAIN;
|
||||
hba->clk_gating.active_reqs--;
|
||||
break;
|
||||
}
|
||||
spin_unlock_irqrestore(hba->host->host_lock, flags);
|
||||
flush_work(&hba->clk_gating.ungate_work);
|
||||
spin_lock_irqsave(hba->host->host_lock, flags);
|
||||
|
||||
Reference in New Issue
Block a user