linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Stanley Chu <stanley.chu@mediatek.com>
To: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: "moderated list:ARM/Mediatek SoC support"
	<linux-arm-kernel@lists.infradead.org>,
	rnayak@codeaurora.org, linux-scsi@vger.kernel.org,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	open list <linux-kernel@vger.kernel.org>,
	saravanak@google.com, nguyenb@codeaurora.org,
	ziqichen@codeaurora.org, Avri Altman <avri.altman@wdc.com>,
	Can Guo <cang@codeaurora.org>,
	"moderated list:ARM/Mediatek SoC support"
	<linux-mediatek@lists.infradead.org>,
	salyzyn@google.com, Alim Akhtar <alim.akhtar@samsung.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Bean Huo <beanhuo@micron.com>,
	kernel-team@android.com, Bart Van Assche <bvanassche@acm.org>,
	hongwus@codeaurora.org, asutoshd@codeaurora.org
Subject: Re: [PATCH v2 1/2] scsi: ufs: Abort tasks before clear them from doorbell
Date: Thu, 10 Sep 2020 16:18:00 +0800	[thread overview]
Message-ID: <1599725880.10649.35.camel@mtkswgap22> (raw)
In-Reply-To: <1599718697.3851.3.camel@HansenPartnership.com>

Hi James,

On Wed, 2020-09-09 at 23:18 -0700, James Bottomley wrote:
> On Thu, 2020-09-10 at 10:48 +0800, Stanley Chu wrote:
> > Hi Martin, Can,
> > 
> > On Wed, 2020-09-09 at 22:32 -0400, Martin K. Petersen wrote:
> > > Can and Stanley,
> > > 
> > > > I can't reconcile this hunk:
> > > 
> > > Please provide a resolution for these conflicting commits in fixes
> > > and
> > > queue:
> > > 
> > > 307348f6ab14 scsi: ufs: Abort tasks before clearing them from
> > > doorbell
> > > 
> > > b10178ee7fa8 scsi: ufs: Clean up completed request without
> > > interrupt
> > > notification
> > > 
> > 
> > Can's patch has considered my fix in the new flow.
> > 
> > To be more clear, for the fixing case in my patch,
> > ufshcd_try_to_abort_task() will return 0 (err = 0) and finally the
> > target tag can be completed and cleared by
> > __ufshcd_transfer_req_compl()
> > in Can's new flow.
> > 
> > Thus I think the resolution can just using the code in Can's patch.
> > 
> > Can, please correct me if I was wrong.
> 
> Well, that really doesn't make for an easy merge. The resolution I took
> is below.
> 
> James
> 
> ---
> 
> commit 5399a4aa684d491c35a386effe385c06b41398fa
> Merge: 59958f7a956b 8c6572356646
> Author: James Bottomley <James.Bottomley@HansenPartnership.com>
> Date:   Wed Sep 9 23:12:52 2020 -0700
> 
>     Merge branch 'misc' into for-next
>     
>     Conflicts:
>             drivers/scsi/ufs/ufshcd.c
>             drivers/scsi/ufs/ufshcd.h
> 
> diff --cc drivers/scsi/ufs/ufshcd.c
> index 34e1ab407b05,05716f62febe..49478c8a601f
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@@ -6574,84 -6739,22 +6736,25 @@@ static int ufshcd_abort(struct scsi_cmn
>   	}
>   	hba->req_abort_count++;
>   
>  -	/* Skip task abort in case previous aborts failed and report failure */
>  -	if (lrbp->req_abort_skip) {
>  -		err = -EIO;
>  -		goto out;
>  +	if (!(reg & (1 << tag))) {
>  +		dev_err(hba->dev,
>  +		"%s: cmd was completed, but without a notifying intr, tag = %d",
>  +		__func__, tag);
>  +		goto cleanup;
>   	}
>   
>  -	err = ufshcd_try_to_abort_task(hba, tag);
>  -	if (err)
>  -		goto out;
>  -
>  -	spin_lock_irqsave(host->host_lock, flags);
>  -	__ufshcd_transfer_req_compl(hba, (1UL << tag));
>  -	spin_unlock_irqrestore(host->host_lock, flags);
>  +	/* Skip task abort in case previous aborts failed and report failure */
> - 	if (lrbp->req_abort_skip) {
> ++	if (lrbp->req_abort_skip)
>  +		err = -EIO;
> - 		goto out;
> - 	}
> - 
> - 	for (poll_cnt = 100; poll_cnt; poll_cnt--) {
> - 		err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag,
> - 				UFS_QUERY_TASK, &resp);
> - 		if (!err && resp == UPIU_TASK_MANAGEMENT_FUNC_SUCCEEDED) {
> - 			/* cmd pending in the device */
> - 			dev_err(hba->dev, "%s: cmd pending in the device. tag = %d\n",
> - 				__func__, tag);
> - 			break;
> - 		} else if (!err && resp == UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
> - 			/*
> - 			 * cmd not pending in the device, check if it is
> - 			 * in transition.
> - 			 */
> - 			dev_err(hba->dev, "%s: cmd at tag %d not pending in the device.\n",
> - 				__func__, tag);
> - 			reg = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL);
> - 			if (reg & (1 << tag)) {
> - 				/* sleep for max. 200us to stabilize */
> - 				usleep_range(100, 200);
> - 				continue;
> - 			}
> - 			/* command completed already */
> - 			dev_err(hba->dev, "%s: cmd at tag %d successfully cleared from DB.\n",
> - 				__func__, tag);
> - 			goto cleanup;
> - 		} else {
> - 			dev_err(hba->dev,
> - 				"%s: no response from device. tag = %d, err %d\n",
> - 				__func__, tag, err);
> - 			if (!err)
> - 				err = resp; /* service response error */
> - 			goto out;
> - 		}
> - 	}
> - 
> - 	if (!poll_cnt) {
> - 		err = -EBUSY;
> - 		goto out;
> - 	}
> - 
> - 	err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag,
> - 			UFS_ABORT_TASK, &resp);
> - 	if (err || resp != UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
> - 		if (!err) {
> - 			err = resp; /* service response error */
> - 			dev_err(hba->dev, "%s: issued. tag = %d, err %d\n",
> - 				__func__, tag, err);
> - 		}
> - 		goto out;
> - 	}
> - 
> - 	err = ufshcd_clear_cmd(hba, tag);
> - 	if (err) {
> - 		dev_err(hba->dev, "%s: Failed clearing cmd at tag %d, err %d\n",
> - 			__func__, tag, err);
> - 		goto out;
> - 	}
> ++	else
> ++		err = ufshcd_try_to_abort_task(hba, tag);
>   
>  -out:
> + 	if (!err) {
>  +cleanup:

Yeah, considering Bean Huo's patch "scsi: ufs: No need to send Abort
Task if the task in DB was cleared", "cleanup" label shall be added back
here.

So your resolution looks good to me.

Thanks so much : )

