From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756873AbbJVHSB (ORCPT ); Thu, 22 Oct 2015 03:18:01 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:38046 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751544AbbJVHR6 (ORCPT ); Thu, 22 Oct 2015 03:17:58 -0400 Message-ID: In-Reply-To: <1441188795-4600-5-git-send-email-ygardi@codeaurora.org> References: <1441188795-4600-1-git-send-email-ygardi@codeaurora.org> <1441188795-4600-5-git-send-email-ygardi@codeaurora.org> Date: Thu, 22 Oct 2015 07:17:57 -0000 Subject: Re: [PATCH v3 04/15] scsi: ufs: clear outstanding_request bit in case query timeout From: subhashj@codeaurora.org To: "Yaniv Gardi" Cc: robherring2@gmail.com, james.bottomley@hansenpartnership.com, pebolle@tiscali.nl, hch@infradead.org, linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org, linux-arm-msm@vger.kernel.org, santoshsy@gmail.com, linux-scsi-owner@vger.kernel.org, subhashj@codeaurora.org, ygardi@codeaurora.org, gbroner@codeaurora.org, draviv@codeaurora.org, "Vinayak Holikatti" , "James E.J. Bottomley" User-Agent: SquirrelMail/1.4.22-4.el6 MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7BIT X-Priority: 3 (Normal) Importance: Normal Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Looks good to me. Reviewed-by: Subhash Jadavani > 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. > > Signed-off-by: Yaniv Gardi > > --- > 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 8860a57..e0b8755 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 > * > @@ -1502,9 +1512,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; > @@ -3942,7 +3960,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 > -- > To unsubscribe from this list: send the line "unsubscribe linux-scsi" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >