Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp3517391pxb; Mon, 4 Apr 2022 19:36:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwfuC0CMmYj9Tyxze6AdXc8e9BOFAzq4AcFmRWs/cW9JUNh98+EletBuK8NYNz0Xf2G2eTI X-Received: by 2002:a17:902:be18:b0:153:2444:9c1a with SMTP id r24-20020a170902be1800b0015324449c1amr1299295pls.152.1649126174706; Mon, 04 Apr 2022 19:36:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649126174; cv=none; d=google.com; s=arc-20160816; b=fPhG9cGwcMOyPaggMN31o82tBiSl4RweisiOdrH3sx+tMr+welktBzAZLlaL36ZOOo vZYL1urVKUFMefAk2HDG7iYmPp+z30tEEdb1PPwZEqQpizYTsbgga0zjs7YyaH3ir6Ii YBNB83Iun9yYb6mlsgikyU4ik1yWv9lF2TXyMMUtBZHNnPe2DUhPagI5CO1xKFXc+TK4 TzkNeFyVOfiDtkYRU85UnII7DWoLRMqNfL92Y4ksjRYCyhbyBUVTO1urWtifOv78mAdX uruAVOUPkvtwEzU0lhUMie138te8O4urMEyM8oW9jLjCh3e/qvsajXRwZK285W148fQv jiNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=jneTIIl5MLGl5p3ntq/P2sK8buxkj2Y6pkm7uErsZFU=; b=vI5Y2iqoT0a7g+oy7wwv1c2EZySJ5YwADl2ujtCta/3oCvX5Cr7b8zxDKS5aTk9eWi sQ0qI81ZHlnLvqOlHV83bvize5aiKTiG+OQTHfohPAuom1flvM7II+0kiSW+NOB5HtTV kXOF/Lu3Nl3op+AEjqnJWNqaEkka+z+I5+ec0JHeANJFXRUy10jQpr6jZv8pAydEWyB1 8zWAhRh+3OUCnuRWFPslG/MPrbGxaDgX0ElBvVuvW6wDH2hwrbTkY8s7ucYo34msIq5O ZSyf8XfPzNzV8o7V/v9SYE29FRePSUPQFLwbYq9J09zGxblOWHrtRrmisf+G241dJ0Pm CTwA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id c6-20020a170903234600b00153b2d16405si12680398plh.13.2022.04.04.19.36.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Apr 2022 19:36:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id B9DCC325731; Mon, 4 Apr 2022 18:00:06 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1355281AbiDDG1o (ORCPT + 99 others); Mon, 4 Apr 2022 02:27:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52536 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229571AbiDDG1m (ORCPT ); Mon, 4 Apr 2022 02:27:42 -0400 Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2BFA81D0E3; Sun, 3 Apr 2022 23:25:46 -0700 (PDT) Received: from canpemm500001.china.huawei.com (unknown [172.30.72.56]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4KX13f663qz1HBNx; Mon, 4 Apr 2022 14:25:18 +0800 (CST) Received: from localhost (10.174.151.254) by canpemm500001.china.huawei.com (7.192.104.163) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Mon, 4 Apr 2022 14:25:42 +0800 From: Jay Zhou To: , , , CC: , Subject: [PATCH] pci: avoid dead lock between device reset and sriov disable Date: Mon, 4 Apr 2022 14:25:39 +0800 Message-ID: <20220404062539.1710-1-jianjay.zhou@huawei.com> X-Mailer: git-send-email 2.28.0.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.174.151.254] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To canpemm500001.china.huawei.com (7.192.104.163) X-CFilter-Loop: Reflected X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RDNS_NONE, SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Call trace of PF SRIOV disable: sriov_numvfs_store device_lock <----------------- (1) get the device lock ->sriov_configure # e.g. vfio_pci_sriov_configure sriov_disable pci_cfg_access_lock <--- (4) wait dev->block_cfg_access to be 0 Call trace of PF reset: reset_store pci_reset_function pci_dev_lock pci_cfg_access_lock <----- (2) set dev->block_cfg_access = 1 device_lock <------------- (3) want to get the device lock These two oprations would wait for each other forever if the code execution sequence is (1)(2)(3)(4). Let's get the device lock and then the config access lock in pci_dev_lock(). Signed-off-by: Jay Zhou --- drivers/pci/pci.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 9ecce435fb3f..61a6db1d21f6 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -5103,19 +5103,19 @@ static int pci_reset_bus_function(struct pci_dev *dev, bool probe) void pci_dev_lock(struct pci_dev *dev) { - pci_cfg_access_lock(dev); /* block PM suspend, driver probe, etc. */ device_lock(&dev->dev); + pci_cfg_access_lock(dev); } EXPORT_SYMBOL_GPL(pci_dev_lock); /* Return 1 on successful lock, 0 on contention */ int pci_dev_trylock(struct pci_dev *dev) { - if (pci_cfg_access_trylock(dev)) { - if (device_trylock(&dev->dev)) + if (device_trylock(&dev->dev)) { + if (pci_cfg_access_trylock(dev)) return 1; - pci_cfg_access_unlock(dev); + device_unlock(&dev->dev); } return 0; @@ -5124,8 +5124,8 @@ EXPORT_SYMBOL_GPL(pci_dev_trylock); void pci_dev_unlock(struct pci_dev *dev) { - device_unlock(&dev->dev); pci_cfg_access_unlock(dev); + device_unlock(&dev->dev); } EXPORT_SYMBOL_GPL(pci_dev_unlock); -- 2.27.0