From patchwork Wed Jan 11 11:40:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manivannan Sadhasivam X-Patchwork-Id: 41924 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp3270212wrt; Wed, 11 Jan 2023 03:44:10 -0800 (PST) X-Google-Smtp-Source: AMrXdXs3a/SI0Gqj/8qBwDO7sq8nJKtNIbGBKHkqdzqDyE4xCVplHyIM7Y6XSsoMl3OEfRXXlw/r X-Received: by 2002:a05:6a20:3c93:b0:9d:efbe:a113 with SMTP id b19-20020a056a203c9300b0009defbea113mr93112272pzj.35.1673437450414; Wed, 11 Jan 2023 03:44:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673437450; cv=none; d=google.com; s=arc-20160816; b=H8FgkWY+EWVvtmAa8r3j73aZassNF2VXcZpY8Y+EzRQ9nl+HoVPsqsT61VRG5dUS6g d32BpBXkf5SrRzavjJCw80HpQ54ZFWHjDjpUG0nHlexzcFmJPN9+s6KDfwQ4u0keNjQP nkpI1j1+ME/igFvbiqgYxldHQ2sfU+XEyX6Q62TJFOhWPY62JYsLVAPQn1SulJzurgeB wvbStHlOvV8B6kfwKxDJh0Ib94ELGxeF2joRWw8TVz8OcqSftbm/dKt1Sf1TgYv4WyaW QyPyFmOu3T19H1CgIzqsDuAgKbEArKirM95UWNhC4eXCSgjo8WbPFJxrU+yylWp0bKUQ xzrA== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=1hyDFi6BwQQxvnWgZlqZn5l8SdU7JiBSKsGQ5Uy8Nc4=; b=igEWUuWcOO69Lml7hUWw2FPwZQpaQZcJzOFMQqdKQyixkFv22K3WGq9ZdOuxgx2Ux4 wpb72ZCAyHkB0La2bIzhhhaLxuTGG3bjBnHBvGnBUOtJYBTX1+/vPbu7vvCvCNsUz6fK N1ZbWdLiq+JYz1poirfRqwMUa+VEoC5GoKTz3A4Pulx75iBMLnTVeC7Oyas5lB7cYLyv j118eINcp8Ga/nvpeFwqYYdhFqy6cmH/YnlqjzXKgrhisWpRm/ejO+yZo2mprN/f++Ck 4EnoBaQe9UKRDnq3FQKcK+r4LYtLg8B2CoKOUZ71OQTW2nuUEgVaxHGNJv5ktZ1OAkvf lINg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=P9tGxpvA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j23-20020a635517000000b00476dc18e732si14967208pgb.726.2023.01.11.03.43.58; Wed, 11 Jan 2023 03:44:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=P9tGxpvA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229522AbjAKLnK (ORCPT + 99 others); Wed, 11 Jan 2023 06:43:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232343AbjAKLmW (ORCPT ); Wed, 11 Jan 2023 06:42:22 -0500 Received: from mail-pj1-x1030.google.com (mail-pj1-x1030.google.com [IPv6:2607:f8b0:4864:20::1030]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0669A1A21E for ; Wed, 11 Jan 2023 03:41:16 -0800 (PST) Received: by mail-pj1-x1030.google.com with SMTP id m7-20020a17090a730700b00225ebb9cd01so19710630pjk.3 for ; Wed, 11 Jan 2023 03:41:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1hyDFi6BwQQxvnWgZlqZn5l8SdU7JiBSKsGQ5Uy8Nc4=; b=P9tGxpvAov1XFTAYprD/CPMh6kLhmqet4jxwfegRwKwi/DkBqaJvFy7gW/kaOJ5wfk /r/S3lF9RHrK3d9G8dTIzftnHXDw96hxIoB6lqswUc6gRXe3DiuUSdGWivaKrPA+P8wY 7kv6qaVenvAZ8tiJ5j4Ot2/JpcVXW7yBXXIuO92Ogz8y2pc4QUxnKcMlAEivUY2bp3q4 6iG5kOGpS8+x9TiruG1lcHH8bY9m6NWwqxeI1N2DDshLX3dmRBdj1dhkZyPGod0R4c1N Ajm/XroavAelHk77wwqsN3zYHuJW8UMkNr4DAIG4r5aq218HVJDcFoH8oOq/wByQURua RbuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1hyDFi6BwQQxvnWgZlqZn5l8SdU7JiBSKsGQ5Uy8Nc4=; b=uIwkSnbcUTp6VPt047vhb3HvJ+4ineFm9WuBrJpcBoCV14fgTQ7k2AtwVsxyu5Q+R/ /vn/ZJoaswIdK8GWgb69cU5eDH3qlUumVuH357RWmlq6U3WPu0si6ju1KeBKCSI+bhqM tGsm4GncRasq2IgpThPRyDFUAz8ANnfb0OjXZK0USDt3jPCtXA9OD6ciBeqMQI3z+M1s lK6b5n3Tqbvs3Zsl5/cE/KVTgwDQfR58xNL0xcwdxY9U1pFxNCrBO3hApMe52wXRHCYE itgwAIYS096yiR06JzcW5xFaxGtgz103IEIv851nY6KDkPmrz4nn/p4214FewGGWO+v4 frXg== X-Gm-Message-State: AFqh2kob/wqnWRcJvmlfTXjGU/s9ExBqpQj+OkauBBLclAm5XpWp72BU lu0UtVCvOcadpIZrQUJobKB4 X-Received: by 2002:a17:903:11cf:b0:192:9550:339a with SMTP id q15-20020a17090311cf00b001929550339amr70120845plh.52.1673437276326; Wed, 11 Jan 2023 03:41:16 -0800 (PST) Received: from localhost.localdomain ([117.217.177.1]) by smtp.gmail.com with ESMTPSA id u14-20020a170902e5ce00b0018958a913a2sm9942688plf.223.2023.01.11.03.41.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jan 2023 03:41:15 -0800 (PST) From: Manivannan Sadhasivam To: kishon@kernel.org, lpieralisi@kernel.org, bhelgaas@google.com Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, kw@linux.com, robh@kernel.org, vidyas@nvidia.com, vigneshr@ti.com, Manivannan Sadhasivam , Kishon Vijay Abraham I Subject: [RESEND v4 1/5] PCI: dra7xx: Use threaded IRQ handler for "dra7xx-pcie-main" IRQ Date: Wed, 11 Jan 2023 17:10:55 +0530 Message-Id: <20230111114059.6553-2-manivannan.sadhasivam@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230111114059.6553-1-manivannan.sadhasivam@linaro.org> References: <20230111114059.6553-1-manivannan.sadhasivam@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754726347830817325?= X-GMAIL-MSGID: =?utf-8?q?1754726347830817325?= The "dra7xx-pcie-main" hard IRQ handler is just printing the IRQ status and calling the dw_pcie_ep_linkup() API if LINK_UP status is set. But the execution of dw_pcie_ep_linkup() depends on the EPF driver and may take more time depending on the EPF implementation. In general, hard IRQ handlers are supposed to return quickly and not block for so long. Moreover, there is no real need of the current IRQ handler to be a hard IRQ handler. So switch to the threaded IRQ handler for the "dra7xx-pcie-main" IRQ. Acked-by: Kishon Vijay Abraham I Signed-off-by: Manivannan Sadhasivam --- drivers/pci/controller/dwc/pci-dra7xx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/pci/controller/dwc/pci-dra7xx.c b/drivers/pci/controller/dwc/pci-dra7xx.c index 38462ed11d07..4ae807e7cf79 100644 --- a/drivers/pci/controller/dwc/pci-dra7xx.c +++ b/drivers/pci/controller/dwc/pci-dra7xx.c @@ -840,7 +840,7 @@ static int dra7xx_pcie_probe(struct platform_device *pdev) } dra7xx->mode = mode; - ret = devm_request_irq(dev, irq, dra7xx_pcie_irq_handler, + ret = devm_request_threaded_irq(dev, irq, NULL, dra7xx_pcie_irq_handler, IRQF_SHARED, "dra7xx-pcie-main", dra7xx); if (ret) { dev_err(dev, "failed to request irq\n"); From patchwork Wed Jan 11 11:40:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manivannan Sadhasivam X-Patchwork-Id: 41925 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp3270390wrt; Wed, 11 Jan 2023 03:44:35 -0800 (PST) X-Google-Smtp-Source: AMrXdXttjSgudpkRhueHsZeeNgV7MPDGr36Q946tr0fpnhfBVR7olgeAogVAT4LOjWJPVph18dSc X-Received: by 2002:a05:6a20:e608:b0:9d:efbe:e5f4 with SMTP id my8-20020a056a20e60800b0009defbee5f4mr89778529pzb.16.1673437475547; Wed, 11 Jan 2023 03:44:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673437475; cv=none; d=google.com; s=arc-20160816; b=zbej6jKS0tZDUKqiFIS6nDFSH1c9ZelNP3Mv0Sm21Xp9nSIFtSs7EygAf+PsIbq/0M V+nx6CEbF8LQeKoMiQLBtKXoJb1qrXpAoUbFnZlktBt/qNr988nW5EaIeV3hcTD9cZya 2SBdETgpTvTf0dwvkUh4/oGexgc4TrsFNsmEzMSFHPz2HOjByKbgEJ1JyasfbB2DvmrO 9FbRpF+OuUatI45iK7PjkRrth6uUvVAD5zR6k08HvIcdxhPC8qzu8JUhCdUzVLm8EWmv 7iVtiYdXU/YVJD42TcgVMAsArC2WHTqmLq6X/h+r2U68EC2Osn9Qg+xxqLQgyLfwdRXp lFig== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=OBCcpbqBKltUn44tui+CYGdLtqIOSH9tCT8fXxmRbaQ=; b=l3+DoQdi7FY4HAuZ6i+cCO/uXYyv3u02IJ3QF/+BLcHFZhg0XCHKJE5aUb71EaSvey /WDSeQNhSgF2Dgh8g1goskJwqFV25OUvxBC3WsmDwv8ca8XyRagVN595gMGiEBzgQlxr JfjP9JyzrW3mG9Non6eqLyYrJ/eNxdaArWCM5hk3hd0smvSYplAvAO3Ov0CbtzigudiF kVhtK4YBqrVNxcR2ZnyssrHXn0VuaN+Miqq3fcRlw4UgzQLMis5cqiqd80r5/o19yhnd KobvMMMLLL253fxfMcdSUkcu1u1ABU0h6NTN79g7T8RS2u1lxg4+QGdEdRasubl7rsGj ezEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="WkKs/lB4"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q25-20020a637519000000b004630aa449c2si1741135pgc.242.2023.01.11.03.44.21; Wed, 11 Jan 2023 03:44:35 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="WkKs/lB4"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231760AbjAKLnX (ORCPT + 99 others); Wed, 11 Jan 2023 06:43:23 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41350 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234563AbjAKLmZ (ORCPT ); Wed, 11 Jan 2023 06:42:25 -0500 Received: from mail-pl1-x632.google.com (mail-pl1-x632.google.com [IPv6:2607:f8b0:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 08FA81AA1C for ; Wed, 11 Jan 2023 03:41:22 -0800 (PST) Received: by mail-pl1-x632.google.com with SMTP id d9so16485555pll.9 for ; Wed, 11 Jan 2023 03:41:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=OBCcpbqBKltUn44tui+CYGdLtqIOSH9tCT8fXxmRbaQ=; b=WkKs/lB4qKgCez6snkAVXh90NqldO1iAfTiVhNJAu8u/1wdTFAOq8Zip63AXq1OZlf dbDk3okO91/e6qDzfhPu8dVAdRl/Pu5ajO4QKtfPOmXKYajf41FJdFys0wKp9H9+nsvp EuWmnQ/RrwJvcAobXszxWeuvqz9bIQPhqUP2AKZXSKrZYZN2uv8ao0rjfh3G0eGJw0L8 smRDbMgj4jV5abz4Ork0TCzv1fXJvNyx/lRM+fE4+hApHps3WTIsoF8fcFACaIjz0cB3 //hj3zBBvsCMIGUJLYlWktzqFE3GssL/5/f4pIIVfkXlY4adtj4IhuRZrNvMdMK7PMNV ZajQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OBCcpbqBKltUn44tui+CYGdLtqIOSH9tCT8fXxmRbaQ=; b=cewA7bk51UmQbH8Y/IL1ORAVHSt9o/RoIkoYg+05rcCttY3Pq0TAbcmYx8c37jLp3/ OlJXFi5zfc3M/Azdul4dEEbsBfjdLBSf9Q/dE34bglbJ/+r95HpFejhaaCJHaxPOOaCg uIvWO9cOKa05VngjEV3f14vGT2pLJEmC2yfvENyWDC8osJFnQuB5Qak4Q+H3ItC1oDUD vLYIUVYLMq+9Y207nmjGIJ+cI870AFECfyS695ana2U6Bl89cPr12P8Pr/ZGICT/33ph p1LIAljem8cOvH1xCu3A3Z+sYmoK2vE/QkRyQdNlYceFlkJvxGxvk30P9ZyJXVsb+f/Z uFLg== X-Gm-Message-State: AFqh2kozBvZZ6S7mnMloEoeEC1YFb4H8Z8OtFVCoZw/FHpKvQZJB7a+J THPvK4NYFQcn3eO8LuJtj8NS X-Received: by 2002:a17:902:9a03:b0:192:d0a7:a0f4 with SMTP id v3-20020a1709029a0300b00192d0a7a0f4mr31215540plp.51.1673437281527; Wed, 11 Jan 2023 03:41:21 -0800 (PST) Received: from localhost.localdomain ([117.217.177.1]) by smtp.gmail.com with ESMTPSA id u14-20020a170902e5ce00b0018958a913a2sm9942688plf.223.2023.01.11.03.41.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jan 2023 03:41:20 -0800 (PST) From: Manivannan Sadhasivam To: kishon@kernel.org, lpieralisi@kernel.org, bhelgaas@google.com Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, kw@linux.com, robh@kernel.org, vidyas@nvidia.com, vigneshr@ti.com, Manivannan Sadhasivam Subject: [RESEND v4 2/5] PCI: tegra194: Move dw_pcie_ep_linkup() to threaded IRQ handler Date: Wed, 11 Jan 2023 17:10:56 +0530 Message-Id: <20230111114059.6553-3-manivannan.sadhasivam@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230111114059.6553-1-manivannan.sadhasivam@linaro.org> References: <20230111114059.6553-1-manivannan.sadhasivam@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754726374136340657?= X-GMAIL-MSGID: =?utf-8?q?1754726374136340657?= dw_pcie_ep_linkup() may take more time to execute depending on the EPF driver implementation. Calling this API in the hard IRQ handler is not encouraged since the hard IRQ handlers are supposed to complete quickly. So move the dw_pcie_ep_linkup() call to threaded IRQ handler. Signed-off-by: Manivannan Sadhasivam Reviewed-by: Vidya Sagar --- drivers/pci/controller/dwc/pcie-tegra194.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-tegra194.c b/drivers/pci/controller/dwc/pcie-tegra194.c index 02d78a12b6e7..09825b4a075e 100644 --- a/drivers/pci/controller/dwc/pcie-tegra194.c +++ b/drivers/pci/controller/dwc/pcie-tegra194.c @@ -286,6 +286,7 @@ struct tegra_pcie_dw { struct gpio_desc *pex_refclk_sel_gpiod; unsigned int pex_rst_irq; int ep_state; + long link_status; }; static inline struct tegra_pcie_dw *to_tegra_pcie(struct dw_pcie *pci) @@ -449,9 +450,13 @@ static void pex_ep_event_hot_rst_done(struct tegra_pcie_dw *pcie) static irqreturn_t tegra_pcie_ep_irq_thread(int irq, void *arg) { struct tegra_pcie_dw *pcie = arg; + struct dw_pcie_ep *ep = &pcie->pci.ep; struct dw_pcie *pci = &pcie->pci; u32 val, speed; + if (test_and_clear_bit(0, &pcie->link_status)) + dw_pcie_ep_linkup(ep); + speed = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA) & PCI_EXP_LNKSTA_CLS; clk_set_rate(pcie->core_clk, pcie_gen_freq[speed - 1]); @@ -498,7 +503,6 @@ static irqreturn_t tegra_pcie_ep_irq_thread(int irq, void *arg) static irqreturn_t tegra_pcie_ep_hard_irq(int irq, void *arg) { struct tegra_pcie_dw *pcie = arg; - struct dw_pcie_ep *ep = &pcie->pci.ep; int spurious = 1; u32 status_l0, status_l1, link_status; @@ -514,7 +518,8 @@ static irqreturn_t tegra_pcie_ep_hard_irq(int irq, void *arg) link_status = appl_readl(pcie, APPL_LINK_STATUS); if (link_status & APPL_LINK_STATUS_RDLH_LINK_UP) { dev_dbg(pcie->dev, "Link is up with Host\n"); - dw_pcie_ep_linkup(ep); + set_bit(0, &pcie->link_status); + return IRQ_WAKE_THREAD; } } From patchwork Wed Jan 11 11:40:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manivannan Sadhasivam X-Patchwork-Id: 41927 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp3270586wrt; Wed, 11 Jan 2023 03:45:05 -0800 (PST) X-Google-Smtp-Source: AMrXdXsTED1q8YL8YJzMBYLqKM2rGm0k9VCYRruUg4r8+S9KQEc8xo5nSWdcgBfTFQ8MZ6FDBEDx X-Received: by 2002:a17:906:524b:b0:7c1:5098:907f with SMTP id y11-20020a170906524b00b007c15098907fmr61201144ejm.61.1673437505498; Wed, 11 Jan 2023 03:45:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673437505; cv=none; d=google.com; s=arc-20160816; b=qbVOWH6GnyQBLIetRkoFAjcpVqTRd6idrH0A8e6xNwAsbMESPnzFIZWThX/D1Fgbm7 zQSMX7Ej15t3jN0trR76h5DsFC4e8yCsjrUslCCJmtMD2gPkK0P5s1cgAzWWLsM+QJ9h 9djgsrJM5CJZqQX2aCx6qfmtrTetkcuGqWBV4jfQIapMENquQgGYpRvol6u1KnBorO3/ zkiq8rG22FVJ8YFW52K3gDSUj73YDjwYGUXkRTCmbErHwLSCIaWaAN0dzo42OLEJZ/Uj f/VXMnprK/Q1mggwPZex++dDE6b0K+e0LEGemoJbSfqLBU3GthJjK8XrQ1wDEJdG9hpo Y1lA== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=oH9vt83FVTay5mm3rIS7SlgtDXXGxJxNj0BGxkKfd2s=; b=MslPFcFxShOF/hY4C4IEWALODP2NYGt0rqN0dE8YrNTymeaZWMB2aYFB3PrhHVPftD zghbhiL/KBlEWkmyAAFXme+RJkauOaKagjsaI5umze8zrueAvJfOfjGM3W/8xHpxmVWQ lqgduziJFtGVOe9POTAZLa2Fbik2zJgGTz4F/xxB5vJxzgAYcDDnLu8T1bRe7+dfKib7 3Jwp995aoXEetMtlvOfJibhZpgSiuS+qGSh6HpMMZHn0M2aOT/8bxGoPWQ4kFVD2hB/l Er6y9fEpdUNJFW+EIPn2eZUFWlFXwao3L41046bYBhWOy5ehBiarxslRtSuNumR1iDJ/ +7VA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Wg4x6bfv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gt20-20020a1709072d9400b0078d4c9d77adsi16790422ejc.94.2023.01.11.03.44.41; Wed, 11 Jan 2023 03:45:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Wg4x6bfv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233284AbjAKLnd (ORCPT + 99 others); Wed, 11 Jan 2023 06:43:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38062 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229923AbjAKLm2 (ORCPT ); Wed, 11 Jan 2023 06:42:28 -0500 Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 577BD1AA1B for ; Wed, 11 Jan 2023 03:41:27 -0800 (PST) Received: by mail-pj1-x1032.google.com with SMTP id o1-20020a17090a678100b00219cf69e5f0so19739237pjj.2 for ; Wed, 11 Jan 2023 03:41:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oH9vt83FVTay5mm3rIS7SlgtDXXGxJxNj0BGxkKfd2s=; b=Wg4x6bfvkxTfPYAlmxDxvXJtxohXxtVWE6cbO6bG+wfAiroXDjoQq3gbHUJT2zTDQw E/UV7gwj4xckA4/JVrgrdY6CLiFH1c/0HQMFN9aqUCn/i3e4dPIMdAaohF7d9887/yvE cAxTsO6JIpTz2M89IuqxPUX04QGOeBw6jlkllTgVQJcj+QTtQgUZgx0oQ14eVfe8rjXD jViJwLb7gk8sILVD2hefT36N8F+Cj6l5JpO5pr7YP1QM/4etP81ewSNM777dv1QQr3Q7 x8OTqxog5q7+qnQ/NQhxU4JHjXCX+pe475L2HMmxJfy9kZDzRq/nRC19yxkpaEuIM39N 02KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oH9vt83FVTay5mm3rIS7SlgtDXXGxJxNj0BGxkKfd2s=; b=720vwBAOeUYuHfEhoScKwksn8bFhr8EhOgYT8yKtY08YnxdD6aeR35r5gfuSxLDtmD Xzinx67MGRHDiYZeSicGIMmNKcWFVr8Ko6j1BOirmD65V9KwiC9j/OxQqkNoc554rgKH tua5vSNfGOWXqEReXFu7wx56gEtiX8OI+M6ebn1hlL2cy+RPacOG9UWA/Mttg9i7FjmX iYqGPZFu7PXf8ZcACYZVjuRPgyNq20nApsUt/CFSzSLgLoTk/Ba20+e1X1DR/OGUmQTf nIzopo4p/XXXC4eAQ9sXCcm/fXxq6od9KzUmJsuynLpvTmSaGbMy/5ItKcBPFZuVaAXv fX8w== X-Gm-Message-State: AFqh2kq87ucGlMXfLADc9Nx/P1EoNRKeci5sOzQ2t+a+hAtdRmWYYk17 rz8+QCm34wiA6iECffSlJYN5 X-Received: by 2002:a17:902:7d8e:b0:194:4981:2018 with SMTP id a14-20020a1709027d8e00b0019449812018mr1972566plm.60.1673437286659; Wed, 11 Jan 2023 03:41:26 -0800 (PST) Received: from localhost.localdomain ([117.217.177.1]) by smtp.gmail.com with ESMTPSA id u14-20020a170902e5ce00b0018958a913a2sm9942688plf.223.2023.01.11.03.41.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jan 2023 03:41:25 -0800 (PST) From: Manivannan Sadhasivam To: kishon@kernel.org, lpieralisi@kernel.org, bhelgaas@google.com Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, kw@linux.com, robh@kernel.org, vidyas@nvidia.com, vigneshr@ti.com, Manivannan Sadhasivam , Kishon Vijay Abraham I Subject: [RESEND v4 3/5] PCI: endpoint: Use a separate lock for protecting epc->pci_epf list Date: Wed, 11 Jan 2023 17:10:57 +0530 Message-Id: <20230111114059.6553-4-manivannan.sadhasivam@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230111114059.6553-1-manivannan.sadhasivam@linaro.org> References: <20230111114059.6553-1-manivannan.sadhasivam@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754726405751525446?= X-GMAIL-MSGID: =?utf-8?q?1754726405751525446?= The EPC controller maintains a list of EPF drivers added to it. For protecting this list against the concurrent accesses, the epc->lock (used for protecting epc_ops) has been used so far. Since there were no users trying to use epc_ops and modify the pci_epf list simultaneously, this was not an issue. But with the addition of callback mechanism for passing the events, this will be a problem. Because the pci_epf list needs to be iterated first for getting hold of the EPF driver and then the relevant event specific callback needs to be called for the driver. If the same epc->lock is used, then it will result in a deadlock scenario. For instance, ... mutex_lock(&epc->lock); list_for_each_entry(epf, &epc->pci_epf, list) { epf->event_ops->core_init(epf); | |-> pci_epc_set_bar(); | |-> mutex_lock(&epc->lock) # DEADLOCK ... So to fix this issue, use a separate lock called "list_lock" for protecting the pci_epf list against the concurrent accesses. This lock will also be used by the callback mechanism. Acked-by: Kishon Vijay Abraham I Signed-off-by: Manivannan Sadhasivam --- drivers/pci/endpoint/pci-epc-core.c | 9 +++++---- include/linux/pci-epc.h | 2 ++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci-epc-core.c index 2542196e8c3d..2c023db8f51c 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -613,7 +613,7 @@ int pci_epc_add_epf(struct pci_epc *epc, struct pci_epf *epf, if (type == SECONDARY_INTERFACE && epf->sec_epc) return -EBUSY; - mutex_lock(&epc->lock); + mutex_lock(&epc->list_lock); func_no = find_first_zero_bit(&epc->function_num_map, BITS_PER_LONG); if (func_no >= BITS_PER_LONG) { @@ -640,7 +640,7 @@ int pci_epc_add_epf(struct pci_epc *epc, struct pci_epf *epf, list_add_tail(list, &epc->pci_epf); ret: - mutex_unlock(&epc->lock); + mutex_unlock(&epc->list_lock); return ret; } @@ -672,11 +672,11 @@ void pci_epc_remove_epf(struct pci_epc *epc, struct pci_epf *epf, list = &epf->sec_epc_list; } - mutex_lock(&epc->lock); + mutex_lock(&epc->list_lock); clear_bit(func_no, &epc->function_num_map); list_del(list); epf->epc = NULL; - mutex_unlock(&epc->lock); + mutex_unlock(&epc->list_lock); } EXPORT_SYMBOL_GPL(pci_epc_remove_epf); @@ -777,6 +777,7 @@ __pci_epc_create(struct device *dev, const struct pci_epc_ops *ops, } mutex_init(&epc->lock); + mutex_init(&epc->list_lock); INIT_LIST_HEAD(&epc->pci_epf); ATOMIC_INIT_NOTIFIER_HEAD(&epc->notifier); diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h index a48778e1a4ee..fe729dfe509b 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -122,6 +122,7 @@ struct pci_epc_mem { * struct pci_epc - represents the PCI EPC device * @dev: PCI EPC device * @pci_epf: list of endpoint functions present in this EPC device + * list_lock: Mutex for protecting pci_epf list * @ops: function pointers for performing endpoint operations * @windows: array of address space of the endpoint controller * @mem: first window of the endpoint controller, which corresponds to @@ -139,6 +140,7 @@ struct pci_epc_mem { struct pci_epc { struct device dev; struct list_head pci_epf; + struct mutex list_lock; const struct pci_epc_ops *ops; struct pci_epc_mem **windows; struct pci_epc_mem *mem; From patchwork Wed Jan 11 11:40:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manivannan Sadhasivam X-Patchwork-Id: 41928 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp3271027wrt; Wed, 11 Jan 2023 03:46:09 -0800 (PST) X-Google-Smtp-Source: AMrXdXvrUS9LoX71nM++ixeNvPMdtTaSOOXsjIT/tC9Qnji4VXaQpEj2NP49ov2sbN20b1DkiiJJ X-Received: by 2002:a05:6a20:7da3:b0:ad:d982:4538 with SMTP id v35-20020a056a207da300b000add9824538mr107714159pzj.55.1673437568800; Wed, 11 Jan 2023 03:46:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673437568; cv=none; d=google.com; s=arc-20160816; b=jbVwc7PjR7Tm+ge8jHZlQIoU0kl+iIAvizxQ5lKpfgdNixTowC/7pPpjclWFKZ6Hl8 lVdMAr5bLonZtSST0OgM4wt3QMlY2abNmTXc3WQ51XZHz1S1mdJzqD0Y1/wBS4T+1Uzl tzVrEGYdBpT1P4zqS+YeYx1AmqJ+PFDCRrkcx1OaVZlNVH0NNcENbuL1m8AmcuBkc5PY 5shJPoSwHOrNxOTIanNsmgfSUUhalYBTecyHxUlzmyNgNj2ib5I95hmT4pIF0sM1DUju WYZOQRo3obwWZvByg6xblNtZu5HJm0KPTFnjV5jgLVa2MOy/tIZrA5VoHUY8Mfdv7zBd 519Q== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=MtspVR08c2Hzxz4d1S9naljhmqqgR/iHq8R5vgVdVO8=; b=hK0pPy/qnaZCfPGOPUE+OxP8aEk9JPhKTr7idBnk14GvOQg53xEcMZorB+gpxiwljU pJXMEQc4eNVzZJxhXYYheJtqPGIYgAU7fHiLQ9DOlUMHjLvbceuixQsCHwGLMkaZxqjf ngsoS6PHGel993Tj33MrOrsvszMSFv7s0+rEa3oX5H6D+oQbwXK3f7I61LpBXTrESheX sEETZY5gX8CTDS5MYJhrJXli3KwROvFS7Scu+chG5P7sZm3hDb3I26RmpmpD8dX1YdkY I39p5gqg1SWDy9jbJZlHi0VV4sVFYVRlPb67xpjXykynD+c+BRMsZd8DmwsvialWsNWK os2g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=BmCUr8xA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d11-20020a631d0b000000b0046040a8be4esi13860182pgd.754.2023.01.11.03.45.55; Wed, 11 Jan 2023 03:46:08 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=BmCUr8xA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231888AbjAKLoa (ORCPT + 99 others); Wed, 11 Jan 2023 06:44:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38140 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232336AbjAKLml (ORCPT ); Wed, 11 Jan 2023 06:42:41 -0500 Received: from mail-pj1-x1035.google.com (mail-pj1-x1035.google.com [IPv6:2607:f8b0:4864:20::1035]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5C75E1AA3C for ; Wed, 11 Jan 2023 03:41:32 -0800 (PST) Received: by mail-pj1-x1035.google.com with SMTP id z4-20020a17090a170400b00226d331390cso16819753pjd.5 for ; Wed, 11 Jan 2023 03:41:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MtspVR08c2Hzxz4d1S9naljhmqqgR/iHq8R5vgVdVO8=; b=BmCUr8xANyYLZih9JbA/unTaGgYJvNd65uoCjO9Jag5rfVgVoLxKCos6Lh3ASfL/Ph q2T6gg2lPhM+JfUoSA8H+mQ1BIhJMLUT/fLFs4FHKaJyNTBDK5uPC0iOPNy61/JyLxiL K7Lq821g/WollalKKe/N1m0kdTUmLxla3LbhGh2LMwAcF9X7ZOR0d7yr2DVbD9llE2MV 20Aqe/t8N0I/pBHhDc4OihxLJQoVfZGnr9TCb8/VSyMNzdxMFmOkmCCuTfossncA94tX DNMMOY5rEL+3htAuHLe0U9V1xcJtt0U1FW6rAvKXZciyr679EnXsyQHVK5je8td7anoS f8rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MtspVR08c2Hzxz4d1S9naljhmqqgR/iHq8R5vgVdVO8=; b=b1+t9lOBttHLSXCunHaGGtT3L/djNRMEtonvRqlyPqhQpvRoIBqVklr+1lK+ZNPmVV TIlqpxa0eXcwgj+NG4gsbNGLRCy8pf6/vN1+I3oJ9qVcGTzqFtpjgxJrxB0rblNeZAlN jxy0ijMSvkEpsDwKC8SCoD786o6EoeLojaAc1SvGSfx1M9ywj8FZY9lSmQ/aGJSCVSt7 059jo/pllHw+sY81oNaWwLBxGegAoKR0nxqQUllIddIMjlILQbrpGc6FuzDfsu+eZLQI wGIbaB3qvCWmqL5fviODv2c+9wDs1uMcjwJrOEcZkCW1FZ2grf7LyUpnkk+KfCt5r6fa y/Wg== X-Gm-Message-State: AFqh2kpbaD+y3YmWxDwSlCYKLJ3v51y5DDyNpGKnrao22UqsTH+kg242 MfUDRB+Cpi781oyDQ62lsZQx X-Received: by 2002:a17:902:6b89:b0:18f:6cb:1730 with SMTP id p9-20020a1709026b8900b0018f06cb1730mr70863669plk.26.1673437291848; Wed, 11 Jan 2023 03:41:31 -0800 (PST) Received: from localhost.localdomain ([117.217.177.1]) by smtp.gmail.com with ESMTPSA id u14-20020a170902e5ce00b0018958a913a2sm9942688plf.223.2023.01.11.03.41.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jan 2023 03:41:30 -0800 (PST) From: Manivannan Sadhasivam To: kishon@kernel.org, lpieralisi@kernel.org, bhelgaas@google.com Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, kw@linux.com, robh@kernel.org, vidyas@nvidia.com, vigneshr@ti.com, Manivannan Sadhasivam Subject: [RESEND v4 4/5] PCI: endpoint: Use callback mechanism for passing events from EPC to EPF Date: Wed, 11 Jan 2023 17:10:58 +0530 Message-Id: <20230111114059.6553-5-manivannan.sadhasivam@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230111114059.6553-1-manivannan.sadhasivam@linaro.org> References: <20230111114059.6553-1-manivannan.sadhasivam@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754726472211354590?= X-GMAIL-MSGID: =?utf-8?q?1754726472211354590?= Instead of using the notifiers for passing the events from EPC to EPF, let's introduce a callback based mechanism where the EPF drivers can populate relevant callbacks for EPC events they want to subscribe. The use of notifiers in kernel is not recommended if there is a real link between the sender and receiver, like in this case. Also, the existing atomic notifier forces the notification functions to be in atomic context while the caller may be in non-atomic context. For instance, the two in-kernel users of the notifiers, pcie-qcom and pcie-tegra194, both are calling the notifier functions in non-atomic context (from threaded IRQ handlers). This creates a sleeping in atomic context issue with the existing EPF_TEST driver that calls the EPC APIs that may sleep. For all these reasons, let's get rid of the notifier chains and use the simple callback mechanism for signalling the events from EPC to EPF drivers. This preserves the context of the caller and avoids the latency of going through a separate interface for triggering the notifications. As a first step of the transition, the core_init() callback is introduced in this commit, that'll replace the existing CORE_INIT notifier used for signalling the init complete event from EPC. During the occurrence of the event, EPC will go over the list of EPF drivers attached to it and will call the core_init() callback if available. Signed-off-by: Manivannan Sadhasivam Acked-by: Kishon Vijay Abraham I Signed-off-by: Manivannan Sadhasivam --- drivers/pci/endpoint/functions/pci-epf-test.c | 13 ++++++------- drivers/pci/endpoint/pci-epc-core.c | 11 ++++++++++- include/linux/pci-epf.h | 11 ++++++++++- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c index 55283d2379a6..2fe161747e51 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -826,20 +826,17 @@ static int pci_epf_test_core_init(struct pci_epf *epf) return 0; } +static const struct pci_epc_event_ops pci_epf_test_event_ops = { + .core_init = pci_epf_test_core_init, +}; + static int pci_epf_test_notifier(struct notifier_block *nb, unsigned long val, void *data) { struct pci_epf *epf = container_of(nb, struct pci_epf, nb); struct pci_epf_test *epf_test = epf_get_drvdata(epf); - int ret; switch (val) { - case CORE_INIT: - ret = pci_epf_test_core_init(epf); - if (ret) - return NOTIFY_BAD; - break; - case LINK_UP: queue_delayed_work(kpcitest_workqueue, &epf_test->cmd_handler, msecs_to_jiffies(1)); @@ -1010,6 +1007,8 @@ static int pci_epf_test_probe(struct pci_epf *epf) INIT_DELAYED_WORK(&epf_test->cmd_handler, pci_epf_test_cmd_handler); + epf->event_ops = &pci_epf_test_event_ops; + epf_set_drvdata(epf, epf_test); return 0; } diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci-epc-core.c index 2c023db8f51c..7cb9587c6548 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -707,10 +707,19 @@ EXPORT_SYMBOL_GPL(pci_epc_linkup); */ void pci_epc_init_notify(struct pci_epc *epc) { + struct pci_epf *epf; + if (!epc || IS_ERR(epc)) return; - atomic_notifier_call_chain(&epc->notifier, CORE_INIT, NULL); + mutex_lock(&epc->list_lock); + list_for_each_entry(epf, &epc->pci_epf, list) { + mutex_lock(&epf->lock); + if (epf->event_ops && epf->event_ops->core_init) + epf->event_ops->core_init(epf); + mutex_unlock(&epf->lock); + } + mutex_unlock(&epc->list_lock); } EXPORT_SYMBOL_GPL(pci_epc_init_notify); diff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h index 009a07147c61..fa629c191f00 100644 --- a/include/linux/pci-epf.h +++ b/include/linux/pci-epf.h @@ -18,7 +18,6 @@ struct pci_epf; enum pci_epc_interface_type; enum pci_notify_event { - CORE_INIT, LINK_UP, }; @@ -72,6 +71,14 @@ struct pci_epf_ops { struct config_group *group); }; +/** + * struct pci_epf_event_ops - Callbacks for capturing the EPC events + * @core_init: Callback for the EPC initialization complete event + */ +struct pci_epc_event_ops { + int (*core_init)(struct pci_epf *epf); +}; + /** * struct pci_epf_driver - represents the PCI EPF driver * @probe: ops to perform when a new EPF device has been bound to the EPF driver @@ -139,6 +146,7 @@ struct pci_epf_bar { * @is_vf: true - virtual function, false - physical function * @vfunction_num_map: bitmap to manage virtual function number * @pci_vepf: list of virtual endpoint functions associated with this function + * @event_ops: Callbacks for capturing the EPC events */ struct pci_epf { struct device dev; @@ -168,6 +176,7 @@ struct pci_epf { unsigned int is_vf; unsigned long vfunction_num_map; struct list_head pci_vepf; + const struct pci_epc_event_ops *event_ops; }; /** From patchwork Wed Jan 11 11:40:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manivannan Sadhasivam X-Patchwork-Id: 41929 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp3271064wrt; Wed, 11 Jan 2023 03:46:14 -0800 (PST) X-Google-Smtp-Source: AMrXdXsISQxsf5Slc5NAlOSb/P6k170RG7OIiq+ocvrs2cWKVldiX5klUBlEpMu4PaRHg1Tg9sSP X-Received: by 2002:a17:902:f24b:b0:193:29db:e0c0 with SMTP id j11-20020a170902f24b00b0019329dbe0c0mr10115673plc.54.1673437574574; Wed, 11 Jan 2023 03:46:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673437574; cv=none; d=google.com; s=arc-20160816; b=Z5heYAothr6r+YKDKAzHimJ3QX85PJ5wd+aqUXOPxNF+2WgFReRlcqfR8ZDCxVR8im 4BHfZ2xlMhTnxrUX1tNuPT/hntKLjky01APfZTqwO7MCUFuSX4pldHTau5nCl283jUhI CSvfgGpBRGPnuWHUUIYK2IfVCbltGmbldeJ4CvPvZtlxHh/xxDts5hZb293MMV0PEcAm 4lQjAiueg1I5WHfxUwFiivpu5BocnoSZsajQof9lEe9PyenXZ7Ubrqo7Qxb9SDKl5DHJ C+L0ImdCFy/nY6LTMLntqfMqomVkDtptkxnhOH66eGE7yNwhOxaHPvDrUaT6PYM26gwY y/Cw== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=AMFBNcMsSwUAtzp9lzITidEj8Y0BrN9scArVi0VzClw=; b=mgMCMx7aR9e54MnFMN3BuJwaFywFnLBCoMdDcBvhxVAs5y6o/uHp7DO5oyKSzk4Nvy 2CgOrJhOXcAPXWaZyrVWulna+swISL7JN/FIReNDqhf4gDmkeDgZLtSLEd3xCzLt70yb ahKi7MlmjPutnMugGzZ338FxQ4c47NCMDi7Vh6jE2ffeMECvNxlsXHiQVSYF4UK9id7s j7+fdwgwA1za9LOOZCsjyW0fJ3lDrvqPt+QhegNwsglCJ/9Tkii0qs2+g6z2iAVsneas jvIaGt6bqYPDjibe0DiY/INIdJof3104zo9OOaeJcUcSjzfuESFQuk523pWaPFivAkKZ Zr7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Cj847Bbb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j3-20020a170903028300b00188b9b4139asi11550732plr.210.2023.01.11.03.46.01; Wed, 11 Jan 2023 03:46:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Cj847Bbb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232986AbjAKLog (ORCPT + 99 others); Wed, 11 Jan 2023 06:44:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231573AbjAKLnB (ORCPT ); Wed, 11 Jan 2023 06:43:01 -0500 Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7165CEE18 for ; Wed, 11 Jan 2023 03:41:37 -0800 (PST) Received: by mail-pj1-x102a.google.com with SMTP id bj3so12395339pjb.0 for ; Wed, 11 Jan 2023 03:41:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AMFBNcMsSwUAtzp9lzITidEj8Y0BrN9scArVi0VzClw=; b=Cj847BbbdZTsyxKXL070RY+vEBtesJT7pHaPuk/PL6G1J+O6r9G54Ulcmj0WjsR4Gi SfkFuyDlZMtwyiamIKzhFjVDDzEwjFfOTgvQf67Ud1kHXHopN4uMEFUEJDUk+L9u5E6s KaY0QaNTaUWXL1o4J14bsvHz8QB4qaUZnfRBjcc3mgB5fOZ2pw4tk4tdD4T+IVN0iqqj Ese9sy+LW0DNjRHI2jDnEwGq4+sGyStTCi7DGTFmU85CR7bDqKK+izsnO+cMONv2V8rq RQoWGEcJK6y0MUd8EdouvXL3+ekNyMKnX/8rHtbvIhXwDJQICzz5u8Dc9vlH+WhG45Y9 1rbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AMFBNcMsSwUAtzp9lzITidEj8Y0BrN9scArVi0VzClw=; b=svy0EIouhvshhl9E2o1XJ2VswhVNjYdhlnsOJ97lp3etP5px8evxu0Xxr3DrBDbgpq fIYZr86yGxdJQpzOx24jCeAp998fYJhTees9vEHWwJEQihnEmA74Kh+ddZxONqBfZuUb wco/niAAT/0uLMOuGcM0KMHIpASGkwtg69PPeYC2NAaqe4Ipt7tBYBrEj3z1QCz7dzQ0 mCdX7sEnHh9FhMAue6dcN/vSr9LkLEXLD5Tt9xArD1g2lAPmdhL96tMi6KS8uZ4rVbtX UdcW68oO/+nfbAoqUQXuXb0nBifXMHpr/i/zkLhSZIARHhg5/WkVtn8pllbQ4Cg5zC7r Mllw== X-Gm-Message-State: AFqh2kqYx6oh9srmjtWMssvoyu3KVRrkNiOwqYpYty+iiQgNtXulEhUs 8zVs3iUqxNCLXgHEVvoZAvB5KaeIFOF0geU= X-Received: by 2002:a17:903:2685:b0:192:ca49:4c59 with SMTP id jf5-20020a170903268500b00192ca494c59mr31763833plb.16.1673437296915; Wed, 11 Jan 2023 03:41:36 -0800 (PST) Received: from localhost.localdomain ([117.217.177.1]) by smtp.gmail.com with ESMTPSA id u14-20020a170902e5ce00b0018958a913a2sm9942688plf.223.2023.01.11.03.41.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jan 2023 03:41:35 -0800 (PST) From: Manivannan Sadhasivam To: kishon@kernel.org, lpieralisi@kernel.org, bhelgaas@google.com Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, kw@linux.com, robh@kernel.org, vidyas@nvidia.com, vigneshr@ti.com, Manivannan Sadhasivam Subject: [RESEND v4 5/5] PCI: endpoint: Use link_up() callback in place of LINK_UP notifier Date: Wed, 11 Jan 2023 17:10:59 +0530 Message-Id: <20230111114059.6553-6-manivannan.sadhasivam@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230111114059.6553-1-manivannan.sadhasivam@linaro.org> References: <20230111114059.6553-1-manivannan.sadhasivam@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754726478244752840?= X-GMAIL-MSGID: =?utf-8?q?1754726478244752840?= As a part of the transition towards callback mechanism for signalling the events from EPC to EPF, let's use the link_up() callback in the place of the LINK_UP notifier. This also removes the notifier support completely from the PCI endpoint framework. Signed-off-by: Manivannan Sadhasivam Acked-by: Kishon Vijay Abraham I Signed-off-by: Manivannan Sadhasivam --- drivers/pci/endpoint/functions/pci-epf-test.c | 33 ++++++------------- drivers/pci/endpoint/pci-epc-core.c | 12 +++++-- include/linux/pci-epc.h | 8 ----- include/linux/pci-epf.h | 8 ++--- 4 files changed, 22 insertions(+), 39 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c index 2fe161747e51..39fb3774aecf 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -826,30 +826,21 @@ static int pci_epf_test_core_init(struct pci_epf *epf) return 0; } -static const struct pci_epc_event_ops pci_epf_test_event_ops = { - .core_init = pci_epf_test_core_init, -}; - -static int pci_epf_test_notifier(struct notifier_block *nb, unsigned long val, - void *data) +int pci_epf_test_link_up(struct pci_epf *epf) { - struct pci_epf *epf = container_of(nb, struct pci_epf, nb); struct pci_epf_test *epf_test = epf_get_drvdata(epf); - switch (val) { - case LINK_UP: - queue_delayed_work(kpcitest_workqueue, &epf_test->cmd_handler, - msecs_to_jiffies(1)); - break; - - default: - dev_err(&epf->dev, "Invalid EPF test notifier event\n"); - return NOTIFY_BAD; - } + queue_delayed_work(kpcitest_workqueue, &epf_test->cmd_handler, + msecs_to_jiffies(1)); - return NOTIFY_OK; + return 0; } +static const struct pci_epc_event_ops pci_epf_test_event_ops = { + .core_init = pci_epf_test_core_init, + .link_up = pci_epf_test_link_up, +}; + static int pci_epf_test_alloc_space(struct pci_epf *epf) { struct pci_epf_test *epf_test = epf_get_drvdata(epf); @@ -976,12 +967,8 @@ static int pci_epf_test_bind(struct pci_epf *epf) if (ret) epf_test->dma_supported = false; - if (linkup_notifier || core_init_notifier) { - epf->nb.notifier_call = pci_epf_test_notifier; - pci_epc_register_notifier(epc, &epf->nb); - } else { + if (!linkup_notifier && !core_init_notifier) queue_work(kpcitest_workqueue, &epf_test->cmd_handler.work); - } return 0; } diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci-epc-core.c index 7cb9587c6548..c9c3c6b58a9f 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -690,10 +690,19 @@ EXPORT_SYMBOL_GPL(pci_epc_remove_epf); */ void pci_epc_linkup(struct pci_epc *epc) { + struct pci_epf *epf; + if (!epc || IS_ERR(epc)) return; - atomic_notifier_call_chain(&epc->notifier, LINK_UP, NULL); + mutex_lock(&epc->list_lock); + list_for_each_entry(epf, &epc->pci_epf, list) { + mutex_lock(&epf->lock); + if (epf->event_ops && epf->event_ops->link_up) + epf->event_ops->link_up(epf); + mutex_unlock(&epf->lock); + } + mutex_unlock(&epc->list_lock); } EXPORT_SYMBOL_GPL(pci_epc_linkup); @@ -788,7 +797,6 @@ __pci_epc_create(struct device *dev, const struct pci_epc_ops *ops, mutex_init(&epc->lock); mutex_init(&epc->list_lock); INIT_LIST_HEAD(&epc->pci_epf); - ATOMIC_INIT_NOTIFIER_HEAD(&epc->notifier); device_initialize(&epc->dev); epc->dev.class = pci_epc_class; diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h index fe729dfe509b..301bb0e53707 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -135,7 +135,6 @@ struct pci_epc_mem { * @group: configfs group representing the PCI EPC device * @lock: mutex to protect pci_epc ops * @function_num_map: bitmap to manage physical function number - * @notifier: used to notify EPF of any EPC events (like linkup) */ struct pci_epc { struct device dev; @@ -151,7 +150,6 @@ struct pci_epc { /* mutex to protect against concurrent access of EP controller */ struct mutex lock; unsigned long function_num_map; - struct atomic_notifier_head notifier; }; /** @@ -194,12 +192,6 @@ static inline void *epc_get_drvdata(struct pci_epc *epc) return dev_get_drvdata(&epc->dev); } -static inline int -pci_epc_register_notifier(struct pci_epc *epc, struct notifier_block *nb) -{ - return atomic_notifier_chain_register(&epc->notifier, nb); -} - struct pci_epc * __devm_pci_epc_create(struct device *dev, const struct pci_epc_ops *ops, struct module *owner); diff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h index fa629c191f00..a215dc8ce693 100644 --- a/include/linux/pci-epf.h +++ b/include/linux/pci-epf.h @@ -17,10 +17,6 @@ struct pci_epf; enum pci_epc_interface_type; -enum pci_notify_event { - LINK_UP, -}; - enum pci_barno { NO_BAR = -1, BAR_0, @@ -74,9 +70,11 @@ struct pci_epf_ops { /** * struct pci_epf_event_ops - Callbacks for capturing the EPC events * @core_init: Callback for the EPC initialization complete event + * @link_up: Callback for the EPC link up event */ struct pci_epc_event_ops { int (*core_init)(struct pci_epf *epf); + int (*link_up)(struct pci_epf *epf); }; /** @@ -134,7 +132,6 @@ struct pci_epf_bar { * @epf_pf: the physical EPF device to which this virtual EPF device is bound * @driver: the EPF driver to which this EPF device is bound * @list: to add pci_epf as a list of PCI endpoint functions to pci_epc - * @nb: notifier block to notify EPF of any EPC events (like linkup) * @lock: mutex to protect pci_epf_ops * @sec_epc: the secondary EPC device to which this EPF device is bound * @sec_epc_list: to add pci_epf as list of PCI endpoint functions to secondary @@ -162,7 +159,6 @@ struct pci_epf { struct pci_epf *epf_pf; struct pci_epf_driver *driver; struct list_head list; - struct notifier_block nb; /* mutex to protect against concurrent access of pci_epf_ops */ struct mutex lock;