From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: Stanley Chu <stanley.chu@mediatek.com>,
"Martin K. Petersen" <martin.petersen@oracle.com>
Cc: Can Guo <cang@codeaurora.org>,
asutoshd@codeaurora.org, nguyenb@codeaurora.org,
hongwus@codeaurora.org, ziqichen@codeaurora.org,
rnayak@codeaurora.org, linux-scsi@vger.kernel.org,
kernel-team@android.com, saravanak@google.com,
salyzyn@google.com, Alim Akhtar <alim.akhtar@samsung.com>,
Avri Altman <avri.altman@wdc.com>,
Matthias Brugger <matthias.bgg@gmail.com>,
Bean Huo <beanhuo@micron.com>,
Bart Van Assche <bvanassche@acm.org>,
open list <linux-kernel@vger.kernel.org>,
"moderated list:ARM/Mediatek SoC support"
<linux-arm-kernel@lists.infradead.org>,
"moderated list:ARM/Mediatek SoC support"
<linux-mediatek@lists.infradead.org>
Subject: Re: [PATCH v2 1/2] scsi: ufs: Abort tasks before clear them from doorbell
Date: Wed, 09 Sep 2020 23:18:17 -0700 [thread overview]
Message-ID: <1599718697.3851.3.camel@HansenPartnership.com> (raw)
In-Reply-To: <1599706080.10649.30.camel@mtkswgap22>
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:
- 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 {
next prev parent reply other threads:[~2020-09-10 6:18 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-03 2:24 [PATCH v2 0/2] Add UFS LINERESET handling Can Guo
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 [this message]
2020-09-10 8:18 ` Stanley Chu
2020-09-10 16:09 ` James Bottomley
2020-09-11 2:16 ` Can Guo
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
2020-09-03 2:24 ` [PATCH v2 2/2] scsi: ufs: Handle LINERESET indication in err handler Can Guo
2020-09-09 2:09 ` [PATCH v2 0/2] Add UFS LINERESET handling Martin K. Petersen
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=1599718697.3851.3.camel@HansenPartnership.com \
--to=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=stanley.chu@mediatek.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).