From patchwork Wed Nov 10 00:44:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bart Van Assche X-Patchwork-Id: 518758 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 03A9CC433EF for ; Wed, 10 Nov 2021 00:45:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E169461181 for ; Wed, 10 Nov 2021 00:45:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231343AbhKJAry (ORCPT ); Tue, 9 Nov 2021 19:47:54 -0500 Received: from mail-pf1-f174.google.com ([209.85.210.174]:37576 "EHLO mail-pf1-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230392AbhKJArx (ORCPT ); Tue, 9 Nov 2021 19:47:53 -0500 Received: by mail-pf1-f174.google.com with SMTP id y5so1047160pfb.4 for ; Tue, 09 Nov 2021 16:45:06 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wR7KU/viebny4nR2Y59jGd7p6vnccW0oeSt9hsxVM+I=; b=cPPWtr6++7XFnpmB5ILGt19UZ+Kg+n1URYGJRPns7H+hPd9XHpztwth91NOu/iX3X3 FYz1TaCmdqLMBprcyztdQPVGQH9iM+M6K2WJ1IS4JZQYflhditCcjEpq/TB1DAdOGL34 NXzQ5OQGi4pJIWVSN0bhbRwNopzMgwjHy8+O8u9Iwg7Fh7M+FSufzdg1DP4B4wZDk5S4 lWIXwUFzwR4dUzIRpoC+gcvhdI/HTB6Aj1UkvMIVO+pzRnqyXYeDUvzrfYziz09wxhQy RfP2Eakl/88g9CNQGF9pG8LmVjW/trFp+Mf89Iac06Pi9OYy+nhJOryGCA7BFS8QuL4G qcNg== X-Gm-Message-State: AOAM531lNfXjJHGLwFM2/XVmQrlu4B8Ta9a7V+6O28V0g+uGu+Ar2SHS coWFReSptHmIoD+E9eV4+qE= X-Google-Smtp-Source: ABdhPJxyugkn8DUWE+KCwE68ZOdsTZTP8tVL5VauFsCOXxNWQnmMX1z3LJZP7N1JCJ3c8ifI5geAkA== X-Received: by 2002:a63:874a:: with SMTP id i71mr9227320pge.81.1636505106278; Tue, 09 Nov 2021 16:45:06 -0800 (PST) Received: from bvanassche-linux.mtv.corp.google.com ([2620:15c:211:201:a582:6939:6a97:9cbf]) by smtp.gmail.com with ESMTPSA id l17sm21868826pfc.94.2021.11.09.16.45.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Nov 2021 16:45:05 -0800 (PST) From: Bart Van Assche To: "Martin K . Petersen" Cc: linux-scsi@vger.kernel.org, Jaegeuk Kim , Adrian Hunter , Bart Van Assche , kernel test robot , "James E.J. Bottomley" , Bean Huo , Can Guo , Stanley Chu , Asutosh Das Subject: [PATCH 02/11] scsi: ufs: Remove is_rpmb_wlun() Date: Tue, 9 Nov 2021 16:44:31 -0800 Message-Id: <20211110004440.3389311-3-bvanassche@acm.org> X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog In-Reply-To: <20211110004440.3389311-1-bvanassche@acm.org> References: <20211110004440.3389311-1-bvanassche@acm.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org Commit edc0596cc04b ("scsi: ufs: core: Stop clearing UNIT ATTENTIONS") removed all callers of is_rpmb_wlun(). Hence also remove the function itself. Reported-by: kernel test robot Signed-off-by: Bart Van Assche --- drivers/scsi/ufs/ufshcd.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index dac8fbf221f7..d18685d080d7 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -2650,11 +2650,6 @@ static inline u16 ufshcd_upiu_wlun_to_scsi_wlun(u8 upiu_wlun_id) return (upiu_wlun_id & ~UFS_UPIU_WLUN_ID) | SCSI_W_LUN_BASE; } -static inline bool is_rpmb_wlun(struct scsi_device *sdev) -{ - return sdev->lun == ufshcd_upiu_wlun_to_scsi_wlun(UFS_UPIU_RPMB_WLUN); -} - static inline bool is_device_wlun(struct scsi_device *sdev) { return sdev->lun == From patchwork Wed Nov 10 00:44:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bart Van Assche X-Patchwork-Id: 518757 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CAD12C433F5 for ; Wed, 10 Nov 2021 00:45:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B2707611AD for ; Wed, 10 Nov 2021 00:45:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231461AbhKJAsJ (ORCPT ); Tue, 9 Nov 2021 19:48:09 -0500 Received: from mail-pg1-f173.google.com ([209.85.215.173]:44023 "EHLO mail-pg1-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231357AbhKJAsH (ORCPT ); Tue, 9 Nov 2021 19:48:07 -0500 Received: by mail-pg1-f173.google.com with SMTP id b4so621528pgh.10 for ; Tue, 09 Nov 2021 16:45:20 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rzKl88Ka49hata7BwU6FTR9dOdQKrE4RB1z4nPi+Pbc=; b=4t/tLIuw/JO7Sw2yroPER1Rr7ngQOX6X0y9xjSCtgGtoFkQ6xYmtfW/K5U3/kdiso/ IrYdZMrTAW3t68mxn9w7JU6aTD8vIhz4ysGgjVKZUldd5Ziprpx9gOCUjMydyYG4z9+3 WRkc0d7M70YpDcQx75z1EClra1kiFK9hWILf/dLKsiR54AbzyIvcPCwC13fbXCslxgAa 60s2Ery6kIpPT7slk+NITPIzt8eMen6w0KuhZW5hjjOXgI0HNlJYqWpEj/OamUHncK8p M4oFGddCnTmUAxIxBxZavIVxGalZlZKTXbsMm3M7BeYF1MNIqMbSiLw8KizhvPR2DnX0 NG5A== X-Gm-Message-State: AOAM532Zrk79JEFwybsGdlgKg9fiyzUDQJ6oQqxb+i7Md6V0wy5YWJYc Km4+9tKSF79rutjjqy6axag= X-Google-Smtp-Source: ABdhPJxzM7njQCOa9pK4QLehOZKgin3NdTP4ZzNkZGPeyjzg3acOJDvFFyBXhPM3gFLn2ZnGsQnmtg== X-Received: by 2002:a63:e214:: with SMTP id q20mr9248959pgh.442.1636505120506; Tue, 09 Nov 2021 16:45:20 -0800 (PST) Received: from bvanassche-linux.mtv.corp.google.com ([2620:15c:211:201:a582:6939:6a97:9cbf]) by smtp.gmail.com with ESMTPSA id l17sm21868826pfc.94.2021.11.09.16.45.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Nov 2021 16:45:20 -0800 (PST) From: Bart Van Assche To: "Martin K . Petersen" Cc: linux-scsi@vger.kernel.org, Jaegeuk Kim , Adrian Hunter , Bart Van Assche , "James E.J. Bottomley" , Bean Huo , Can Guo , Stanley Chu , Asutosh Das Subject: [PATCH 04/11] scsi: ufs: Remove dead code Date: Tue, 9 Nov 2021 16:44:33 -0800 Message-Id: <20211110004440.3389311-5-bvanassche@acm.org> X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog In-Reply-To: <20211110004440.3389311-1-bvanassche@acm.org> References: <20211110004440.3389311-1-bvanassche@acm.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org Commit 7252a3603015 ("scsi: ufs: Avoid busy-waiting by eliminating tag conflicts") guarantees that 'tag' is not in use by any SCSI command. Remove the check that returns early if a conflict occurs. Signed-off-by: Bart Van Assche --- drivers/scsi/ufs/ufshcd.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index dff76b1a0d5d..312e8a5b7733 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -6724,11 +6724,6 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba, tag = req->tag; WARN_ONCE(tag < 0, "Invalid tag %d\n", tag); - if (unlikely(test_bit(tag, &hba->outstanding_reqs))) { - err = -EBUSY; - goto out; - } - lrbp = &hba->lrb[tag]; WARN_ON(lrbp->cmd); lrbp->cmd = NULL; @@ -6796,7 +6791,6 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba, ufshcd_add_query_upiu_trace(hba, err ? UFS_QUERY_ERR : UFS_QUERY_COMP, (struct utp_upiu_req *)lrbp->ucd_rsp_ptr); -out: blk_put_request(req); out_unlock: up_read(&hba->clk_scaling_lock); From patchwork Wed Nov 10 00:44:35 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bart Van Assche X-Patchwork-Id: 518756 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F1AFCC433F5 for ; Wed, 10 Nov 2021 00:45:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DA3AB61181 for ; Wed, 10 Nov 2021 00:45:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231383AbhKJAsO (ORCPT ); Tue, 9 Nov 2021 19:48:14 -0500 Received: from mail-pg1-f179.google.com ([209.85.215.179]:35405 "EHLO mail-pg1-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231363AbhKJAsO (ORCPT ); Tue, 9 Nov 2021 19:48:14 -0500 Received: by mail-pg1-f179.google.com with SMTP id p17so652198pgj.2 for ; Tue, 09 Nov 2021 16:45:27 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cQqliRW2U5s6ay6ypy18/ZV7ufFIxagKVNHCjyhE7JY=; b=3Phhs6kNPAk+9jPaaA9jYXTV08ZoXGzqg68nwWEDc6+cFGy4rPB5wt6EtWG+ln4Dy7 JhP5YeKKJH+elQHwMORIfv5lDyOwjBgOk8w/0m0sy+oFB8AXpR25+aZwoly5/oYSybQD NvTOQQmxhHtVEqObay4V859cYsZQLra+Eg05HVihE4ndWzvmGgwpLG7y0NMBI2bLjoYD +8D3P40YYLCcU/+wCgHorfxg2UBJiIJqdaraGK4TSWspHmRsC1o2Wey3o/2ccRaXZ5yW hBwZfZXsUXaFwf+9PVjZQ5Lcv37g19aDQYk1+Nf/DDUzD+qoaTVV8W2BZWfmGjVS/A24 C6ag== X-Gm-Message-State: AOAM531FHZ4BvrOyejEbXehkEpGUFiRij0mYbh+kLATD30D5SsVsc8ue ndpYRFRA09GY0U+Boa4dsLo= X-Google-Smtp-Source: ABdhPJxIBX5KouKIsxdNuQHr+Qz7JRSez0tP7HJ81l+EH7Wfr9oeTGCEMPoddRyvSASz54SpdTMmZw== X-Received: by 2002:a63:4610:: with SMTP id t16mr4082126pga.224.1636505127154; Tue, 09 Nov 2021 16:45:27 -0800 (PST) Received: from bvanassche-linux.mtv.corp.google.com ([2620:15c:211:201:a582:6939:6a97:9cbf]) by smtp.gmail.com with ESMTPSA id l17sm21868826pfc.94.2021.11.09.16.45.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Nov 2021 16:45:26 -0800 (PST) From: Bart Van Assche To: "Martin K . Petersen" Cc: linux-scsi@vger.kernel.org, Jaegeuk Kim , Adrian Hunter , Bart Van Assche , "James E.J. Bottomley" , Bean Huo , Can Guo , Stanley Chu , Asutosh Das Subject: [PATCH 06/11] scsi: ufs: Rework ufshcd_change_queue_depth() Date: Tue, 9 Nov 2021 16:44:35 -0800 Message-Id: <20211110004440.3389311-7-bvanassche@acm.org> X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog In-Reply-To: <20211110004440.3389311-1-bvanassche@acm.org> References: <20211110004440.3389311-1-bvanassche@acm.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org Prepare for making sdev->host->can_queue less than hba->nutrs. This patch does not change any functionality. Signed-off-by: Bart Van Assche --- drivers/scsi/ufs/ufshcd.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 312e8a5b7733..8400d8e9a6f7 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -4955,11 +4955,7 @@ static int ufshcd_slave_alloc(struct scsi_device *sdev) */ static int ufshcd_change_queue_depth(struct scsi_device *sdev, int depth) { - struct ufs_hba *hba = shost_priv(sdev->host); - - if (depth > hba->nutrs) - depth = hba->nutrs; - return scsi_change_queue_depth(sdev, depth); + return scsi_change_queue_depth(sdev, min(depth, sdev->host->can_queue)); } static void ufshcd_hpb_destroy(struct ufs_hba *hba, struct scsi_device *sdev) From patchwork Wed Nov 10 00:44:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bart Van Assche X-Patchwork-Id: 518755 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B9C6EC433EF for ; Wed, 10 Nov 2021 00:45:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A1379611CA for ; Wed, 10 Nov 2021 00:45:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231389AbhKJAsZ (ORCPT ); Tue, 9 Nov 2021 19:48:25 -0500 Received: from mail-pj1-f52.google.com ([209.85.216.52]:46796 "EHLO mail-pj1-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230392AbhKJAsY (ORCPT ); Tue, 9 Nov 2021 19:48:24 -0500 Received: by mail-pj1-f52.google.com with SMTP id f20-20020a17090a639400b001a772f524d1so127348pjj.5 for ; Tue, 09 Nov 2021 16:45:38 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gPm9jvo2dQ97h1ECFHAf5oFx5mwjgZ3vxFaLaNSKiNY=; b=t1ImWJfcs8x2JY9OYuHEkoS3pgIQm/OsIh2xSNJ5hQplunlnuCYbLLEGS2IOml38IF 4CGKSxyWhF9NBY0wWWyYAjxkO+2Gw+FcelvylqxcsRiaiwd7KSYqB7+Gu3dnEu8AbnrP 2H0P1Zw+m3pt1bBnAM13PW9t8ka2Bv9pxQZBhKYl6u2SUsFP+snHv+5VIaQDyGg0RUR+ kPmnjO4hixtNG04+TkvmqLit+rt3J7ZrnXzPpxFO9nLnRvQgX/dZOGkEPKqjxs0cveaE 6VpXQlT6sjN7UAXFZSEewUzy7Df+zlA3E9tYJumv7+YiOGHAPuTK/4LFt4IGAlTRDvfl D0jw== X-Gm-Message-State: AOAM531lc3DSp1Q2V8lMHlYxGoyJcyrp4XAjrAi2TFc5ppurWWJZFlQs HjGff0A0UpDB8DLenZJ4/Mc= X-Google-Smtp-Source: ABdhPJxNHq3fhlpXdRt7S/MGSFFnRgbHgDFou5jiHt9dE3OV2KSLmFm8cf7KL3MEGOklGDxQS/qehQ== X-Received: by 2002:a17:90b:4a50:: with SMTP id lb16mr12208949pjb.147.1636505138007; Tue, 09 Nov 2021 16:45:38 -0800 (PST) Received: from bvanassche-linux.mtv.corp.google.com ([2620:15c:211:201:a582:6939:6a97:9cbf]) by smtp.gmail.com with ESMTPSA id l17sm21868826pfc.94.2021.11.09.16.45.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Nov 2021 16:45:37 -0800 (PST) From: Bart Van Assche To: "Martin K . Petersen" Cc: linux-scsi@vger.kernel.org, Jaegeuk Kim , Adrian Hunter , Bart Van Assche , "James E.J. Bottomley" , Bean Huo , Can Guo , Stanley Chu , Asutosh Das , James Bottomley , Santosh Yaraganavi , Arnd Bergmann , Vishak G Subject: [PATCH 08/11] scsi: ufs: Improve SCSI abort handling further Date: Tue, 9 Nov 2021 16:44:37 -0800 Message-Id: <20211110004440.3389311-9-bvanassche@acm.org> X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog In-Reply-To: <20211110004440.3389311-1-bvanassche@acm.org> References: <20211110004440.3389311-1-bvanassche@acm.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org Make sure that aborted commands are completed once by clearing the corresponding tag bit from hba->outstanding_reqs. This patch is a follow-up for commit cd892096c940 ("scsi: ufs: core: Improve SCSI abort handling"). Fixes: 7a3e97b0dc4b ("[SCSI] ufshcd: UFS Host controller driver") Signed-off-by: Bart Van Assche --- drivers/scsi/ufs/ufshcd.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 8f5640647054..1e15ed1f639f 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -7090,6 +7090,15 @@ static int ufshcd_abort(struct scsi_cmnd *cmd) goto release; } + /* + * ufshcd_try_to_abort_task() cleared the 'tag' bit in the doorbell + * register. Clear the corresponding bit from outstanding_reqs to + * prevent early completion. + */ + spin_lock_irqsave(&hba->outstanding_lock, flags); + __clear_bit(tag, &hba->outstanding_reqs); + spin_unlock_irqrestore(&hba->outstanding_lock, flags); + lrbp->cmd = NULL; err = SUCCESS; From patchwork Wed Nov 10 00:44:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bart Van Assche X-Patchwork-Id: 518754 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0EB31C433F5 for ; Wed, 10 Nov 2021 00:45:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E88A761186 for ; Wed, 10 Nov 2021 00:45:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231389AbhKJAsj (ORCPT ); Tue, 9 Nov 2021 19:48:39 -0500 Received: from mail-pj1-f54.google.com ([209.85.216.54]:39748 "EHLO mail-pj1-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230392AbhKJAsj (ORCPT ); Tue, 9 Nov 2021 19:48:39 -0500 Received: by mail-pj1-f54.google.com with SMTP id y14-20020a17090a2b4e00b001a5824f4918so303746pjc.4 for ; Tue, 09 Nov 2021 16:45:52 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vcopxjIJAsx605lA2hzu0wTuKoBsdX+3qInjC3qG5IQ=; b=GVbf/faA48w59XKYQLaaJeZSJxkkCwnX+uLO2x+haIzYeUVK0KMwQBAP/sQVoxsd4I u2OsZyi5oNp/ntxv09PHbQcDvLcnjVNObOI6rgHa4x2dZ/SJ66+MZN6qOd0AxlNXSA5e tKtSc8jP7a3q+uied2ImSyyketpXD1b+QiKVXp0QlryYEe8ZzJRLJf+/5zrwDoKdceld 4VtG2tEDJ3F16mQrChXmFZXKl8pmHHFJ6RdIDgehxDV5QlmwdQH8dhxpS3n/fAw9B6J0 MvYTnUzTBieBY7R/epMY7u1F2yIMHjXkxbEds0K6ugOrw3urY7oIOI9vtoT8wQGG8NTV Y/PQ== X-Gm-Message-State: AOAM530HVTrlSCPAz1n+T0aJv3zIEaWcgWVAa6YQKzvtjGPJRciVXV8K 757ToK9JkzlIdhfiWjMZccoUB2+nFCRlZA== X-Google-Smtp-Source: ABdhPJwgz8vrEcZ53li7dre7TClEp1PgD05Ims/ZkjG17jTB72DEVxdHzXoueRVED/ltjDF7BrXlPQ== X-Received: by 2002:a17:90a:bf0b:: with SMTP id c11mr12122825pjs.208.1636505152174; Tue, 09 Nov 2021 16:45:52 -0800 (PST) Received: from bvanassche-linux.mtv.corp.google.com ([2620:15c:211:201:a582:6939:6a97:9cbf]) by smtp.gmail.com with ESMTPSA id l17sm21868826pfc.94.2021.11.09.16.45.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Nov 2021 16:45:51 -0800 (PST) From: Bart Van Assche To: "Martin K . Petersen" Cc: linux-scsi@vger.kernel.org, Jaegeuk Kim , Adrian Hunter , Bart Van Assche , "James E.J. Bottomley" , Bean Huo , Can Guo , Stanley Chu , Avri Altman , Asutosh Das , Keoseong Park Subject: [PATCH 10/11] scsi: ufs: Optimize the command queueing code Date: Tue, 9 Nov 2021 16:44:39 -0800 Message-Id: <20211110004440.3389311-11-bvanassche@acm.org> X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog In-Reply-To: <20211110004440.3389311-1-bvanassche@acm.org> References: <20211110004440.3389311-1-bvanassche@acm.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org Remove the clock scaling lock from ufshcd_queuecommand() since it is a performance bottleneck. As requested by Asutosh Das, change the behavior of ufshcd_clock_scaling_prepare() from waiting until all pending commands have finished into quiescing request queues. Insert a rcu_read_lock() / rcu_read_unlock() pair in ufshcd_queuecommand() and also in __ufshcd_issue_tm_cmd(). Use synchronize_rcu_expedited() to wait for ongoing command and TMF queueing. Signed-off-by: Bart Van Assche --- drivers/scsi/ufs/ufshcd.c | 121 +++++++++++++------------------------- drivers/scsi/ufs/ufshcd.h | 1 + 2 files changed, 42 insertions(+), 80 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 13848e93cda8..36df89e8a575 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -1069,65 +1069,6 @@ static bool ufshcd_is_devfreq_scaling_required(struct ufs_hba *hba, return false; } -static int ufshcd_wait_for_doorbell_clr(struct ufs_hba *hba, - u64 wait_timeout_us) -{ - unsigned long flags; - int ret = 0; - u32 tm_doorbell; - u32 tr_doorbell; - bool timeout = false, do_last_check = false; - ktime_t start; - - ufshcd_hold(hba, false); - spin_lock_irqsave(hba->host->host_lock, flags); - /* - * Wait for all the outstanding tasks/transfer requests. - * Verify by checking the doorbell registers are clear. - */ - start = ktime_get(); - do { - if (hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL) { - ret = -EBUSY; - goto out; - } - - tm_doorbell = ufshcd_readl(hba, REG_UTP_TASK_REQ_DOOR_BELL); - tr_doorbell = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL); - if (!tm_doorbell && !tr_doorbell) { - timeout = false; - break; - } else if (do_last_check) { - break; - } - - spin_unlock_irqrestore(hba->host->host_lock, flags); - schedule(); - if (ktime_to_us(ktime_sub(ktime_get(), start)) > - wait_timeout_us) { - timeout = true; - /* - * We might have scheduled out for long time so make - * sure to check if doorbells are cleared by this time - * or not. - */ - do_last_check = true; - } - spin_lock_irqsave(hba->host->host_lock, flags); - } while (tm_doorbell || tr_doorbell); - - if (timeout) { - dev_err(hba->dev, - "%s: timedout waiting for doorbell to clear (tm=0x%x, tr=0x%x)\n", - __func__, tm_doorbell, tr_doorbell); - ret = -EBUSY; - } -out: - spin_unlock_irqrestore(hba->host->host_lock, flags); - ufshcd_release(hba); - return ret; -} - /** * ufshcd_scale_gear - scale up/down UFS gear * @hba: per adapter instance @@ -1175,37 +1116,51 @@ static int ufshcd_scale_gear(struct ufs_hba *hba, bool scale_up) static int ufshcd_clock_scaling_prepare(struct ufs_hba *hba) { - #define DOORBELL_CLR_TOUT_US (1000 * 1000) /* 1 sec */ - int ret = 0; + struct scsi_device *sdev; + /* - * make sure that there are no outstanding requests when - * clock scaling is in progress + * Make sure that no commands are being queued while clock scaling + * is in progress. + * + * Since ufshcd_exec_dev_cmd() and ufshcd_issue_devman_upiu_cmd() lock + * the clk_scaling_lock before calling blk_get_request(), lock + * clk_scaling_lock before freezing the request queues to prevent lock + * inversion. */ - ufshcd_scsi_block_requests(hba); down_write(&hba->clk_scaling_lock); - - if (!hba->clk_scaling.is_allowed || - ufshcd_wait_for_doorbell_clr(hba, DOORBELL_CLR_TOUT_US)) { - ret = -EBUSY; + if (!hba->clk_scaling.is_allowed) { up_write(&hba->clk_scaling_lock); - ufshcd_scsi_unblock_requests(hba); - goto out; + return -EBUSY; } - + blk_mq_quiesce_queue_nowait(hba->tmf_queue); + blk_mq_quiesce_queue_nowait(hba->cmd_queue); + shost_for_each_device(sdev, hba->host) + blk_mq_quiesce_queue_nowait(sdev->request_queue); + /* + * Calling synchronize_rcu_expedited() reduces the time required to + * quiesce request queues from milliseconds to microseconds. + * + * See also the rcu_read_lock() and rcu_read_unlock() calls in + * ufshcd_queuecommand() and also in __ufshcd_issue_tm_cmd(). + */ + synchronize_rcu_expedited(); /* let's not get into low power until clock scaling is completed */ ufshcd_hold(hba, false); - -out: - return ret; + return 0; } static void ufshcd_clock_scaling_unprepare(struct ufs_hba *hba, bool writelock) { + struct scsi_device *sdev; + + shost_for_each_device(sdev, hba->host) + blk_mq_unquiesce_queue(sdev->request_queue); + blk_mq_unquiesce_queue(hba->cmd_queue); + blk_mq_unquiesce_queue(hba->tmf_queue); if (writelock) up_write(&hba->clk_scaling_lock); else up_read(&hba->clk_scaling_lock); - ufshcd_scsi_unblock_requests(hba); ufshcd_release(hba); } @@ -2698,8 +2653,11 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) WARN_ONCE(tag < 0, "Invalid tag %d\n", tag); - if (!down_read_trylock(&hba->clk_scaling_lock)) - return SCSI_MLQUEUE_HOST_BUSY; + /* + * Allows ufshcd_clock_scaling_prepare() and also the UFS error handler + * to wait for prior ufshcd_queuecommand() calls. + */ + rcu_read_lock(); switch (hba->ufshcd_state) { case UFSHCD_STATE_OPERATIONAL: @@ -2780,7 +2738,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) ufshcd_send_command(hba, tag); out: - up_read(&hba->clk_scaling_lock); + rcu_read_unlock(); if (ufs_trigger_eh()) { unsigned long flags; @@ -5977,8 +5935,7 @@ static void ufshcd_err_handling_prepare(struct ufs_hba *hba) } ufshcd_scsi_block_requests(hba); /* Drain ufshcd_queuecommand() */ - down_write(&hba->clk_scaling_lock); - up_write(&hba->clk_scaling_lock); + synchronize_rcu(); cancel_work_sync(&hba->eeh_work); } @@ -6582,6 +6539,8 @@ static int __ufshcd_issue_tm_cmd(struct ufs_hba *hba, req->end_io_data = &wait; ufshcd_hold(hba, false); + rcu_read_lock(); + spin_lock_irqsave(host->host_lock, flags); task_tag = req->tag; @@ -6600,6 +6559,8 @@ static int __ufshcd_issue_tm_cmd(struct ufs_hba *hba, spin_unlock_irqrestore(host->host_lock, flags); + rcu_read_unlock(); + ufshcd_add_tm_upiu_trace(hba, task_tag, UFS_TM_SEND); /* wait until the task management command is completed */ diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 65178487adf3..7afe818ab1e3 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -778,6 +778,7 @@ struct ufs_hba_monitor { * @clk_list_head: UFS host controller clocks list node head * @pwr_info: holds current power mode * @max_pwr_info: keeps the device max valid pwm + * @clk_scaling_lock: used to serialize device commands and clock scaling * @desc_size: descriptor sizes reported by device * @urgent_bkops_lvl: keeps track of urgent bkops level for device * @is_urgent_bkops_lvl_checked: keeps track if the urgent bkops level for