提交 c3be8d1e 编写于 作者: C Can Guo 提交者: Martin K. Petersen

scsi: ufs: Move dumps in IRQ handler to error handler

Performing dumps in the IRQ handler causes system stability issues. Move
dumps to the error handler and only print basic host registers here.

Link: https://lore.kernel.org/r/1596975355-39813-8-git-send-email-cang@codeaurora.orgReviewed-by: NBean Huo <beanhuo@micron.com>
Reviewed-by: NAsutosh Das <asutoshd@codeaurora.org>
Signed-off-by: NCan Guo <cang@codeaurora.org>
Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
上级 c72e79c0
...@@ -5696,6 +5696,19 @@ static void ufshcd_err_handler(struct work_struct *work) ...@@ -5696,6 +5696,19 @@ static void ufshcd_err_handler(struct work_struct *work)
UFSHCD_UIC_DL_TCx_REPLAY_ERROR)))) UFSHCD_UIC_DL_TCx_REPLAY_ERROR))))
needs_reset = true; needs_reset = true;
if (hba->saved_err & (INT_FATAL_ERRORS | UIC_ERROR |
UFSHCD_UIC_HIBERN8_MASK)) {
bool pr_prdt = !!(hba->saved_err & SYSTEM_BUS_FATAL_ERROR);
spin_unlock_irqrestore(hba->host->host_lock, flags);
ufshcd_print_host_state(hba);
ufshcd_print_pwr_info(hba);
ufshcd_print_host_regs(hba);
ufshcd_print_tmrs(hba, hba->outstanding_tasks);
ufshcd_print_trs(hba, hba->outstanding_reqs, pr_prdt);
spin_lock_irqsave(hba->host->host_lock, flags);
}
/* /*
* if host reset is required then skip clearing the pending * if host reset is required then skip clearing the pending
* transfers forcefully because they will get cleared during * transfers forcefully because they will get cleared during
...@@ -5915,18 +5928,12 @@ static irqreturn_t ufshcd_check_errors(struct ufs_hba *hba) ...@@ -5915,18 +5928,12 @@ static irqreturn_t ufshcd_check_errors(struct ufs_hba *hba)
/* dump controller state before resetting */ /* dump controller state before resetting */
if (hba->saved_err & (INT_FATAL_ERRORS | UIC_ERROR)) { if (hba->saved_err & (INT_FATAL_ERRORS | UIC_ERROR)) {
bool pr_prdt = !!(hba->saved_err &
SYSTEM_BUS_FATAL_ERROR);
dev_err(hba->dev, "%s: saved_err 0x%x saved_uic_err 0x%x\n", dev_err(hba->dev, "%s: saved_err 0x%x saved_uic_err 0x%x\n",
__func__, hba->saved_err, __func__, hba->saved_err,
hba->saved_uic_err); hba->saved_uic_err);
ufshcd_dump_regs(hba, 0, UFSHCI_REG_SPACE_SIZE,
ufshcd_print_host_regs(hba); "host_regs: ");
ufshcd_print_pwr_info(hba); ufshcd_print_pwr_info(hba);
ufshcd_print_tmrs(hba, hba->outstanding_tasks);
ufshcd_print_trs(hba, hba->outstanding_reqs,
pr_prdt);
} }
ufshcd_schedule_eh_work(hba); ufshcd_schedule_eh_work(hba);
retval |= IRQ_HANDLED; retval |= IRQ_HANDLED;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册