Received: by 10.223.185.116 with SMTP id b49csp273089wrg; Tue, 20 Feb 2018 21:04:59 -0800 (PST) X-Google-Smtp-Source: AH8x226mTHKDuQ3HrXibDGp1SRVjHgLKFu6DCIlRGtMJV3UBMgz2xNS2knMqOnE3zFhwzWcQZJ9P X-Received: by 2002:a17:902:6805:: with SMTP id h5-v6mr1972646plk.46.1519189499841; Tue, 20 Feb 2018 21:04:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519189499; cv=none; d=google.com; s=arc-20160816; b=x8DY1vj15Y1u6pc4U1VmKwe+S3mcyXUwv9MvsFY4uIlUTOJ39Wmhuw8jQiiVhklvB8 hdf7K5zb+d1bGYI/qqZtZ41NB5Nf0Hn7pKXOvgw4JYV07hTIEN13ywRGPA33Fh/o2GY2 ys6t8Adb5YaFFBqIj3aquqgaQmTLBDYdOfvmjbID2vUytKS323fmamSC0O0EPvZlho+N qoOhFLH3U0FKBKq0Dv+AOK49zOpOkk+/j15G/Db2sNUKvEDWvWf6wTJrtgfbMygGyuaI Z1xoRFT6sTSdIeD6C99wazLDeXk3oHYt0AHsCdXZ02K7vpv9aS8w1gwAfRQq9Fa5rXcg 1V9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=FuRY/RdJJwufr1EG5gRqnsn09DkPeqRUm7BW9bftnls=; b=nDkp4Dt2Uekf5/9QQ80T4PBExTVR0yphvkJLOZePDP5t+y6sEG2m0yohQhVrmpfKtQ I69fISDn6zsy1gWLXdjTrYV1YD0LeWSReIrQtRxDIrZn8TZRlWKbqycH7D6jjqZt/98w lC0NdpYEE4ag3rPuDfcTzpUFem8H2CUvLk0o+iQFydTLIHb8XZ7UseFeCsayzZ8PcQyQ niqF8VGYIzDl3dJ6ka0vEhc5N57oMCf8b4eTN3qQHSvME6tD1Dp1GRITs/Xv47EA9oZV IquZev8u4SWDE1FQ7z6A1uGmNyzcoqp/EaxP6buHJpDNAThLWgFmml69+vvwWIsBySX1 sGMw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d14si1242249pgn.306.2018.02.20.21.04.46; Tue, 20 Feb 2018 21:04:59 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751435AbeBUFDY (ORCPT + 99 others); Wed, 21 Feb 2018 00:03:24 -0500 Received: from alexa-out-tai-01.qualcomm.com ([103.229.16.226]:64506 "EHLO alexa-out-tai-01.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750842AbeBUFDV (ORCPT ); Wed, 21 Feb 2018 00:03:21 -0500 X-IronPort-AV: E=Sophos;i="5.46,542,1511798400"; d="scan'208";a="704" Received: from ironmsg01-tai.qualcomm.com ([10.249.140.6]) by alexa-out-tai-01.qualcomm.com with ESMTP; 21 Feb 2018 12:57:03 +0800 X-IronPort-AV: E=McAfee;i="5900,7806,8810"; a="2400693" Received: from asutoshd-linux.qualcomm.com ([10.206.24.163]) by ironmsg01-tai.qualcomm.com with ESMTP; 20 Feb 2018 20:56:52 -0800 Received: by asutoshd-linux.qualcomm.com (Postfix, from userid 92687) id 377CF2394; Wed, 21 Feb 2018 10:26:49 +0530 (IST) From: Asutosh Das To: subhashj@codeaurora.org, cang@codeaurora.org, vivek.gautam@codeaurora.org, rnayak@codeaurora.org, vinholikatti@gmail.com, jejb@linux.vnet.ibm.com, martin.petersen@oracle.com Cc: linux-scsi@vger.kernel.org, Venkat Gopalakrishnan , Asutosh Das , linux-kernel@vger.kernel.org (open list) Subject: [PATCH 7/9] scsi: ufs: make sure all interrupts are processed Date: Wed, 21 Feb 2018 10:26:38 +0530 Message-Id: <1a8aaa1b5770fac1e2223dd08a1a80c440748317.1519120988.git.asutoshd@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Venkat Gopalakrishnan As multiple requests are submitted to the ufs host controller in parallel there could be instances where the command completion interrupt arrives later for a request that is already processed earlier as the corresponding doorbell was cleared when handling the previous interrupt. Read the interrupt status in a loop after processing the received interrupt to catch such interrupts and handle it. Signed-off-by: Venkat Gopalakrishnan Signed-off-by: Asutosh Das --- drivers/scsi/ufs/ufshcd.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 987b81b..4d4c7d6 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -5406,19 +5406,30 @@ static irqreturn_t ufshcd_intr(int irq, void *__hba) u32 intr_status, enabled_intr_status; irqreturn_t retval = IRQ_NONE; struct ufs_hba *hba = __hba; + int retries = hba->nutrs; spin_lock(hba->host->host_lock); intr_status = ufshcd_readl(hba, REG_INTERRUPT_STATUS); - enabled_intr_status = - intr_status & ufshcd_readl(hba, REG_INTERRUPT_ENABLE); - if (intr_status) - ufshcd_writel(hba, intr_status, REG_INTERRUPT_STATUS); + /* + * There could be max of hba->nutrs reqs in flight and in worst case + * if the reqs get finished 1 by 1 after the interrupt status is + * 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 { + enabled_intr_status = + intr_status & ufshcd_readl(hba, REG_INTERRUPT_ENABLE); + if (intr_status) + ufshcd_writel(hba, intr_status, REG_INTERRUPT_STATUS); + if (enabled_intr_status) { + ufshcd_sl_intr(hba, enabled_intr_status); + retval = IRQ_HANDLED; + } + + intr_status = ufshcd_readl(hba, REG_INTERRUPT_STATUS); + } while (intr_status && --retries); - if (enabled_intr_status) { - ufshcd_sl_intr(hba, enabled_intr_status); - retval = IRQ_HANDLED; - } spin_unlock(hba->host->host_lock); return retval; } -- Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.