Stanley Chu

> - 	spin_lock_irqsave(host->host_lock, flags);
> - 	__ufshcd_transfer_req_compl(hba, (1UL << tag));
> - 	spin_unlock_irqrestore(host->host_lock, flags);
> - 
> ++		spin_lock_irqsave(host->host_lock, flags);
> ++		__ufshcd_transfer_req_compl(hba, (1UL << tag));
> ++		spin_unlock_irqrestore(host->host_lock, flags);
>  +out:
> - 	if (!err) {
>   		err = SUCCESS;
>   	} else {
>   		dev_err(hba->dev, "%s: failed with err %d\n", __func__, err);
> diff --cc drivers/scsi/ufs/ufshcd.h
> index b5b2761456fb,8011fdc89fb1..6663325ed8a0
> --- a/drivers/scsi/ufs/ufshcd.h
> +++ b/drivers/scsi/ufs/ufshcd.h
> @@@ -531,11 -531,10 +531,16 @@@ enum ufshcd_quirks 
>   	 */
>   	UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR		= 1 << 10,
>   
>  +	/*
>  +	 * This quirk needs to be enabled if the host controller has
>  +	 * auto-hibernate capability but it doesn't work.
>  +	 */
>  +	UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8		= 1 << 11,
> ++
> + 	/*
> + 	 * This quirk needs to disable manual flush for write booster
> + 	 */
>  -	UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL		= 1 << 11,
> ++	UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL		= 1 << 12,
>   };
>   
>   enum ufshcd_caps {

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-09-10  8:20 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1599099873-32579-1-git-send-email-cang@codeaurora.org>
2020-09-03  2:24 ` [PATCH v2 1/2] scsi: ufs: Abort tasks before clear them from doorbell Can Guo
2020-09-09  5:05   ` James Bottomley
2020-09-10  2:32     ` Martin K. Petersen
2020-09-10  2:48       ` Stanley Chu
2020-09-10  6:18         ` James Bottomley
2020-09-10  8:18           ` Stanley Chu [this message]
2020-09-10 16:09             ` James Bottomley
2020-09-11  2:16               ` Can Guo
     [not found]               ` <010101747af387e9-f68ac6fa-1bc6-461d-92ec-dc0ee4486728-000000@us-west-2.amazonses.com>
2020-09-11  9:09                 ` Bean Huo
2020-09-14  5:00                   ` Can Guo
2020-09-15  3:14                   ` Can Guo
2020-09-15 20:21                     ` Martin K. Petersen
2020-09-16  6:34                       ` Can Guo

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=1599725880.10649.35.camel@mtkswgap22 \
    --to=stanley.chu@mediatek.com \
    --cc=James.Bottomley@HansenPartnership.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=hongwus@codeaurora.org \
    --cc=kernel-team@android.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=matthias.bgg@gmail.com \
    --cc=nguyenb@codeaurora.org \
    --cc=rnayak@codeaurora.org \
    --cc=salyzyn@google.com \
    --cc=saravanak@google.com \
    --cc=ziqichen@codeaurora.org \
    /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).