Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1323087

[PATCH v7 04/14] scsi: ufs: clear outstanding_request bit in case query timeout

From Yaniv Gardi <ygardi@codeaurora.org>
Newsgroups linux.kernel
Subject [PATCH v7 04/14] scsi: ufs: clear outstanding_request bit in case query timeout
Date 2016-02-01 14:10 +0100
Message-ID <qXmoZ-3eN-67@gated-at.bofh.it> (permalink)
References <qXmoV-3eN-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


When sending a query to the device returns with a timeout error,
we clear the corresponding bit in the DOORBELL register but
we don't clear the outstanding_request field as we should.
This patch fixes this bug.

Reviewed-by: Subhash Jadavani <subhashj@codeaurora.org>
Reviewed-by: Gilad Broner <gbroner@codeaurora.org>
Reviewed-by: Dolev Raviv <draviv@codeaurora.org>
Signed-off-by: Yaniv Gardi <ygardi@codeaurora.org>

---
 drivers/scsi/ufs/ufshcd.c | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 8a34f61..4863e93 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -364,6 +364,16 @@ static inline void ufshcd_utrl_clear(struct ufs_hba *hba, u32 pos)
 }
 
 /**
+ * ufshcd_outstanding_req_clear - Clear a bit in outstanding request field
+ * @hba: per adapter instance
+ * @tag: position of the bit to be cleared
+ */
+static inline void ufshcd_outstanding_req_clear(struct ufs_hba *hba, int tag)
+{
+	__clear_bit(tag, &hba->outstanding_reqs);
+}
+
+/**
  * ufshcd_get_lists_status - Check UCRDY, UTRLRDY and UTMRLRDY
  * @reg: Register value of host controller status
  *
@@ -1501,9 +1511,17 @@ static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba,
 
 	if (!time_left) {
 		err = -ETIMEDOUT;
+		dev_dbg(hba->dev, "%s: dev_cmd request timedout, tag %d\n",
+			__func__, lrbp->task_tag);
 		if (!ufshcd_clear_cmd(hba, lrbp->task_tag))
-			/* sucessfully cleared the command, retry if needed */
+			/* successfully cleared the command, retry if needed */
 			err = -EAGAIN;
+		/*
+		 * in case of an error, after clearing the doorbell,
+		 * we also need to clear the outstanding_request
+		 * field in hba
+		 */
+		ufshcd_outstanding_req_clear(hba, lrbp->task_tag);
 	}
 
 	return err;
@@ -3941,7 +3959,7 @@ static int ufshcd_abort(struct scsi_cmnd *cmd)
 	scsi_dma_unmap(cmd);
 
 	spin_lock_irqsave(host->host_lock, flags);
-	__clear_bit(tag, &hba->outstanding_reqs);
+	ufshcd_outstanding_req_clear(hba, tag);
 	hba->lrb[tag].cmd = NULL;
 	spin_unlock_irqrestore(host->host_lock, flags);
 
-- 
1.8.5.2

-- 
QUALCOMM ISRAEL, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v7 00/14] Big fixes, retries, handle a race condition Yaniv Gardi <ygardi@codeaurora.org> - 2016-02-01 14:10 +0100
  [PATCH v7 01/14] scsi: ufs: clear UTRD, UPIU req and rsp before new transfers Yaniv Gardi <ygardi@codeaurora.org> - 2016-02-01 14:10 +0100
  [PATCH v7 03/14] scsi: ufs: verify command tag validity Yaniv Gardi <ygardi@codeaurora.org> - 2016-02-01 14:10 +0100
  [PATCH v7 11/14] scsi: ufs: reduce the interrupts for power mode change requests Yaniv Gardi <ygardi@codeaurora.org> - 2016-02-01 14:10 +0100
  [PATCH v7 09/14] scsi: ufs: fix error recovery after the hibern8 exit failure Yaniv Gardi <ygardi@codeaurora.org> - 2016-02-01 14:10 +0100
  [PATCH v7 05/14] scsi: ufs: increase fDeviceInit query response timeout Yaniv Gardi <ygardi@codeaurora.org> - 2016-02-01 14:10 +0100
  [PATCH v7 10/14] scsi: ufs: retry failed query flag requests Yaniv Gardi <ygardi@codeaurora.org> - 2016-02-01 14:10 +0100
  [PATCH v7 12/14] scsi: ufs: add missing memory barriers Yaniv Gardi <ygardi@codeaurora.org> - 2016-02-01 14:10 +0100
  [PATCH v7 14/14] scsi: ufs: add wrapper for retrying sending query attribute Yaniv Gardi <ygardi@codeaurora.org> - 2016-02-01 14:10 +0100
  [PATCH v7 04/14] scsi: ufs: clear outstanding_request bit in case query timeout Yaniv Gardi <ygardi@codeaurora.org> - 2016-02-01 14:10 +0100
  [PATCH v7 02/14] scsi: ufs: clear fields UTRD, UPIU req and rsp before new transfers Yaniv Gardi <ygardi@codeaurora.org> - 2016-02-01 14:20 +0100
    RE: [PATCH v7 02/14] scsi: ufs: clear fields UTRD, UPIU req and rsp  before new transfers "Winkler, Tomas" <tomas.winkler@intel.com> - 2016-02-02 11:10 +0100

csiph-web