From: Lee Sang Hyun <sh425.lee@samsung.com>
To: linux-scsi@vger.kernel.org, alim.akhtar@samsung.com,
avri.altman@wdc.com, jejb@linux.ibm.com,
martin.petersen@oracle.com, beanhuo@micron.com,
asutoshd@codeaurora.org, cang@codeaurora.org, bvanassche@acm.org,
grant.jung@samsung.com, sc.suh@samsung.com, hy50.seo@samsung.com,
sh425.lee@samsung.com, kwmad.kim@samsung.com
Subject: [RESEND RFC PATCH v1] scsi: ufs: add retries for SSU
Date: Fri, 17 Jul 2020 16:39:36 +0900 [thread overview]
Message-ID: <1594971576-40264-1-git-send-email-sh425.lee@samsung.com> (raw)
In-Reply-To: CGME20200717074740epcas2p2b1c8e7bf7dc28f13c5a9999373f4601b@epcas2p2.samsung.com
Retry of SSU is not working because of UNIT_ATTENTION if SSU is failed.
So, more retry is needed.
More than 3 times of SSU(START STOP UNIT) retries are needed
to prevent a platform watchdog which is because of IO stuck.
Host sends SSU to device during resume to wake-up UFS device.
And system(host) can not do IO operations if SSU is failed.
There are no responses from UFS device and
ufshcd_eh_reset_handler() is called in the below log.
We need to do 3 times of retries to clear UNIT ATTENTION
which is because of HW RESET at this situation.
<3>[ 636.089575] [0: kworker/u16:11: 3578] ufshcd-qcom 1d84000.ufshc: ufshcd_abort: tag:0, cmd:0x1b, retries 2
<3>[ 636.089898] [0: kworker/u16:11: 3578] ufshcd-qcom 1d84000.ufshc: ufshcd_eh_host_reset_handler: reset in progress - 2
...
<4>[ 638.271463] [1: kworker/1:1: 3552] scsi 0:0:0:49488: START_STOP failed for power mode: 1, result 30000
...
<6>[ 1056.481268] [3: msm_watchdog: 79] current proc : 79 msm_watchdog
...
<4>[ 1056.576026] [3: msm_watchdog: 79] Call trace:
<4>[ 1056.576138] [3: msm_watchdog: 79] __switch_to+0xb4/0xc0
<4>[ 1056.576267] [3: msm_watchdog: 79] __schedule+0x8d8/0xc70
<4>[ 1056.576404] [3: msm_watchdog: 79] io_schedule+0x8c/0xc0
<4>[ 1056.576530] [3: msm_watchdog: 79] bit_wait_io+0x14/0x60
<4>[ 1056.576658] [3: msm_watchdog: 79] out_of_line_wait_on_bit+0xd8/0x158
<4>[ 1056.576817] [3: msm_watchdog: 79] __wait_on_buffer+0x24/0x30
<4>[ 1056.576962] [3: msm_watchdog: 79] jbd2_journal_commit_transaction+0xf24/0x1970
<4>[ 1056.577134] [3: msm_watchdog: 79] kjournald2+0x1e0/0x258
<4>[ 1056.577264] [3: msm_watchdog: 79] kthread+0x110/0x120
<4>[ 1056.577389] [3: msm_watchdog: 79] ret_from_fork+0x10/0x18
...
<0>[ 1056.784682] [3: msm_watchdog: 79] Kernel panic - not syncing: Platform Watchdog can't update sync_cnt
...
Change-Id: I933f774e04456226d760536200e9f079a5d5b987
Signed-off-by: Lee Sang Hyun <sh425.lee@samsung.com>
---
drivers/scsi/ufs/ufshcd.c | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index ad4fc82..30cee8c 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -100,6 +100,9 @@
/* Default value of wait time before gating device ref clock */
#define UFSHCD_REF_CLK_GATING_WAIT_US 0xFF /* microsecs */
+/* SSU retries */
+#define SSU_RETRIES 3
+
#define ufshcd_toggle_vreg(_dev, _vreg, _on) \
({ \
int _ret; \
@@ -7977,6 +7980,7 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
struct scsi_device *sdp;
unsigned long flags;
int ret;
+ int retries;
spin_lock_irqsave(hba->host->host_lock, flags);
sdp = hba->sdev_ufs_device;
@@ -8016,14 +8020,18 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
* callbacks hence set the RQF_PM flag so that it doesn't resume the
* already suspended childs.
*/
- ret = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, &sshdr,
- START_STOP_TIMEOUT, 0, 0, RQF_PM, NULL);
- if (ret) {
- sdev_printk(KERN_WARNING, sdp,
- "START_STOP failed for power mode: %d, result %x\n",
- pwr_mode, ret);
- if (driver_byte(ret) == DRIVER_SENSE)
- scsi_print_sense_hdr(sdp, NULL, &sshdr);
+ for (retries = 0; retries < SSU_RETRIES; retries++) {
+ ret = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, &sshdr,
+ START_STOP_TIMEOUT, 0, 0, RQF_PM, NULL);
+ if (ret) {
+ sdev_printk(KERN_WARNING, sdp,
+ "START_STOP failed for power mode: %d, result %x\n",
+ pwr_mode, ret);
+ if (driver_byte(ret) == DRIVER_SENSE)
+ scsi_print_sense_hdr(sdp, NULL, &sshdr);
+ } else {
+ break;
+ }
}
if (!ret)
--
2.7.4
next parent reply other threads:[~2020-07-17 7:47 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20200717074740epcas2p2b1c8e7bf7dc28f13c5a9999373f4601b@epcas2p2.samsung.com>
2020-07-17 7:39 ` Lee Sang Hyun [this message]
2020-07-18 20:30 ` [RESEND RFC PATCH v1] scsi: ufs: add retries for SSU Bart Van Assche
2020-07-22 9:14 ` Stanley Chu
2020-07-22 15:10 ` Bart Van Assche
2020-07-25 3:10 ` Stanley Chu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1594971576-40264-1-git-send-email-sh425.lee@samsung.com \
--to=sh425.lee@samsung.com \
--cc=alim.akhtar@samsung.com \
--cc=asutoshd@codeaurora.org \
--cc=avri.altman@wdc.com \
--cc=beanhuo@micron.com \
--cc=bvanassche@acm.org \
--cc=cang@codeaurora.org \
--cc=grant.jung@samsung.com \
--cc=hy50.seo@samsung.com \
--cc=jejb@linux.ibm.com \
--cc=kwmad.kim@samsung.com \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=sc.suh@samsung.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).