From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.4 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 69376C433E1 for ; Fri, 24 Jul 2020 14:01:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 453E22065C for ; Fri, 24 Jul 2020 14:01:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="pVnHDUPN" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726636AbgGXOBy (ORCPT ); Fri, 24 Jul 2020 10:01:54 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:32824 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726366AbgGXOBy (ORCPT ); Fri, 24 Jul 2020 10:01:54 -0400 X-UUID: 582a10831a1945b5a306bfadc2b48976-20200724 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID:Date:Subject:CC:To:From; bh=IfOVClM/Lv4VLM52AY8HzEWSy/KLqQSwlIy6ABrgbPI=; b=pVnHDUPNe2rI05GE1gssxsjxBFQc1J/M9qCklXmrCrgjFS8gDa+Zpufkg+qwjlWWWQRSxMJWQ3ivxE/1wVlKXL+56WPERUEf4KymBPszwRTrb+8a8wQnu8xiYl1+glQzo9Pduu3lHjH1wsy5c0jh+5hWcFfCpMshDohfIbX1IAU=; X-UUID: 582a10831a1945b5a306bfadc2b48976-20200724 Received: from mtkcas07.mediatek.inc [(172.21.101.84)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1436846409; Fri, 24 Jul 2020 22:01:49 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs02n1.mediatek.inc (172.21.101.77) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 24 Jul 2020 22:01:45 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 24 Jul 2020 22:01:45 +0800 From: Stanley Chu To: , , , , , CC: , , , , , , , , , , , , , Stanley Chu Subject: [PATCH v4] scsi: ufs: Quiesce all scsi devices before shutdown Date: Fri, 24 Jul 2020 22:01:40 +0800 Message-ID: <20200724140140.18186-1-stanley.chu@mediatek.com> X-Mailer: git-send-email 2.18.0 MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Q3VycmVudGx5IEkvTyByZXF1ZXN0IGNvdWxkIGJlIHN0aWxsIHN1Ym1pdHRlZCB0byBVRlMgZGV2 aWNlIHdoaWxlDQpVRlMgaXMgd29ya2luZyBvbiBzaHV0ZG93biBmbG93LiBUaGlzIG1heSBsZWFk IHRvIHJhY2luZyBhcyBiZWxvdw0Kc2NlbmFyaW9zIGFuZCBmaW5hbGx5IHN5c3RlbSBtYXkgY3Jh c2ggZHVlIHRvIHVuY2xvY2tlZCByZWdpc3Rlcg0KYWNjZXNzZXMuDQoNClRvIGZpeCB0aGlzIGtp bmQgb2YgaXNzdWVzLCBzcGVjaWZpY2FsbHkgcXVpZXNjZSBhbGwgU0NTSSBkZXZpY2VzDQpiZWZv cmUgVUZTIHNodXRkb3duIHRvIGJsb2NrIGFsbCBJL08gcmVxdWVzdCBzZW5kaW5nIGZyb20gYmxv Y2sNCmxheWVyLg0KDQpFeGFtcGxlIG9mIHJhY2luZyBzY2VuYXJpbzogV2hpbGUgVUZTIGRldmlj ZSBpcyBydW50aW1lLXN1c3BlbmRlZA0KDQpUaHJlYWQgIzE6IEV4ZWN1dGluZyBVRlMgc2h1dGRv d24gZmxvdywgZS5nLiwNCiAgICAgICAgICAgdWZzaGNkX3N1c3BlbmQoVUZTX1NIVVRET1dOX1BN KQ0KVGhyZWFkICMyOiBFeGVjdXRpbmcgcnVudGltZSByZXN1bWUgZmxvdyB0cmlnZ2VyZWQgYnkg SS9PIHJlcXVlc3QsDQogICAgICAgICAgIGUuZy4sIHVmc2hjZF9yZXN1bWUoVUZTX1JVTlRJTUVf UE0pDQoNClRoaXMgYnJlYWtzIHRoZSBhc3N1bXB0aW9uIHRoYXQgVUZTIFBNIGZsb3dzIGNhbiBu b3QgYmUgcnVubmluZw0KY29uY3VycmVudGx5IGFuZCBzb21lIHVuZXhwZWN0ZWQgcmFjaW5nIGJl aGF2aW9yIG1heSBoYXBwZW4uDQoNClNpZ25lZC1vZmYtYnk6IFN0YW5sZXkgQ2h1IDxzdGFubGV5 LmNodUBtZWRpYXRlay5jb20+DQotLS0NCiBkcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC5jIHwgMjkg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiAxIGZpbGUgY2hhbmdlZCwgMjkgaW5zZXJ0 aW9ucygrKQ0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2QuYyBiL2RyaXZl cnMvc2NzaS91ZnMvdWZzaGNkLmMNCmluZGV4IDlkMTgwZGE3NzQ4OC4uMmUxODU5NmYzYThlIDEw MDY0NA0KLS0tIGEvZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2QuYw0KKysrIGIvZHJpdmVycy9zY3Np L3Vmcy91ZnNoY2QuYw0KQEAgLTE1OSw2ICsxNTksMTIgQEAgc3RydWN0IHVmc19wbV9sdmxfc3Rh dGVzIHVmc19wbV9sdmxfc3RhdGVzW10gPSB7DQogCXtVRlNfUE9XRVJET1dOX1BXUl9NT0RFLCBV SUNfTElOS19PRkZfU1RBVEV9LA0KIH07DQogDQorI2RlZmluZSB1ZnNoY2Rfc2NzaV9mb3JfZWFj aF9zZGV2KGZuKSBcDQorCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhcmdldCwgJmhiYS0+aG9zdC0+ X190YXJnZXRzLCBzaWJsaW5ncykgeyBcDQorCQlfX3N0YXJnZXRfZm9yX2VhY2hfZGV2aWNlKHN0 YXJnZXQsIE5VTEwsIFwNCisJCQkJCSAgZm4pOyBcDQorCX0NCisNCiBzdGF0aWMgaW5saW5lIGVu dW0gdWZzX2Rldl9wd3JfbW9kZQ0KIHVmc19nZXRfcG1fbHZsX3RvX2Rldl9wd3JfbW9kZShlbnVt IHVmc19wbV9sZXZlbCBsdmwpDQogew0KQEAgLTg2MjAsNiArODYyNiwxMyBAQCBpbnQgdWZzaGNk X3J1bnRpbWVfaWRsZShzdHJ1Y3QgdWZzX2hiYSAqaGJhKQ0KIH0NCiBFWFBPUlRfU1lNQk9MKHVm c2hjZF9ydW50aW1lX2lkbGUpOw0KIA0KK3N0YXRpYyB2b2lkIHVmc2hjZF9xdWllc2NlX3NkZXYo c3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKQ0KK3sNCisJLyogU3VzcGVuZGVk IGRldmljZXMgYXJlIGFscmVhZHkgcXVpZXNjZWQgc28gY2FuIGJlIHNraXBwZWQgKi8NCisJaWYg KCFwbV9ydW50aW1lX3N1c3BlbmRlZCgmc2Rldi0+c2Rldl9nZW5kZXYpKQ0KKwkJc2NzaV9kZXZp Y2VfcXVpZXNjZShzZGV2KTsNCit9DQorDQogLyoqDQogICogdWZzaGNkX3NodXRkb3duIC0gc2h1 dGRvd24gcm91dGluZQ0KICAqIEBoYmE6IHBlciBhZGFwdGVyIGluc3RhbmNlDQpAQCAtODYzMSw2 ICs4NjQ0LDcgQEAgRVhQT1JUX1NZTUJPTCh1ZnNoY2RfcnVudGltZV9pZGxlKTsNCiBpbnQgdWZz aGNkX3NodXRkb3duKHN0cnVjdCB1ZnNfaGJhICpoYmEpDQogew0KIAlpbnQgcmV0ID0gMDsNCisJ c3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0Ow0KIA0KIAlpZiAoIWhiYS0+aXNfcG93ZXJlZCkN CiAJCWdvdG8gb3V0Ow0KQEAgLTg2NDQsNiArODY1OCwyMSBAQCBpbnQgdWZzaGNkX3NodXRkb3du KHN0cnVjdCB1ZnNfaGJhICpoYmEpDQogCQkJZ290byBvdXQ7DQogCX0NCiANCisJLyoNCisJICog UXVpZXNjZSBhbGwgU0NTSSBkZXZpY2VzIHRvIHByZXZlbnQgYW55IG5vbi1QTSByZXF1ZXN0cyBz ZW5kaW5nDQorCSAqIGZyb20gYmxvY2sgbGF5ZXIgZHVyaW5nIGFuZCBhZnRlciBzaHV0ZG93bi4N CisJICoNCisJICogSGVyZSB3ZSBjYW4gbm90IHVzZSBibGtfY2xlYW51cF9xdWV1ZSgpIHNpbmNl IFBNIHJlcXVlc3RzDQorCSAqICh3aXRoIEJMS19NUV9SRVFfUFJFRU1QVCBmbGFnKSBhcmUgc3Rp bGwgcmVxdWlyZWQgdG8gYmUgc2VudA0KKwkgKiB0aHJvdWdoIGJsb2NrIGxheWVyLiBUaGVyZWZv cmUgU0NTSSBjb21tYW5kIHF1ZXVlZCBhZnRlciB0aGUNCisJICogc2NzaV90YXJnZXRfcXVpZXNj ZSgpIGNhbGwgcmV0dXJuZWQgd2lsbCBibG9jayB1bnRpbA0KKwkgKiBibGtfY2xlYW51cF9xdWV1 ZSgpIGlzIGNhbGxlZC4NCisJICoNCisJICogQmVzaWRlcywgc2NzaV90YXJnZXRfInVuInF1aWVz Y2UgKGUuZy4sIHNjc2lfdGFyZ2V0X3Jlc3VtZSkgY2FuDQorCSAqIGJlIGlnbm9yZWQgc2luY2Ug c2h1dGRvd24gaXMgb25lLXdheSBmbG93Lg0KKwkgKi8NCisJdWZzaGNkX3Njc2lfZm9yX2VhY2hf c2Rldih1ZnNoY2RfcXVpZXNjZV9zZGV2KTsNCisNCiAJcmV0ID0gdWZzaGNkX3N1c3BlbmQoaGJh LCBVRlNfU0hVVERPV05fUE0pOw0KIG91dDoNCiAJaWYgKHJldCkNCi0tIA0KMi4xOC4wDQo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 08666C433E3 for ; Fri, 24 Jul 2020 14:06:34 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C9BB220674 for ; Fri, 24 Jul 2020 14:06:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="oZIYtkHp"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="pVnHDUPN" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C9BB220674 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=y6eD0p9NX9p+fv3DOtRwEtZC5CnSGBsfqUX5Ni3HxIw=; b=oZIYtkHponxNLwClXlumDKfaFw D95RzZiaApx1TL4XpgFKnTXJa/XMtAp5yuCRUDMmhT1HtPKm3UYBR6KaRjxYaKv8CZtVL1mpFf7xa 0nOJSNs7Sb8yoiAlnO55EdeTIn3Rhsd2+sKSHlHvMsTvhcLexduzdZh0MvgZwKbsm54fTO627uQlZ zTsKonjaZ3q5/vltHMhvJyvLJZG8XuI28hg7kgmacdkqdK0/8pzOKXEvL9iQYBT7g1UvweeydVHsk 3bD8JSEKlKc9Ezm5EMPitXhfMph2iRyzUrBgUb73xEHF48H072xyZiUnJj0XtcukNQHfWOFWZ/qdi qJyZHBig==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jyyL8-0002QQ-OS; Fri, 24 Jul 2020 14:06:22 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jyyL1-0002Nr-BK; Fri, 24 Jul 2020 14:06:16 +0000 X-UUID: 8f229a291c374281a6c5bd721e860fa0-20200724 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID:Date:Subject:CC:To:From; bh=IfOVClM/Lv4VLM52AY8HzEWSy/KLqQSwlIy6ABrgbPI=; b=pVnHDUPNe2rI05GE1gssxsjxBFQc1J/M9qCklXmrCrgjFS8gDa+Zpufkg+qwjlWWWQRSxMJWQ3ivxE/1wVlKXL+56WPERUEf4KymBPszwRTrb+8a8wQnu8xiYl1+glQzo9Pduu3lHjH1wsy5c0jh+5hWcFfCpMshDohfIbX1IAU=; X-UUID: 8f229a291c374281a6c5bd721e860fa0-20200724 Received: from mtkcas67.mediatek.inc [(172.29.193.45)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 239991410; Fri, 24 Jul 2020 06:01:46 -0800 Received: from MTKMBS02N1.mediatek.inc (172.21.101.77) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 24 Jul 2020 07:01:59 -0700 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs02n1.mediatek.inc (172.21.101.77) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 24 Jul 2020 22:01:45 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 24 Jul 2020 22:01:45 +0800 From: Stanley Chu To: , , , , , Subject: [PATCH v4] scsi: ufs: Quiesce all scsi devices before shutdown Date: Fri, 24 Jul 2020 22:01:40 +0800 Message-ID: <20200724140140.18186-1-stanley.chu@mediatek.com> X-Mailer: git-send-email 2.18.0 MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200724_100615_691035_4879169C X-CRM114-Status: GOOD ( 11.69 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Stanley Chu , andy.teng@mediatek.com, cc.chou@mediatek.com, chun-hung.wu@mediatek.com, kuohong.wang@mediatek.com, linux-kernel@vger.kernel.org, cang@codeaurora.org, linux-mediatek@lists.infradead.org, peter.wang@mediatek.com, matthias.bgg@gmail.com, beanhuo@micron.com, chaotian.jing@mediatek.com, linux-arm-kernel@lists.infradead.org, asutoshd@codeaurora.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Currently I/O request could be still submitted to UFS device while UFS is working on shutdown flow. This may lead to racing as below scenarios and finally system may crash due to unclocked register accesses. To fix this kind of issues, specifically quiesce all SCSI devices before UFS shutdown to block all I/O request sending from block layer. Example of racing scenario: While UFS device is runtime-suspended Thread #1: Executing UFS shutdown flow, e.g., ufshcd_suspend(UFS_SHUTDOWN_PM) Thread #2: Executing runtime resume flow triggered by I/O request, e.g., ufshcd_resume(UFS_RUNTIME_PM) This breaks the assumption that UFS PM flows can not be running concurrently and some unexpected racing behavior may happen. Signed-off-by: Stanley Chu --- drivers/scsi/ufs/ufshcd.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 9d180da77488..2e18596f3a8e 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -159,6 +159,12 @@ struct ufs_pm_lvl_states ufs_pm_lvl_states[] = { {UFS_POWERDOWN_PWR_MODE, UIC_LINK_OFF_STATE}, }; +#define ufshcd_scsi_for_each_sdev(fn) \ + list_for_each_entry(starget, &hba->host->__targets, siblings) { \ + __starget_for_each_device(starget, NULL, \ + fn); \ + } + static inline enum ufs_dev_pwr_mode ufs_get_pm_lvl_to_dev_pwr_mode(enum ufs_pm_level lvl) { @@ -8620,6 +8626,13 @@ int ufshcd_runtime_idle(struct ufs_hba *hba) } EXPORT_SYMBOL(ufshcd_runtime_idle); +static void ufshcd_quiesce_sdev(struct scsi_device *sdev, void *data) +{ + /* Suspended devices are already quiesced so can be skipped */ + if (!pm_runtime_suspended(&sdev->sdev_gendev)) + scsi_device_quiesce(sdev); +} + /** * ufshcd_shutdown - shutdown routine * @hba: per adapter instance @@ -8631,6 +8644,7 @@ EXPORT_SYMBOL(ufshcd_runtime_idle); int ufshcd_shutdown(struct ufs_hba *hba) { int ret = 0; + struct scsi_target *starget; if (!hba->is_powered) goto out; @@ -8644,6 +8658,21 @@ int ufshcd_shutdown(struct ufs_hba *hba) goto out; } + /* + * Quiesce all SCSI devices to prevent any non-PM requests sending + * from block layer during and after shutdown. + * + * Here we can not use blk_cleanup_queue() since PM requests + * (with BLK_MQ_REQ_PREEMPT flag) are still required to be sent + * through block layer. Therefore SCSI command queued after the + * scsi_target_quiesce() call returned will block until + * blk_cleanup_queue() is called. + * + * Besides, scsi_target_"un"quiesce (e.g., scsi_target_resume) can + * be ignored since shutdown is one-way flow. + */ + ufshcd_scsi_for_each_sdev(ufshcd_quiesce_sdev); + ret = ufshcd_suspend(hba, UFS_SHUTDOWN_PM); out: if (ret) -- 2.18.0 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3AB0EC433E1 for ; Fri, 24 Jul 2020 14:07:38 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 083B420674 for ; Fri, 24 Jul 2020 14:07:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="b678pSat"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="pVnHDUPN" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 083B420674 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=Q7qlh/f8XhOhT3DAXfcI76Yvl5Px7b0y/DMSNi2fpRs=; b=b678pSatwf6EfJlUOsWswS+G7A mjI04EU/Qy30Clt5+gyubBjoyxaFSHssm3pQyky0Y8XdCvdYuEF8Qk3iG8DRkZjez4NOpeefGSm+G igzRUFfod8PANHMSa1SOO5e4IUTwR/RAsoG4bwE0gGTOtifJzFUN8uejPjQ4vUSVwX51KcQocBdr0 I6BXQDwstSm8XlOtQJZZY7YxznKqputCr+eE8GWiLR/DDPO+MxM5NGoDsUk7uL/j41PSd9lH8aKdc XX0Qj2X5R5zRnY4WDtf4T4SMmeuDVhrkyDZhaKOCvvahpf6+d3inPnTs9ba4PXcWUpKVRcdF33Sa5 Qfp1HDKQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jyyL5-0002PO-6E; Fri, 24 Jul 2020 14:06:19 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jyyL1-0002Nr-BK; Fri, 24 Jul 2020 14:06:16 +0000 X-UUID: 8f229a291c374281a6c5bd721e860fa0-20200724 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID:Date:Subject:CC:To:From; bh=IfOVClM/Lv4VLM52AY8HzEWSy/KLqQSwlIy6ABrgbPI=; b=pVnHDUPNe2rI05GE1gssxsjxBFQc1J/M9qCklXmrCrgjFS8gDa+Zpufkg+qwjlWWWQRSxMJWQ3ivxE/1wVlKXL+56WPERUEf4KymBPszwRTrb+8a8wQnu8xiYl1+glQzo9Pduu3lHjH1wsy5c0jh+5hWcFfCpMshDohfIbX1IAU=; X-UUID: 8f229a291c374281a6c5bd721e860fa0-20200724 Received: from mtkcas67.mediatek.inc [(172.29.193.45)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 239991410; Fri, 24 Jul 2020 06:01:46 -0800 Received: from MTKMBS02N1.mediatek.inc (172.21.101.77) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 24 Jul 2020 07:01:59 -0700 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs02n1.mediatek.inc (172.21.101.77) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 24 Jul 2020 22:01:45 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 24 Jul 2020 22:01:45 +0800 From: Stanley Chu To: , , , , , Subject: [PATCH v4] scsi: ufs: Quiesce all scsi devices before shutdown Date: Fri, 24 Jul 2020 22:01:40 +0800 Message-ID: <20200724140140.18186-1-stanley.chu@mediatek.com> X-Mailer: git-send-email 2.18.0 MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200724_100615_691035_4879169C X-CRM114-Status: GOOD ( 11.69 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Stanley Chu , andy.teng@mediatek.com, cc.chou@mediatek.com, chun-hung.wu@mediatek.com, kuohong.wang@mediatek.com, linux-kernel@vger.kernel.org, cang@codeaurora.org, linux-mediatek@lists.infradead.org, peter.wang@mediatek.com, matthias.bgg@gmail.com, beanhuo@micron.com, chaotian.jing@mediatek.com, linux-arm-kernel@lists.infradead.org, asutoshd@codeaurora.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Currently I/O request could be still submitted to UFS device while UFS is working on shutdown flow. This may lead to racing as below scenarios and finally system may crash due to unclocked register accesses. To fix this kind of issues, specifically quiesce all SCSI devices before UFS shutdown to block all I/O request sending from block layer. Example of racing scenario: While UFS device is runtime-suspended Thread #1: Executing UFS shutdown flow, e.g., ufshcd_suspend(UFS_SHUTDOWN_PM) Thread #2: Executing runtime resume flow triggered by I/O request, e.g., ufshcd_resume(UFS_RUNTIME_PM) This breaks the assumption that UFS PM flows can not be running concurrently and some unexpected racing behavior may happen. Signed-off-by: Stanley Chu --- drivers/scsi/ufs/ufshcd.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 9d180da77488..2e18596f3a8e 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -159,6 +159,12 @@ struct ufs_pm_lvl_states ufs_pm_lvl_states[] = { {UFS_POWERDOWN_PWR_MODE, UIC_LINK_OFF_STATE}, }; +#define ufshcd_scsi_for_each_sdev(fn) \ + list_for_each_entry(starget, &hba->host->__targets, siblings) { \ + __starget_for_each_device(starget, NULL, \ + fn); \ + } + static inline enum ufs_dev_pwr_mode ufs_get_pm_lvl_to_dev_pwr_mode(enum ufs_pm_level lvl) { @@ -8620,6 +8626,13 @@ int ufshcd_runtime_idle(struct ufs_hba *hba) } EXPORT_SYMBOL(ufshcd_runtime_idle); +static void ufshcd_quiesce_sdev(struct scsi_device *sdev, void *data) +{ + /* Suspended devices are already quiesced so can be skipped */ + if (!pm_runtime_suspended(&sdev->sdev_gendev)) + scsi_device_quiesce(sdev); +} + /** * ufshcd_shutdown - shutdown routine * @hba: per adapter instance @@ -8631,6 +8644,7 @@ EXPORT_SYMBOL(ufshcd_runtime_idle); int ufshcd_shutdown(struct ufs_hba *hba) { int ret = 0; + struct scsi_target *starget; if (!hba->is_powered) goto out; @@ -8644,6 +8658,21 @@ int ufshcd_shutdown(struct ufs_hba *hba) goto out; } + /* + * Quiesce all SCSI devices to prevent any non-PM requests sending + * from block layer during and after shutdown. + * + * Here we can not use blk_cleanup_queue() since PM requests + * (with BLK_MQ_REQ_PREEMPT flag) are still required to be sent + * through block layer. Therefore SCSI command queued after the + * scsi_target_quiesce() call returned will block until + * blk_cleanup_queue() is called. + * + * Besides, scsi_target_"un"quiesce (e.g., scsi_target_resume) can + * be ignored since shutdown is one-way flow. + */ + ufshcd_scsi_for_each_sdev(ufshcd_quiesce_sdev); + ret = ufshcd_suspend(hba, UFS_SHUTDOWN_PM); out: if (ret) -- 2.18.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel