| From 62dc4dbc2af33972201da76a84cd76d857639fdb Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 11 Aug 2020 16:39:36 +0300 |
| Subject: scsi: ufs: Improve interrupt handling for shared interrupts |
| |
| From: Adrian Hunter <adrian.hunter@intel.com> |
| |
| [ Upstream commit 127d5f7c4b653b8be5eb3b2c7bbe13728f9003ff ] |
| |
| For shared interrupts, the interrupt status might be zero, so check that |
| first. |
| |
| Link: https://lore.kernel.org/r/20200811133936.19171-2-adrian.hunter@intel.com |
| Reviewed-by: Avri Altman <avri.altman@wdc.com> |
| Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/scsi/ufs/ufshcd.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c |
| index 9916c574e8b80..ad5f2e2b4cbaf 100644 |
| --- a/drivers/scsi/ufs/ufshcd.c |
| +++ b/drivers/scsi/ufs/ufshcd.c |
| @@ -4400,7 +4400,7 @@ static void ufshcd_sl_intr(struct ufs_hba *hba, u32 intr_status) |
| */ |
| static irqreturn_t ufshcd_intr(int irq, void *__hba) |
| { |
| - u32 intr_status, enabled_intr_status; |
| + u32 intr_status, enabled_intr_status = 0; |
| irqreturn_t retval = IRQ_NONE; |
| struct ufs_hba *hba = __hba; |
| int retries = hba->nutrs; |
| @@ -4414,7 +4414,7 @@ static irqreturn_t ufshcd_intr(int irq, void *__hba) |
| * read, make sure we handle them by checking the interrupt status |
| * again in a loop until we process all of the reqs before returning. |
| */ |
| - do { |
| + while (intr_status && retries--) { |
| enabled_intr_status = |
| intr_status & ufshcd_readl(hba, REG_INTERRUPT_ENABLE); |
| if (intr_status) |
| @@ -4425,7 +4425,7 @@ static irqreturn_t ufshcd_intr(int irq, void *__hba) |
| } |
| |
| intr_status = ufshcd_readl(hba, REG_INTERRUPT_STATUS); |
| - } while (intr_status && --retries); |
| + } |
| |
| spin_unlock(hba->host->host_lock); |
| return retval; |
| -- |
| 2.25.1 |
| |