From patchwork Mon Jan 29 04:34:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Asutosh Das (asd)" X-Patchwork-Id: 10189065 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 69C5B60375 for ; Mon, 29 Jan 2018 04:35:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 57AE720407 for ; Mon, 29 Jan 2018 04:35:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 49CA7256E6; Mon, 29 Jan 2018 04:35:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 99AF720407 for ; Mon, 29 Jan 2018 04:35:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751127AbeA2EfX (ORCPT ); Sun, 28 Jan 2018 23:35:23 -0500 Received: from sabertooth01.qualcomm.com ([65.197.215.72]:6497 "EHLO sabertooth01.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750819AbeA2EfW (ORCPT ); Sun, 28 Jan 2018 23:35:22 -0500 X-IronPort-AV: E=Sophos;i="5.46,429,1511856000"; d="scan'208";a="123063060" Received: from unknown (HELO ironmsg01-tai.qualcomm.com) ([10.249.140.6]) by sabertooth01.qualcomm.com with ESMTP; 28 Jan 2018 20:35:21 -0800 X-IronPort-AV: E=McAfee;i="5900,7806,8788"; a="177248" X-MGA-submission: =?us-ascii?q?MDEfI2YJ5dj20PRTPHXInwZdc2wNkvLZJf81x9?= =?us-ascii?q?94BoXghQRuyOzpgxSgOhURBCnTc7RYoAPkMYlHrTJtpKukk91djigMJQ?= =?us-ascii?q?sdVVQQ+g8xRZOv5QgMxC4DB7jJu2jQ+JEJ+OYj9raJmOG+8EAmvPy+0n?= =?us-ascii?q?01?= Received: from asutoshd-linux.qualcomm.com ([10.206.24.163]) by ironmsg01-tai.qualcomm.com with ESMTP; 28 Jan 2018 20:35:01 -0800 Received: by asutoshd-linux.qualcomm.com (Postfix, from userid 92687) id 70B651C63; Mon, 29 Jan 2018 10:05:00 +0530 (IST) From: Asutosh Das To: subhashj@codeaurora.org, cang@codeaurora.org, vivek.gautam@codeaurora.org, vinholikatti@gmail.com, jejb@linux.vnet.ibm.com, martin.petersen@oracle.com Cc: linux-scsi@vger.kernel.org, Maya Erez , Asutosh Das , linux-kernel@vger.kernel.org (open list) Subject: [PATCH 1/1] scsi: ufs: fix exception event handling Date: Mon, 29 Jan 2018 10:04:52 +0530 Message-Id: <1517200492-2941-1-git-send-email-asutoshd@codeaurora.org> X-Mailer: git-send-email 1.9.1 Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Maya Erez The device can set the exception event bit in one of the response UPIU, for example to notify the need for urgent BKOPs operation. In such a case the host driver calls ufshcd_exception_event_handler to handle this notification. When trying to check the exception event status (for finding the cause for the exception event), the device may be busy with additional SCSI commands handling and may not respond within the 100ms timeout. To prevent that, we need to block SCSI commands during handling of exception events and allow retransmissions of the query requests, in case of timeout. Signed-off-by: Subhash Jadavani Signed-off-by: Maya Erez Signed-off-by: Can Guo Signed-off-by: Asutosh Das Reviewed-by: Subhash Jadavani --- drivers/scsi/ufs/ufshcd.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 8af2af3..2dd488f 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -4955,6 +4955,7 @@ static void ufshcd_exception_event_handler(struct work_struct *work) hba = container_of(work, struct ufs_hba, eeh_work); pm_runtime_get_sync(hba->dev); + scsi_block_requests(hba->host); err = ufshcd_get_ee_status(hba, &status); if (err) { dev_err(hba->dev, "%s: failed to get exception status %d\n", @@ -4968,6 +4969,7 @@ static void ufshcd_exception_event_handler(struct work_struct *work) ufshcd_bkops_exception_event_handler(hba); out: + scsi_unblock_requests(hba->host); pm_runtime_put_sync(hba->dev); return; }