From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Can Guo <cang@codeaurora.org>
Cc: linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
kernel-team@android.com, alim.akhtar@samsung.com,
avri.altman@wdc.com, bvanassche@acm.org,
martin.petersen@oracle.com, stanley.chu@mediatek.com
Subject: Re: [PATCH] scsi: ufs: fix livelock of ufshcd_clear_ua_wluns
Date: Mon, 21 Dec 2020 07:14:47 -0800 [thread overview]
Message-ID: <X+C75+WtgktRI9cA@google.com> (raw)
In-Reply-To: <153e563a381c580f76447a12df9f4138@codeaurora.org>
On 12/21, Can Guo wrote:
> On 2020-12-18 11:31, Jaegeuk Kim wrote:
> > When gate_work/ungate_work gets an error during hibern8_enter or exit,
> > ufshcd_err_handler()
> > ufshcd_scsi_block_requests()
> > ufshcd_reset_and_restore()
> > ufshcd_clear_ua_wluns() -> stuck
> > ufshcd_scsi_unblock_requests()
> >
> > In order to avoid it, ufshcd_clear_ua_wluns() can be called per recovery
> > flows
> > such as suspend/resume, link_recovery, and error_handler.
> >
> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> > ---
> > drivers/scsi/ufs/ufshcd.c | 14 +++++++++-----
> > 1 file changed, 9 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> > index e221add25a7e..e711def829cd 100644
> > --- a/drivers/scsi/ufs/ufshcd.c
> > +++ b/drivers/scsi/ufs/ufshcd.c
> > @@ -3963,6 +3963,8 @@ int ufshcd_link_recovery(struct ufs_hba *hba)
> > if (ret)
> > dev_err(hba->dev, "%s: link recovery failed, err %d",
> > __func__, ret);
> > + else
> > + ufshcd_clear_ua_wluns(hba);
> >
> > return ret;
> > }
> > @@ -5968,6 +5970,8 @@ static void ufshcd_err_handler(struct work_struct
> > *work)
> > ufshcd_scsi_unblock_requests(hba);
> > ufshcd_err_handling_unprepare(hba);
> > up(&hba->eh_sem);
> > +
>
> Maybe add a check like if (!err && needs_reset) as error handler
> also handles non-fatal errors which do not require a full reset
> and restore?
I see. Let me add it in v2.
>
> > + ufshcd_clear_ua_wluns(hba);
> > }
> >
> > /**
> > @@ -6908,14 +6912,11 @@ static int
> > ufshcd_host_reset_and_restore(struct ufs_hba *hba)
> > ufshcd_set_clk_freq(hba, true);
> >
> > err = ufshcd_hba_enable(hba);
> > - if (err)
> > - goto out;
> >
> > /* Establish the link again and restore the device */
> > - err = ufshcd_probe_hba(hba, false);
> > if (!err)
> > - ufshcd_clear_ua_wluns(hba);
> > -out:
> > + err = ufshcd_probe_hba(hba, false);
> > +
> > if (err)
> > dev_err(hba->dev, "%s: Host init failed %d\n", __func__, err);
> > ufshcd_update_evt_hist(hba, UFS_EVT_HOST_RESET, (u32)err);
> > @@ -8745,6 +8746,7 @@ static int ufshcd_suspend(struct ufs_hba *hba,
> > enum ufs_pm_op pm_op)
> > ufshcd_resume_clkscaling(hba);
> > hba->clk_gating.is_suspended = false;
> > hba->dev_info.b_rpm_dev_flush_capable = false;
> > + ufshcd_clear_ua_wluns(hba);
> > ufshcd_release(hba);
> > out:
> > if (hba->dev_info.b_rpm_dev_flush_capable) {
> > @@ -8855,6 +8857,8 @@ static int ufshcd_resume(struct ufs_hba *hba,
> > enum ufs_pm_op pm_op)
> > cancel_delayed_work(&hba->rpm_dev_flush_recheck_work);
> > }
> >
> > + ufshcd_clear_ua_wluns(hba);
> > +
> > /* Schedule clock gating in case of no access to UFS device yet */
> > ufshcd_release(hba);
next prev parent reply other threads:[~2020-12-21 15:15 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-18 3:31 [PATCH] scsi: ufs: fix livelock of ufshcd_clear_ua_wluns Jaegeuk Kim
2020-12-20 22:02 ` Avri Altman
2020-12-21 15:23 ` Jaegeuk Kim
2020-12-21 17:00 ` Avri Altman
2020-12-21 17:19 ` Jaegeuk Kim
2020-12-21 18:05 ` Avri Altman
2020-12-21 19:35 ` Jaegeuk Kim
2020-12-21 20:13 ` Avri Altman
2020-12-21 4:25 ` Can Guo
2020-12-21 15:14 ` Jaegeuk Kim [this message]
2020-12-21 15:26 ` [PATCH v2] " Jaegeuk Kim
2021-01-06 3:45 ` Martin K. Petersen
2021-01-06 4:28 ` Jaegeuk Kim
-- strict thread matches above, loose matches on Subject: below --
2021-01-06 4:27 [PATCH] " Jaegeuk Kim
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=X+C75+WtgktRI9cA@google.com \
--to=jaegeuk@kernel.org \
--cc=alim.akhtar@samsung.com \
--cc=avri.altman@wdc.com \
--cc=bvanassche@acm.org \
--cc=cang@codeaurora.org \
--cc=kernel-team@android.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=stanley.chu@mediatek.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.