> > Currently bits in hba->outstanding_tasks are cleared only after their > corresponding task management commands are successfully done by > __ufshcd_issue_tm_cmd(). > > If timeout happens in a task management command, its corresponding > bit in hba->outstanding_tasks will not be cleared until next task > management command with the same tag used successfully finishes. > > This is wrong and can lead to some issues, like power issue. > For example, ufshcd_release() and ufshcd_gate_work() will do nothing > if hba->outstanding_tasks is not zero even if both UFS host and devices > are actually idle. > > Solution is referried from error handling of device commands: bits in > hba->outstanding_tasks shall be cleared regardless of their execution > results. > > Signed-off-by: Stanley Chu <stanley.chu@xxxxxxxxxxxx> > Signed-off-by: Chun-Hung Wu <chun-hung.wu@xxxxxxxxxxxx> Reviewed-by: Avri Altman <avri.altman@xxxxxxx>