mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 13:44:15 +08:00
scsi: ufs: fix exception event handling
The device can set the exception event bit in one of the response UPIU, for example to notify the need for urgent BKOPs operation. In such a case, the host driver calls ufshcd_exception_event_handler to handle this notification. When trying to check the exception event status (for finding the cause for the exception event), the device may be busy with additional SCSI commands handling and may not respond within the 100ms timeout. To prevent that, we need to block SCSI commands during handling of exception events and allow retransmissions of the query requests, in case of timeout. Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> Signed-off-by: Maya Erez <merez@codeaurora.org> Signed-off-by: Can Guo <cang@codeaurora.org> Signed-off-by: Asutosh Das <asutoshd@codeaurora.org> Reviewed-by: Subhash Jadavani <subhashj@codeaurora.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
60d6d22d85
commit
2e3611e954
@ -5073,6 +5073,7 @@ static void ufshcd_exception_event_handler(struct work_struct *work)
|
||||
hba = container_of(work, struct ufs_hba, eeh_work);
|
||||
|
||||
pm_runtime_get_sync(hba->dev);
|
||||
scsi_block_requests(hba->host);
|
||||
err = ufshcd_get_ee_status(hba, &status);
|
||||
if (err) {
|
||||
dev_err(hba->dev, "%s: failed to get exception status %d\n",
|
||||
@ -5086,6 +5087,7 @@ static void ufshcd_exception_event_handler(struct work_struct *work)
|
||||
ufshcd_bkops_exception_event_handler(hba);
|
||||
|
||||
out:
|
||||
scsi_unblock_requests(hba->host);
|
||||
pm_runtime_put_sync(hba->dev);
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user