* [PATCH 1/6] scsi: ufs: atomic update for clkgating_enable @ 2020-09-15 20:45 Jaegeuk Kim 2020-09-15 20:45 ` [PATCH 2/6] scsi: ufs: clear UAC for FFU Jaegeuk Kim ` (4 more replies) 0 siblings, 5 replies; 12+ messages in thread From: Jaegeuk Kim @ 2020-09-15 20:45 UTC (permalink / raw) To: linux-kernel, linux-scsi, kernel-team Cc: Jaegeuk Kim, Alim Akhtar, Avri Altman From: Jaegeuk Kim <jaegeuk@google.com> When giving a stress test which enables/disables clkgating, we hit device timeout sometimes. This patch avoids subtle racy condition to address it. Cc: Alim Akhtar <alim.akhtar@samsung.com> Cc: Avri Altman <avri.altman@wdc.com> Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> --- drivers/scsi/ufs/ufshcd.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 1d157ff58d817..d929c3d1e58cc 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -1791,19 +1791,19 @@ static ssize_t ufshcd_clkgate_enable_store(struct device *dev, return -EINVAL; value = !!value; + + spin_lock_irqsave(hba->host->host_lock, flags); if (value == hba->clk_gating.is_enabled) goto out; - if (value) { - ufshcd_release(hba); - } else { - spin_lock_irqsave(hba->host->host_lock, flags); + if (value) + hba->clk_gating.active_reqs--; + else hba->clk_gating.active_reqs++; - spin_unlock_irqrestore(hba->host->host_lock, flags); - } hba->clk_gating.is_enabled = value; out: + spin_unlock_irqrestore(hba->host->host_lock, flags); return count; } -- 2.28.0.618.gf4bc123cb7-goog ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/6] scsi: ufs: clear UAC for FFU 2020-09-15 20:45 [PATCH 1/6] scsi: ufs: atomic update for clkgating_enable Jaegeuk Kim @ 2020-09-15 20:45 ` Jaegeuk Kim 2020-09-15 20:45 ` [PATCH 3/6] scsi: ufs: use WQ_HIGHPRI for gating work Jaegeuk Kim ` (3 subsequent siblings) 4 siblings, 0 replies; 12+ messages in thread From: Jaegeuk Kim @ 2020-09-15 20:45 UTC (permalink / raw) To: linux-kernel, linux-scsi, kernel-team Cc: Jaegeuk Kim, Alim Akhtar, Avri Altman From: Jaegeuk Kim <jaegeuk@google.com> In order to conduct FFU or RPMB operations, UFS needs to clear UAC. This patch clears it explicitly, so that we could get no failure given early execution. Cc: Alim Akhtar <alim.akhtar@samsung.com> Cc: Avri Altman <avri.altman@wdc.com> Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> --- drivers/scsi/ufs/ufshcd.c | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index d929c3d1e58cc..5deba03a61f75 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -7385,6 +7385,45 @@ static int ufshcd_add_lus(struct ufs_hba *hba) return ret; } +static int +ufshcd_send_request_sense(struct ufs_hba *hba, struct scsi_device *sdp); + +static int ufshcd_clear_uac(struct ufs_hba *hba) +{ + struct scsi_device *sdp; + unsigned long flags; + int ret = 0; + + spin_lock_irqsave(hba->host->host_lock, flags); + sdp = hba->sdev_ufs_device; + if (sdp) { + ret = scsi_device_get(sdp); + if (!ret && !scsi_device_online(sdp)) { + ret = -ENODEV; + scsi_device_put(sdp); + } + } else { + ret = -ENODEV; + } + spin_unlock_irqrestore(hba->host->host_lock, flags); + if (ret) + goto out_err; + + if (hba->wlun_dev_clr_ua) { + ret = ufshcd_send_request_sense(hba, sdp); + if (ret) + goto out; + /* Unit attention condition is cleared now */ + hba->wlun_dev_clr_ua = false; + } +out: + scsi_device_put(sdp); +out_err: + if (ret) + dev_err(hba->dev, "%s: Failed UAC clear ret = %d\n", __func__, ret); + return ret; +} + /** * ufshcd_probe_hba - probe hba to detect device and initialize * @hba: per-adapter instance @@ -7500,6 +7539,8 @@ static void ufshcd_async_scan(void *data, async_cookie_t cookie) pm_runtime_put_sync(hba->dev); ufshcd_exit_clk_scaling(hba); ufshcd_hba_exit(hba); + } else { + ufshcd_clear_uac(hba); } } -- 2.28.0.618.gf4bc123cb7-goog ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/6] scsi: ufs: use WQ_HIGHPRI for gating work 2020-09-15 20:45 [PATCH 1/6] scsi: ufs: atomic update for clkgating_enable Jaegeuk Kim 2020-09-15 20:45 ` [PATCH 2/6] scsi: ufs: clear UAC for FFU Jaegeuk Kim @ 2020-09-15 20:45 ` Jaegeuk Kim 2020-09-15 20:45 ` [PATCH 4/6] scsi: ufs: fix LINERESET on hibern8 Jaegeuk Kim ` (2 subsequent siblings) 4 siblings, 0 replies; 12+ messages in thread From: Jaegeuk Kim @ 2020-09-15 20:45 UTC (permalink / raw) To: linux-kernel, linux-scsi, kernel-team Cc: Jaegeuk Kim, Alim Akhtar, Avri Altman From: Jaegeuk Kim <jaegeuk@google.com> Must have WQ_MEM_RECLAIM ``WQ_MEM_RECLAIM`` All wq which might be used in the memory reclaim paths **MUST** have this flag set. The wq is guaranteed to have at least one execution context regardless of memory pressure. Cc: Alim Akhtar <alim.akhtar@samsung.com> Cc: Avri Altman <avri.altman@wdc.com> Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> --- drivers/scsi/ufs/ufshcd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 5deba03a61f75..848e33ec40639 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -1849,7 +1849,7 @@ static void ufshcd_init_clk_gating(struct ufs_hba *hba) snprintf(wq_name, ARRAY_SIZE(wq_name), "ufs_clk_gating_%d", hba->host->host_no); hba->clk_gating.clk_gating_workq = alloc_ordered_workqueue(wq_name, - WQ_MEM_RECLAIM); + WQ_MEM_RECLAIM | WQ_HIGHPRI); hba->clk_gating.is_enabled = true; -- 2.28.0.618.gf4bc123cb7-goog ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/6] scsi: ufs: fix LINERESET on hibern8 2020-09-15 20:45 [PATCH 1/6] scsi: ufs: atomic update for clkgating_enable Jaegeuk Kim 2020-09-15 20:45 ` [PATCH 2/6] scsi: ufs: clear UAC for FFU Jaegeuk Kim 2020-09-15 20:45 ` [PATCH 3/6] scsi: ufs: use WQ_HIGHPRI for gating work Jaegeuk Kim @ 2020-09-15 20:45 ` Jaegeuk Kim 2020-09-18 4:12 ` Jaegeuk Kim 2020-09-15 20:45 ` [PATCH 5/6] scsi: ufs: show ufs part info in error case Jaegeuk Kim 2020-09-15 20:45 ` [PATCH 6/6] scsi: add more contexts in the ufs tracepoints Jaegeuk Kim 4 siblings, 1 reply; 12+ messages in thread From: Jaegeuk Kim @ 2020-09-15 20:45 UTC (permalink / raw) To: linux-kernel, linux-scsi, kernel-team Cc: Jaegeuk Kim, Alim Akhtar, Avri Altman From: Jaegeuk Kim <jaegeuk@google.com> When testing infinite test to read sysfs entries of UFS, I got a UFS timeout with the following kernel message. query: dev_cmd_send: seq_no=78082 tag=31, idn=2 query: ufshcd_wait_for_dev_cmd: dev_cmd request timedout, tag 31 query: __ufshcd_query_descriptor: opcode 0x01 for idn 2 failed, index 0, err = -11 -- hibern8: dme: dme_send: cmd_id=0x17 idn=0 query: ufshcd_query_descriptor: failed with error -11, retries 3 -- hibern8: ufshcd_update_uic_error: LINERESET during hibern8 enter -- hibern8: __ufshcd_uic_hibern8_enter: hibern8 enter failed. ret = -110 The problem is casued by hibern8 command issued by ufshcd_suspend(), which is not aware of query command. If autohibern8 is enabled, we actually don't need to issue hibern8 command by suspend. Cc: Alim Akhtar <alim.akhtar@samsung.com> Cc: Avri Altman <avri.altman@wdc.com> Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> --- drivers/scsi/ufs/ufshcd.c | 20 ++++++++++++++++++-- drivers/scsi/ufs/ufshcd.h | 1 + 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 848e33ec40639..bdc82cc3824aa 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -3079,8 +3079,12 @@ int ufshcd_query_descriptor_retry(struct ufs_hba *hba, int retries; for (retries = QUERY_REQ_RETRIES; retries > 0; retries--) { - err = __ufshcd_query_descriptor(hba, opcode, idn, index, + err = -EAGAIN; + down_read(&hba->query_lock); + if (!ufshcd_is_link_hibern8(hba)) + err = __ufshcd_query_descriptor(hba, opcode, idn, index, selector, desc_buf, buf_len); + up_read(&hba->query_lock); if (!err || err == -EINVAL) break; } @@ -8263,8 +8267,8 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) enum ufs_pm_level pm_lvl; enum ufs_dev_pwr_mode req_dev_pwr_mode; enum uic_link_state req_link_state; + bool need_upwrite = false; - hba->pm_op_in_progress = 1; if (!ufshcd_is_shutdown_pm(pm_op)) { pm_lvl = ufshcd_is_runtime_pm(pm_op) ? hba->rpm_lvl : hba->spm_lvl; @@ -8275,6 +8279,15 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) req_link_state = UIC_LINK_OFF_STATE; } + if (ufshcd_is_runtime_pm(pm_op) && + req_link_state == UIC_LINK_HIBERN8_STATE && + hba->capabilities & MASK_AUTO_HIBERN8_SUPPORT) { + need_upwrite = true; + if (!down_write_trylock(&hba->query_lock)) + return -EBUSY; + } + hba->pm_op_in_progress = 1; + /* * If we can't transition into any of the low power modes * just gate the clocks. @@ -8403,6 +8416,8 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) } hba->pm_op_in_progress = 0; + if (need_upwrite) + up_write(&hba->query_lock); if (ret) ufshcd_update_reg_hist(&hba->ufs_stats.suspend_err, (u32)ret); @@ -8894,6 +8909,7 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq) mutex_init(&hba->dev_cmd.lock); init_rwsem(&hba->clk_scaling_lock); + init_rwsem(&hba->query_lock); ufshcd_init_clk_gating(hba); diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 363589c0bd370..6f8e05eaf9661 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -754,6 +754,7 @@ struct ufs_hba { bool is_urgent_bkops_lvl_checked; struct rw_semaphore clk_scaling_lock; + struct rw_semaphore query_lock; unsigned char desc_size[QUERY_DESC_IDN_MAX]; atomic_t scsi_block_reqs_cnt; -- 2.28.0.618.gf4bc123cb7-goog ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 4/6] scsi: ufs: fix LINERESET on hibern8 2020-09-15 20:45 ` [PATCH 4/6] scsi: ufs: fix LINERESET on hibern8 Jaegeuk Kim @ 2020-09-18 4:12 ` Jaegeuk Kim 0 siblings, 0 replies; 12+ messages in thread From: Jaegeuk Kim @ 2020-09-18 4:12 UTC (permalink / raw) To: linux-kernel, linux-scsi, kernel-team; +Cc: Alim Akhtar, Avri Altman Please ignore this patch. Thanks. On 09/15, Jaegeuk Kim wrote: > From: Jaegeuk Kim <jaegeuk@google.com> > > When testing infinite test to read sysfs entries of UFS, I got a UFS timeout > with the following kernel message. > > query: dev_cmd_send: seq_no=78082 tag=31, idn=2 > query: ufshcd_wait_for_dev_cmd: dev_cmd request timedout, tag 31 > query: __ufshcd_query_descriptor: opcode 0x01 for idn 2 failed, index 0, err = -11 > -- hibern8: dme: dme_send: cmd_id=0x17 idn=0 > query: ufshcd_query_descriptor: failed with error -11, retries 3 > -- hibern8: ufshcd_update_uic_error: LINERESET during hibern8 enter > -- hibern8: __ufshcd_uic_hibern8_enter: hibern8 enter failed. ret = -110 > > The problem is casued by hibern8 command issued by ufshcd_suspend(), which is > not aware of query command. If autohibern8 is enabled, we actually don't need > to issue hibern8 command by suspend. > > Cc: Alim Akhtar <alim.akhtar@samsung.com> > Cc: Avri Altman <avri.altman@wdc.com> > Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> > --- > drivers/scsi/ufs/ufshcd.c | 20 ++++++++++++++++++-- > drivers/scsi/ufs/ufshcd.h | 1 + > 2 files changed, 19 insertions(+), 2 deletions(-) > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > index 848e33ec40639..bdc82cc3824aa 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -3079,8 +3079,12 @@ int ufshcd_query_descriptor_retry(struct ufs_hba *hba, > int retries; > > for (retries = QUERY_REQ_RETRIES; retries > 0; retries--) { > - err = __ufshcd_query_descriptor(hba, opcode, idn, index, > + err = -EAGAIN; > + down_read(&hba->query_lock); > + if (!ufshcd_is_link_hibern8(hba)) > + err = __ufshcd_query_descriptor(hba, opcode, idn, index, > selector, desc_buf, buf_len); > + up_read(&hba->query_lock); > if (!err || err == -EINVAL) > break; > } > @@ -8263,8 +8267,8 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) > enum ufs_pm_level pm_lvl; > enum ufs_dev_pwr_mode req_dev_pwr_mode; > enum uic_link_state req_link_state; > + bool need_upwrite = false; > > - hba->pm_op_in_progress = 1; > if (!ufshcd_is_shutdown_pm(pm_op)) { > pm_lvl = ufshcd_is_runtime_pm(pm_op) ? > hba->rpm_lvl : hba->spm_lvl; > @@ -8275,6 +8279,15 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) > req_link_state = UIC_LINK_OFF_STATE; > } > > + if (ufshcd_is_runtime_pm(pm_op) && > + req_link_state == UIC_LINK_HIBERN8_STATE && > + hba->capabilities & MASK_AUTO_HIBERN8_SUPPORT) { > + need_upwrite = true; > + if (!down_write_trylock(&hba->query_lock)) > + return -EBUSY; > + } > + hba->pm_op_in_progress = 1; > + > /* > * If we can't transition into any of the low power modes > * just gate the clocks. > @@ -8403,6 +8416,8 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) > } > > hba->pm_op_in_progress = 0; > + if (need_upwrite) > + up_write(&hba->query_lock); > > if (ret) > ufshcd_update_reg_hist(&hba->ufs_stats.suspend_err, (u32)ret); > @@ -8894,6 +8909,7 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq) > mutex_init(&hba->dev_cmd.lock); > > init_rwsem(&hba->clk_scaling_lock); > + init_rwsem(&hba->query_lock); > > ufshcd_init_clk_gating(hba); > > diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h > index 363589c0bd370..6f8e05eaf9661 100644 > --- a/drivers/scsi/ufs/ufshcd.h > +++ b/drivers/scsi/ufs/ufshcd.h > @@ -754,6 +754,7 @@ struct ufs_hba { > bool is_urgent_bkops_lvl_checked; > > struct rw_semaphore clk_scaling_lock; > + struct rw_semaphore query_lock; > unsigned char desc_size[QUERY_DESC_IDN_MAX]; > atomic_t scsi_block_reqs_cnt; > > -- > 2.28.0.618.gf4bc123cb7-goog ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 5/6] scsi: ufs: show ufs part info in error case 2020-09-15 20:45 [PATCH 1/6] scsi: ufs: atomic update for clkgating_enable Jaegeuk Kim ` (2 preceding siblings ...) 2020-09-15 20:45 ` [PATCH 4/6] scsi: ufs: fix LINERESET on hibern8 Jaegeuk Kim @ 2020-09-15 20:45 ` Jaegeuk Kim 2020-09-16 10:34 ` Bean Huo 2020-09-15 20:45 ` [PATCH 6/6] scsi: add more contexts in the ufs tracepoints Jaegeuk Kim 4 siblings, 1 reply; 12+ messages in thread From: Jaegeuk Kim @ 2020-09-15 20:45 UTC (permalink / raw) To: linux-kernel, linux-scsi, kernel-team Cc: Jaegeuk Kim, Alim Akhtar, Avri Altman From: Jaegeuk Kim <jaegeuk@google.com> This patch shows ufs part info in kernel messages for debugging purpose. It's useful when we only have the last kernel message. Cc: Alim Akhtar <alim.akhtar@samsung.com> Cc: Avri Altman <avri.altman@wdc.com> Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> --- drivers/scsi/ufs/ufshcd.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index bdc82cc3824aa..b81c116b976ff 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -500,6 +500,14 @@ static void ufshcd_print_tmrs(struct ufs_hba *hba, unsigned long bitmap) static void ufshcd_print_host_state(struct ufs_hba *hba) { dev_err(hba->dev, "UFS Host state=%d\n", hba->ufshcd_state); + if (hba->sdev_ufs_device) { + dev_err(hba->dev, " vendor = %.8s\n", + hba->sdev_ufs_device->vendor); + dev_err(hba->dev, " model = %.16s\n", + hba->sdev_ufs_device->model); + dev_err(hba->dev, " rev = %.4s\n", + hba->sdev_ufs_device->rev); + } dev_err(hba->dev, "outstanding reqs=0x%lx tasks=0x%lx\n", hba->outstanding_reqs, hba->outstanding_tasks); dev_err(hba->dev, "saved_err=0x%x, saved_uic_err=0x%x\n", -- 2.28.0.618.gf4bc123cb7-goog ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 5/6] scsi: ufs: show ufs part info in error case 2020-09-15 20:45 ` [PATCH 5/6] scsi: ufs: show ufs part info in error case Jaegeuk Kim @ 2020-09-16 10:34 ` Bean Huo 2020-09-16 16:05 ` Jaegeuk Kim 0 siblings, 1 reply; 12+ messages in thread From: Bean Huo @ 2020-09-16 10:34 UTC (permalink / raw) To: Jaegeuk Kim, linux-kernel, linux-scsi, kernel-team, Can Guo Cc: Jaegeuk Kim, Alim Akhtar, Avri Altman On Tue, 2020-09-15 at 13:45 -0700, Jaegeuk Kim wrote: > Cc: Avri Altman <avri.altman@wdc.com> > Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> > --- > drivers/scsi/ufs/ufshcd.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > index bdc82cc3824aa..b81c116b976ff 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -500,6 +500,14 @@ static void ufshcd_print_tmrs(struct ufs_hba > *hba, unsigned long bitmap) > static void ufshcd_print_host_state(struct ufs_hba *hba) > { > dev_err(hba->dev, "UFS Host state=%d\n", hba->ufshcd_state); > + if (hba->sdev_ufs_device) { > + dev_err(hba->dev, " vendor = %.8s\n", > + hba->sdev_ufs_device- > >vendor); > + dev_err(hba->dev, " model = %.16s\n", > + hba->sdev_ufs_device->model); > + dev_err(hba->dev, " rev = %.4s\n", > + hba->sdev_ufs_device->rev); > + } Hi Jaegeuk these prints have been added since this change: commit 3f8af6044713 ("scsi: ufs: Add some debug information to ufshcd_print_host_state()") https://patchwork.kernel.org/patch/11694371/ Thanks, Bean ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 5/6] scsi: ufs: show ufs part info in error case 2020-09-16 10:34 ` Bean Huo @ 2020-09-16 16:05 ` Jaegeuk Kim 2020-09-17 0:54 ` Can Guo 0 siblings, 1 reply; 12+ messages in thread From: Jaegeuk Kim @ 2020-09-16 16:05 UTC (permalink / raw) To: Bean Huo Cc: linux-kernel, linux-scsi, kernel-team, Can Guo, Alim Akhtar, Avri Altman On 09/16, Bean Huo wrote: > On Tue, 2020-09-15 at 13:45 -0700, Jaegeuk Kim wrote: > > Cc: Avri Altman <avri.altman@wdc.com> > > Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> > > --- > > drivers/scsi/ufs/ufshcd.c | 8 ++++++++ > > 1 file changed, 8 insertions(+) > > > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > > index bdc82cc3824aa..b81c116b976ff 100644 > > --- a/drivers/scsi/ufs/ufshcd.c > > +++ b/drivers/scsi/ufs/ufshcd.c > > @@ -500,6 +500,14 @@ static void ufshcd_print_tmrs(struct ufs_hba > > *hba, unsigned long bitmap) > > static void ufshcd_print_host_state(struct ufs_hba *hba) > > { > > dev_err(hba->dev, "UFS Host state=%d\n", hba->ufshcd_state); > > + if (hba->sdev_ufs_device) { > > + dev_err(hba->dev, " vendor = %.8s\n", > > + hba->sdev_ufs_device- > > >vendor); > > + dev_err(hba->dev, " model = %.16s\n", > > + hba->sdev_ufs_device->model); > > + dev_err(hba->dev, " rev = %.4s\n", > > + hba->sdev_ufs_device->rev); > > + } > > Hi Jaegeuk > these prints have been added since this change: > > commit 3f8af6044713 ("scsi: ufs: Add some debug information to > ufshcd_print_host_state()") > > https://patchwork.kernel.org/patch/11694371/ Cool, thank you for pointing this out. BTW, which branch can I see the -next patches? > > Thanks, > Bean ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 5/6] scsi: ufs: show ufs part info in error case 2020-09-16 16:05 ` Jaegeuk Kim @ 2020-09-17 0:54 ` Can Guo 2020-09-18 4:13 ` Jaegeuk Kim 0 siblings, 1 reply; 12+ messages in thread From: Can Guo @ 2020-09-17 0:54 UTC (permalink / raw) To: Jaegeuk Kim Cc: Bean Huo, linux-kernel, linux-scsi, kernel-team, Alim Akhtar, Avri Altman On 2020-09-17 00:05, Jaegeuk Kim wrote: > On 09/16, Bean Huo wrote: >> On Tue, 2020-09-15 at 13:45 -0700, Jaegeuk Kim wrote: >> > Cc: Avri Altman <avri.altman@wdc.com> >> > Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> >> > --- >> > drivers/scsi/ufs/ufshcd.c | 8 ++++++++ >> > 1 file changed, 8 insertions(+) >> > >> > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c >> > index bdc82cc3824aa..b81c116b976ff 100644 >> > --- a/drivers/scsi/ufs/ufshcd.c >> > +++ b/drivers/scsi/ufs/ufshcd.c >> > @@ -500,6 +500,14 @@ static void ufshcd_print_tmrs(struct ufs_hba >> > *hba, unsigned long bitmap) >> > static void ufshcd_print_host_state(struct ufs_hba *hba) >> > { >> > dev_err(hba->dev, "UFS Host state=%d\n", hba->ufshcd_state); >> > + if (hba->sdev_ufs_device) { >> > + dev_err(hba->dev, " vendor = %.8s\n", >> > + hba->sdev_ufs_device- >> > >vendor); >> > + dev_err(hba->dev, " model = %.16s\n", >> > + hba->sdev_ufs_device->model); >> > + dev_err(hba->dev, " rev = %.4s\n", >> > + hba->sdev_ufs_device->rev); >> > + } >> >> Hi Jaegeuk >> these prints have been added since this change: >> >> commit 3f8af6044713 ("scsi: ufs: Add some debug information to >> ufshcd_print_host_state()") >> >> https://patchwork.kernel.org/patch/11694371/ > > Cool, thank you for pointing this out. BTW, which branch can I see the > -next > patches? > Hi Jaegeuk, This patch comes from a series of changes trying to fix and simplify the UFS error handling. You can find the whole series here - they are picked up on scsi-queue-5.10 https://lore.kernel.org/linux-scsi/1596975355-39813-10-git-send-email-cang@codeaurora.org/ Besides, several more fixes for error handling based on above series are https://lore.kernel.org/patchwork/patch/1290405/ & https://lore.kernel.org/linux-scsi/159961731708.5787.8825955850640714260.b4-ty@oracle.com/ I've mainline all above changes to Android12-5.4 and Android11-5.4. Moreover, there are 2 more fixes on the way for error handling, I will push them soon. Thanks, Can Guo. >> >> Thanks, >> Bean ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 5/6] scsi: ufs: show ufs part info in error case 2020-09-17 0:54 ` Can Guo @ 2020-09-18 4:13 ` Jaegeuk Kim 2020-09-22 5:30 ` Can Guo 0 siblings, 1 reply; 12+ messages in thread From: Jaegeuk Kim @ 2020-09-18 4:13 UTC (permalink / raw) To: Can Guo Cc: Bean Huo, linux-kernel, linux-scsi, kernel-team, Alim Akhtar, Avri Altman On 09/17, Can Guo wrote: > On 2020-09-17 00:05, Jaegeuk Kim wrote: > > On 09/16, Bean Huo wrote: > > > On Tue, 2020-09-15 at 13:45 -0700, Jaegeuk Kim wrote: > > > > Cc: Avri Altman <avri.altman@wdc.com> > > > > Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> > > > > --- > > > > drivers/scsi/ufs/ufshcd.c | 8 ++++++++ > > > > 1 file changed, 8 insertions(+) > > > > > > > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > > > > index bdc82cc3824aa..b81c116b976ff 100644 > > > > --- a/drivers/scsi/ufs/ufshcd.c > > > > +++ b/drivers/scsi/ufs/ufshcd.c > > > > @@ -500,6 +500,14 @@ static void ufshcd_print_tmrs(struct ufs_hba > > > > *hba, unsigned long bitmap) > > > > static void ufshcd_print_host_state(struct ufs_hba *hba) > > > > { > > > > dev_err(hba->dev, "UFS Host state=%d\n", hba->ufshcd_state); > > > > + if (hba->sdev_ufs_device) { > > > > + dev_err(hba->dev, " vendor = %.8s\n", > > > > + hba->sdev_ufs_device- > > > > >vendor); > > > > + dev_err(hba->dev, " model = %.16s\n", > > > > + hba->sdev_ufs_device->model); > > > > + dev_err(hba->dev, " rev = %.4s\n", > > > > + hba->sdev_ufs_device->rev); > > > > + } > > > > > > Hi Jaegeuk > > > these prints have been added since this change: > > > > > > commit 3f8af6044713 ("scsi: ufs: Add some debug information to > > > ufshcd_print_host_state()") > > > > > > https://patchwork.kernel.org/patch/11694371/ > > > > Cool, thank you for pointing this out. BTW, which branch can I see the > > -next > > patches? > > > > Hi Jaegeuk, > > This patch comes from a series of changes trying to fix and simplify > the UFS error handling. You can find the whole series here - they are > picked up on scsi-queue-5.10 > > https://lore.kernel.org/linux-scsi/1596975355-39813-10-git-send-email-cang@codeaurora.org/ > > Besides, several more fixes for error handling based on above series are > > https://lore.kernel.org/patchwork/patch/1290405/ > & > https://lore.kernel.org/linux-scsi/159961731708.5787.8825955850640714260.b4-ty@oracle.com/ > > I've mainline all above changes to Android12-5.4 and Android11-5.4. I've seen the patches in Android branches. Thank you for the explanation. > > Moreover, there are 2 more fixes on the way for error handling, I > will push them soon. BTW, could you please take a look at these patches? Thanks, > > Thanks, > > Can Guo. > > > > > > > Thanks, > > > Bean ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 5/6] scsi: ufs: show ufs part info in error case 2020-09-18 4:13 ` Jaegeuk Kim @ 2020-09-22 5:30 ` Can Guo 0 siblings, 0 replies; 12+ messages in thread From: Can Guo @ 2020-09-22 5:30 UTC (permalink / raw) To: Jaegeuk Kim Cc: Bean Huo, linux-kernel, linux-scsi, kernel-team, Alim Akhtar, Avri Altman On 2020-09-18 12:13, Jaegeuk Kim wrote: > On 09/17, Can Guo wrote: >> On 2020-09-17 00:05, Jaegeuk Kim wrote: >> > On 09/16, Bean Huo wrote: >> > > On Tue, 2020-09-15 at 13:45 -0700, Jaegeuk Kim wrote: >> > > > Cc: Avri Altman <avri.altman@wdc.com> >> > > > Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> >> > > > --- >> > > > drivers/scsi/ufs/ufshcd.c | 8 ++++++++ >> > > > 1 file changed, 8 insertions(+) >> > > > >> > > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c >> > > > index bdc82cc3824aa..b81c116b976ff 100644 >> > > > --- a/drivers/scsi/ufs/ufshcd.c >> > > > +++ b/drivers/scsi/ufs/ufshcd.c >> > > > @@ -500,6 +500,14 @@ static void ufshcd_print_tmrs(struct ufs_hba >> > > > *hba, unsigned long bitmap) >> > > > static void ufshcd_print_host_state(struct ufs_hba *hba) >> > > > { >> > > > dev_err(hba->dev, "UFS Host state=%d\n", hba->ufshcd_state); >> > > > + if (hba->sdev_ufs_device) { >> > > > + dev_err(hba->dev, " vendor = %.8s\n", >> > > > + hba->sdev_ufs_device- >> > > > >vendor); >> > > > + dev_err(hba->dev, " model = %.16s\n", >> > > > + hba->sdev_ufs_device->model); >> > > > + dev_err(hba->dev, " rev = %.4s\n", >> > > > + hba->sdev_ufs_device->rev); >> > > > + } >> > > >> > > Hi Jaegeuk >> > > these prints have been added since this change: >> > > >> > > commit 3f8af6044713 ("scsi: ufs: Add some debug information to >> > > ufshcd_print_host_state()") >> > > >> > > https://patchwork.kernel.org/patch/11694371/ >> > >> > Cool, thank you for pointing this out. BTW, which branch can I see the >> > -next >> > patches? >> > >> >> Hi Jaegeuk, >> >> This patch comes from a series of changes trying to fix and simplify >> the UFS error handling. You can find the whole series here - they are >> picked up on scsi-queue-5.10 >> >> https://lore.kernel.org/linux-scsi/1596975355-39813-10-git-send-email-cang@codeaurora.org/ >> >> Besides, several more fixes for error handling based on above series >> are >> >> https://lore.kernel.org/patchwork/patch/1290405/ >> & >> https://lore.kernel.org/linux-scsi/159961731708.5787.8825955850640714260.b4-ty@oracle.com/ >> >> I've mainline all above changes to Android12-5.4 and Android11-5.4. > > I've seen the patches in Android branches. Thank you for the > explanation. > >> >> Moreover, there are 2 more fixes on the way for error handling, I >> will push them soon. > > BTW, could you please take a look at these patches? > > Thanks, > Sure, but since I am not in your cc or to list, so I don't know which patches. Maybe you can add me when you push the next version? Thanks. Regards, Can Guo. >> >> Thanks, >> >> Can Guo. >> >> > > >> > > Thanks, >> > > Bean ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 6/6] scsi: add more contexts in the ufs tracepoints 2020-09-15 20:45 [PATCH 1/6] scsi: ufs: atomic update for clkgating_enable Jaegeuk Kim ` (3 preceding siblings ...) 2020-09-15 20:45 ` [PATCH 5/6] scsi: ufs: show ufs part info in error case Jaegeuk Kim @ 2020-09-15 20:45 ` Jaegeuk Kim 4 siblings, 0 replies; 12+ messages in thread From: Jaegeuk Kim @ 2020-09-15 20:45 UTC (permalink / raw) To: linux-kernel, linux-scsi, kernel-team Cc: Jaegeuk Kim, Alim Akhtar, Avri Altman From: Jaegeuk Kim <jaegeuk@google.com> This adds user-friendly tracepoints with group id. Cc: Alim Akhtar <alim.akhtar@samsung.com> Cc: Avri Altman <avri.altman@wdc.com> Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> --- drivers/scsi/ufs/ufshcd.c | 6 ++++-- include/trace/events/ufs.h | 21 +++++++++++++++++---- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index b81c116b976ff..d70ca62c4c6d0 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -336,7 +336,7 @@ static void ufshcd_add_command_trace(struct ufs_hba *hba, unsigned int tag, const char *str) { sector_t lba = -1; - u8 opcode = 0; + u8 opcode = 0, group_id = 0; u32 intr, doorbell; struct ufshcd_lrb *lrbp = &hba->lrb[tag]; struct scsi_cmnd *cmd = lrbp->cmd; @@ -362,13 +362,15 @@ static void ufshcd_add_command_trace(struct ufs_hba *hba, lba = cmd->request->bio->bi_iter.bi_sector; transfer_len = be32_to_cpu( lrbp->ucd_req_ptr->sc.exp_data_transfer_len); + if (opcode == WRITE_10) + group_id = lrbp->cmd->cmnd[6]; } } intr = ufshcd_readl(hba, REG_INTERRUPT_STATUS); doorbell = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL); trace_ufshcd_command(dev_name(hba->dev), str, tag, - doorbell, transfer_len, intr, lba, opcode); + doorbell, transfer_len, intr, lba, opcode, group_id); } static void ufshcd_print_clk_freqs(struct ufs_hba *hba) diff --git a/include/trace/events/ufs.h b/include/trace/events/ufs.h index 84841b3a7ffd5..50654f3526392 100644 --- a/include/trace/events/ufs.h +++ b/include/trace/events/ufs.h @@ -11,6 +11,15 @@ #include <linux/tracepoint.h> +#define str_opcode(opcode) \ + __print_symbolic(opcode, \ + { WRITE_16, "WRITE_16" }, \ + { WRITE_10, "WRITE_10" }, \ + { READ_16, "READ_16" }, \ + { READ_10, "READ_10" }, \ + { SYNCHRONIZE_CACHE, "SYNC" }, \ + { UNMAP, "UNMAP" }) + #define UFS_LINK_STATES \ EM(UIC_LINK_OFF_STATE) \ EM(UIC_LINK_ACTIVE_STATE) \ @@ -215,9 +224,10 @@ DEFINE_EVENT(ufshcd_template, ufshcd_init, TRACE_EVENT(ufshcd_command, TP_PROTO(const char *dev_name, const char *str, unsigned int tag, u32 doorbell, int transfer_len, u32 intr, u64 lba, - u8 opcode), + u8 opcode, u8 group_id), - TP_ARGS(dev_name, str, tag, doorbell, transfer_len, intr, lba, opcode), + TP_ARGS(dev_name, str, tag, doorbell, transfer_len, + intr, lba, opcode, group_id), TP_STRUCT__entry( __string(dev_name, dev_name) @@ -228,6 +238,7 @@ TRACE_EVENT(ufshcd_command, __field(u32, intr) __field(u64, lba) __field(u8, opcode) + __field(u8, group_id) ), TP_fast_assign( @@ -239,13 +250,15 @@ TRACE_EVENT(ufshcd_command, __entry->intr = intr; __entry->lba = lba; __entry->opcode = opcode; + __entry->group_id = group_id; ), TP_printk( - "%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x", + "%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x (%s), group_id: 0x%x", __get_str(str), __get_str(dev_name), __entry->tag, __entry->doorbell, __entry->transfer_len, - __entry->intr, __entry->lba, (u32)__entry->opcode + __entry->intr, __entry->lba, (u32)__entry->opcode, + str_opcode(__entry->opcode), (u32)__entry->group_id ) ); -- 2.28.0.618.gf4bc123cb7-goog ^ permalink raw reply related [flat|nested] 12+ messages in thread
end of thread, other threads:[~2020-09-22 5:30 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-09-15 20:45 [PATCH 1/6] scsi: ufs: atomic update for clkgating_enable Jaegeuk Kim 2020-09-15 20:45 ` [PATCH 2/6] scsi: ufs: clear UAC for FFU Jaegeuk Kim 2020-09-15 20:45 ` [PATCH 3/6] scsi: ufs: use WQ_HIGHPRI for gating work Jaegeuk Kim 2020-09-15 20:45 ` [PATCH 4/6] scsi: ufs: fix LINERESET on hibern8 Jaegeuk Kim 2020-09-18 4:12 ` Jaegeuk Kim 2020-09-15 20:45 ` [PATCH 5/6] scsi: ufs: show ufs part info in error case Jaegeuk Kim 2020-09-16 10:34 ` Bean Huo 2020-09-16 16:05 ` Jaegeuk Kim 2020-09-17 0:54 ` Can Guo 2020-09-18 4:13 ` Jaegeuk Kim 2020-09-22 5:30 ` Can Guo 2020-09-15 20:45 ` [PATCH 6/6] scsi: add more contexts in the ufs tracepoints Jaegeuk Kim
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).