All of lore.kernel.org
 help / color / mirror / Atom feed
From: Can Guo <cang@codeaurora.org>
To: Jaegeuk Kim <jaegeuk@kernel.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 v3 1/2] scsi: ufs: fix livelock of ufshcd_clear_ua_wluns
Date: Thu, 07 Jan 2021 15:09:21 +0800	[thread overview]
Message-ID: <c47ca5307e67de386aa3e99256b837e4@codeaurora.org> (raw)
In-Reply-To: <X/awxP3m1VG3b+bX@google.com>

On 2021-01-07 14:57, Jaegeuk Kim wrote:
> On 01/07, Can Guo wrote:
>> On 2021-01-07 05:41, 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.
>> >
>> > Fixes: 1918651f2d7e ("scsi: ufs: Clear UAC for RPMB after ufshcd
>> > resets")
>> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
>> > ---
>> >  drivers/scsi/ufs/ufshcd.c | 15 ++++++++++-----
>> >  1 file changed, 10 insertions(+), 5 deletions(-)
>> >
>> > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
>> > index bedb822a40a3..1678cec08b51 100644
>> > --- a/drivers/scsi/ufs/ufshcd.c
>> > +++ b/drivers/scsi/ufs/ufshcd.c
>> > @@ -3996,6 +3996,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);
>> 
>> Can we put it right after ufshcd_scsi_add_wlus() in ufshcd_add_lus()?
> 
> May I ask the reason? We'll call it after ufshcd_add_lus() later tho.
> 

I think the code will be more readable - we do all the LU related
stuffs in one func, just nit-picking though. I found this because
I am planning to move the devfreq init codes out of ufshcd_add_lus()
due to it is inappropriate to init devfreq in there by its naming,
but it might be a good place for ufshcd_clear_ua_wluns().

Thanks,
Can Guo.

>> 
>> Thanks,
>> Can Guo.
>> 
>> >
>> >  	return ret;
>> >  }
>> > @@ -6003,6 +6005,9 @@ static void ufshcd_err_handler(struct work_struct
>> > *work)
>> >  	ufshcd_scsi_unblock_requests(hba);
>> >  	ufshcd_err_handling_unprepare(hba);
>> >  	up(&hba->eh_sem);
>> > +
>> > +	if (!err && needs_reset)
>> > +		ufshcd_clear_ua_wluns(hba);
>> >  }
>> >
>> >  /**
>> > @@ -6940,14 +6945,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);
>> > @@ -8777,6 +8779,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) {
>> > @@ -8887,6 +8890,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);

  reply	other threads:[~2021-01-07  7:10 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-06 21:41 [PATH v3 0/2] Two UFS bug fixes Jaegeuk Kim
2021-01-06 21:41 ` [PATCH v3 1/2] scsi: ufs: fix livelock of ufshcd_clear_ua_wluns Jaegeuk Kim
2021-01-07  6:10   ` Can Guo
2021-01-07  6:57     ` Jaegeuk Kim
2021-01-07  7:09       ` Can Guo [this message]
2021-01-07  7:40         ` Jaegeuk Kim
2021-01-06 21:41 ` [PATCH v3 2/2] scsi: ufs: handle LINERESET with correct tm_cmd Jaegeuk Kim
2021-01-07  6:07   ` Can Guo
2021-01-07  6:51     ` Jaegeuk Kim
2021-01-07  6:38   ` Can Guo
2021-01-07  6:51     ` Jaegeuk Kim
2021-01-07  7:03       ` Can Guo
2021-01-07  7:20         ` Can Guo
2021-01-07  7:23         ` 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=c47ca5307e67de386aa3e99256b837e4@codeaurora.org \
    --to=cang@codeaurora.org \
    --cc=alim.akhtar@samsung.com \
    --cc=avri.altman@wdc.com \
    --cc=bvanassche@acm.org \
    --cc=jaegeuk@kernel.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.