From patchwork Tue Jan 24 07:11:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manivannan Sadhasivam X-Patchwork-Id: 47570 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2010546wrn; Mon, 23 Jan 2023 23:16:43 -0800 (PST) X-Google-Smtp-Source: AMrXdXtRIrHkTTkxQ1608AS8B/vb6lGEOfRjaYmJ2EMIm4Mn3a/w2fSoiO/cFgwbBJLF3z0grueR X-Received: by 2002:a17:906:5f82:b0:871:45b2:19fb with SMTP id a2-20020a1709065f8200b0087145b219fbmr27267066eju.25.1674544602836; Mon, 23 Jan 2023 23:16:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674544602; cv=none; d=google.com; s=arc-20160816; b=NVlc5YLiGiEF4MTbt9wbQZogYtixWy623qrtaHOnuRnfJCC43Ri3srXAZwJ2AJuuro PWhHH7pXFj30b5pMZLIHWA6MtlQ/LIROCXXCx7jtETKYHVDpy9895Cs+5K+qpcWrSOMm wLN82L5zy81cpbj5F9/ianLLwBMd5wxtXzdOfZBN55yK4wdd9oo5aT/h8KGSI4IEbNtP Oyh3Svh+K8eqAqRHZU0aaJha23+K4JzSPoghvUs0RkjDAV0/O7n4qJo2/AFtLJuaJI5e bFXcu5+Lje05/hmC7M1qK+2+4wfxOsUa/aV7Fcthr/1kUPUM1ZRZCSaOnwGKasP53Yis 1oIg== 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=xEt7wE626W1RDE5BonKFDDP1VDNFtFRb9yeAc7Gh87w/rYyteLAV2fChm4p18B3IKm uADnTTTecxuIECcywhRLR6cygnHHU3a7rLq8qgluD7l+QJ9iF0QBKehE699Regh8AQoB WPDS5vNXd21HsY93SOgUJvP9kgUglZSTsXMDqlr2PYocfBmYm43cqr0RJL5t4cxy0qNO zA15ybZe6PFkJWZ4zzV63PN1iEKmL+rB3SbDgNMEn6F1TCO4fzbCjKYFI6Hy0yDzya09 FkohsPRObbiL8s8EZhyVLMxpQW07weSQYpkXAGZfG01hPd4/xX21hf4whZBhv7Caa7dh x2eg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=EMi6+ex7; 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 az4-20020a170907904400b008711359b923si1432439ejc.237.2023.01.23.23.16.18; Mon, 23 Jan 2023 23:16:42 -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=EMi6+ex7; 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 S233442AbjAXHM3 (ORCPT + 99 others); Tue, 24 Jan 2023 02:12:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45706 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233405AbjAXHM2 (ORCPT ); Tue, 24 Jan 2023 02:12: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 DDAF33EC68 for ; Mon, 23 Jan 2023 23:12:25 -0800 (PST) Received: by mail-pj1-x1032.google.com with SMTP id h5-20020a17090a9c0500b0022bb85eb35dso8806469pjp.3 for ; Mon, 23 Jan 2023 23:12:25 -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=EMi6+ex7LzvEf+4jAa4H1gDNLyufeXIPS3/cQkdUnOQT3uSqT+hHVa6hxSDUL8gPee Th/9VuQ5pV8OYO1p7QPrpnSsS2KusxlEKxmEovQ2hd8MUrtTgWOgPm8PN9WkwZ/Wao+a 7rWQl7tuLVJRSVVTyyYPzHQF4AFsbAnoNEsnbk0SBx3mbMRbFfbIM5JV8sZINxhQJCtL kWZK94ri9PpSkD2x7ALbqXqp0e9gIKQ3YAiAyDijsMRMPRol57KKDBthJX30QQcgXXMA y3GSdGoWFZD1IwJJaZ40AlZ9GqHXMMG7Wwsdo5fxLCNaZLTozQZ4hliIzeoTzbBZBbsj uI5Q== 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=bG1LOf3JBJuEHLInn+w+LKQndhuGsMuCYJG/S98yiEl9FKczYkK7nW3ItlvyJyhVgU 4kWc/Uod+z4TCtnnE9eU3usJHLiS192jPvNK3CmBOkNka89Cn9J0PYzYwvoRLLMSDfPA h3USrgZRA9FWxje2b7uVU53RQWBGbBnYEF96jxi6QDhg3IwcyUlJ+8N5SmEwsbli5kfl En7x4DNI7dCFUmziX+5Jp2yQ0pp842bUv3B79pFf+eRF/vxi6MPi5LskMe5BtYwWva7V GmSrif/oM+1DhXUz87OIesNY7z2smz62tVLVjNpzgpmCc007Y4WYU7BK+uXDR4FKyAu6 O4bg== X-Gm-Message-State: AO0yUKW9ZRuAYnGZJXiPOoaUHk3juJ5nCVZGCkUOvK1+d8FtvvBFImOq e7I4zQ/4J5Ll7jgi7sS5GDMK X-Received: by 2002:a17:90a:191a:b0:22b:e59c:d50d with SMTP id 26-20020a17090a191a00b0022be59cd50dmr2804915pjg.15.1674544345302; Mon, 23 Jan 2023 23:12:25 -0800 (PST) Received: from localhost.localdomain ([117.193.209.165]) by smtp.gmail.com with ESMTPSA id 7-20020a17090a174700b00219220edf0dsm736041pjm.48.2023.01.23.23.12.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 23:12:24 -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: [PATCH v5 1/5] PCI: dra7xx: Use threaded IRQ handler for "dra7xx-pcie-main" IRQ Date: Tue, 24 Jan 2023 12:41:54 +0530 Message-Id: <20230124071158.5503-2-manivannan.sadhasivam@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230124071158.5503-1-manivannan.sadhasivam@linaro.org> References: <20230124071158.5503-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?1755887281395837225?= X-GMAIL-MSGID: =?utf-8?q?1755887281395837225?= 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 Tue Jan 24 07:11: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: 47571 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2010700wrn; Mon, 23 Jan 2023 23:17:16 -0800 (PST) X-Google-Smtp-Source: AMrXdXukiJMc9X0JA2mXFyTs4RBloOWDm/KAyvzEqSSOZyei3EbkeQKdnADscNjnFRB0LDrCqUWJ X-Received: by 2002:a17:906:a058:b0:84d:4e9b:ace5 with SMTP id bg24-20020a170906a05800b0084d4e9bace5mr26306147ejb.67.1674544636502; Mon, 23 Jan 2023 23:17:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674544636; cv=none; d=google.com; s=arc-20160816; b=xmeBiC6GaYs0pmYBjxYgIZsO56mzgHuYNbt+x9FQSnf+BQbtr+ZRE7yNIVP2q+2F41 TRi/JNp8kSTj6T+Fhxaew188GnPQWF5zj3L0bGI54Getgz4sIh5kjK+ThRWx4fhC7rGh 1jZydxSIe5Qx+AjXZBGMULnobXSrvy+LVl2BPjYUjgFxu0QmB1Jb/4UGU169ZMcgVzOx dlMP3tgC/RCm+Rop+/FgMmm69u+hbOgyl6aCDC+MCxBMdknUjqWD2JFcAM6caF8so0vA q37eRsP3s97In6X19MqtcK8PLJMYvlpZKinOmyEXu5ER/bZgxzJGpMAfLwV2SxthngQS pVeA== 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=i6TJHrpo+wQjh8G+Bpvtwzy9BlHNumqlezIB2u99WO4=; b=usmaVas1fF/7I+p48Cg0apDiwv4RtAlDTJBzs9q8DXr1Mzv1zBO2Fy01str8t8Cjia BTy4e72h8nEFWG121JQVN4VRbCECNsw1lGHbrV9L2WexFhC6UHTDepP5gZAtEMbxZZq8 A/V18eksYBFv6u0FlZlf1jmlFQsVcI3r8gSyB1aF13QjRnHGFqOrwE59DtBo75XH4Nde 7tdp7gcTicFz+pU4Mo2WHX3dJFjUhpkqsa+9YgdDIIWC24EQ7i5ixFpIfydWzQ5n/HJP lp9TVbHWvARt++qoOb+qdbQALuMuvGZkE1HjP3Fi1VHoa7XDrjksKo0ZDDw1fEpknnff j7FA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=GeJ+GXDW; 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 fn18-20020a1709069d1200b007c4fcbfe7eesi1534678ejc.549.2023.01.23.23.16.52; Mon, 23 Jan 2023 23:17:16 -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=GeJ+GXDW; 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 S233459AbjAXHMh (ORCPT + 99 others); Tue, 24 Jan 2023 02:12:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233454AbjAXHMe (ORCPT ); Tue, 24 Jan 2023 02:12:34 -0500 Received: from mail-pl1-x633.google.com (mail-pl1-x633.google.com [IPv6:2607:f8b0:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 725463E614 for ; Mon, 23 Jan 2023 23:12:31 -0800 (PST) Received: by mail-pl1-x633.google.com with SMTP id c6so13898740pls.4 for ; Mon, 23 Jan 2023 23:12:31 -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=i6TJHrpo+wQjh8G+Bpvtwzy9BlHNumqlezIB2u99WO4=; b=GeJ+GXDW0L3U8uA1nL30L/UfUQeHnVsWfi1yq4/NGW6iWDCHRbYG/jYCuPOmtuPH/v iHGQa+an4s606maYVETnrsK1eEWZqJeiMdC4cI8v4m3UkUx0hFPATyB5xmHFzidk+SxB 5PRh1/pe6WJG8FjRS3dAB8wkH7XAGaynp9aMtkqOoS2YwW+8U7LnCvsSMpqQhyWLWkAi z7GVJN5c39WrC2ifzNmeXcN4E2vArsbzCiCmoWRpIsfpQNoo3s6HqqlhyjjPy+K69atF uxFFSGJ9TOO610N1+G62qJ/wDNVYhOWlN3HU5o2Ct+lOxcVLZ0ywS0gKCpzn23dhzVbA /llA== 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=i6TJHrpo+wQjh8G+Bpvtwzy9BlHNumqlezIB2u99WO4=; b=gw/vJgLx7/tGcnAPx+H2XebIV6XVlJcZaVUCB5W15zaf5aR7cJVbpSapDRmjZsWw5V k+QyJugjumo97hUUqKSQUoRq57yBkaE7QGai++HT60kwR8f4GYOFz2pow5A5VMbs13EB 5zfCK6+Zmp/evta8+LmQuhY4IJcmt6qmOftIy+yTJvWPYDznPEZdGxdO2qrQKNHLDske usmDDFw7KB9BFmtN9gLKtv9Kr9sjdvr9qDky3SpfRl3Fya/gx33+sKVK6ckyDyBKuNlL GHvPIW7V4vPKMQVaUQzM6aKiCUesipS50cv4FUvB0rqJVIcngPMAKbaWXyXR95/Qn87L 6p/Q== X-Gm-Message-State: AFqh2kqPiOVKdlK3Yce5GiKxYQebc7WLSULus9oOzSRELYbmst95LnQ1 Zpp5UcvO9P3COWM5gqy/zidX X-Received: by 2002:a17:90b:1bc7:b0:22b:bbe3:672b with SMTP id oa7-20020a17090b1bc700b0022bbbe3672bmr13307290pjb.9.1674544350857; Mon, 23 Jan 2023 23:12:30 -0800 (PST) Received: from localhost.localdomain ([117.193.209.165]) by smtp.gmail.com with ESMTPSA id 7-20020a17090a174700b00219220edf0dsm736041pjm.48.2023.01.23.23.12.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 23:12:29 -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: [PATCH v5 2/5] PCI: tegra194: Move dw_pcie_ep_linkup() to threaded IRQ handler Date: Tue, 24 Jan 2023 12:41:55 +0530 Message-Id: <20230124071158.5503-3-manivannan.sadhasivam@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230124071158.5503-1-manivannan.sadhasivam@linaro.org> References: <20230124071158.5503-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?1755887317198041898?= X-GMAIL-MSGID: =?utf-8?q?1755887317198041898?= 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. Reviewed-by: Vidya Sagar Signed-off-by: Manivannan Sadhasivam --- 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 Tue Jan 24 07:11: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: 47573 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2011282wrn; Mon, 23 Jan 2023 23:19:25 -0800 (PST) X-Google-Smtp-Source: AMrXdXsTHvQMOSaXsABwlxR80HfGXsK+n5zNkkFKRiUFXJaHqtKSaSrBcwczGPkPwhuXQA87hEN+ X-Received: by 2002:a17:907:100c:b0:870:e329:5f3d with SMTP id ox12-20020a170907100c00b00870e3295f3dmr29177231ejb.19.1674544765056; Mon, 23 Jan 2023 23:19:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674544765; cv=none; d=google.com; s=arc-20160816; b=NU4D9siuQWsOnxCZ38+MBURxftR+5ooYrPY6wRWhIiXZUT+slKdkt39peoidE054Bm kHC/MsswE4giwYLo5t4AwRc9G8k87CFWxPJzYy9mJjSaXNPknzCPgtnzWjYJpBSkWBIP crMFZNpFez5Y9dYnvexDehjcVJtmoCiG7x81LNf0dvUwE91J15QFrNLEAqJezMTPjwbB 5/Odb9dV9Gjf3W3mMEunsfFFz7MQfCA4TxJ6BmiXXfg4rBkZ+95ff7QES6Q+3AGx6fpc gBGAbROwYgxsW0NMy3D9aV/qWJw9BnsmmO7OQwPj0wAES3+x6qXqVTGloX6frWfwUQJ0 zxUQ== 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=s99rLvDhf6ATGkjGrNxSr1n7f9HghXrJG2VH9aHevqTUahwUXQ0iQhvLc6Nx13C4yQ Keh3MBRsHc4qNyFFt1TVue+l6Btj8lvXpyP832+9SPxdXORo+s/fFqVfEIlXCGj8MNRT ygp5DWC1yLGky7PYit/UTJR/DQLyDgL2QVX/3d/REPg2hrxhRQWvsd+TW/W303fWYQf+ lFsC+TE8kFD07/iF7rDHtd3uZH6cXCxQcDrQXSa27ENw+L1KqE8NGJoulgqCI+3fN9ss LGwdsb+J1DYS1YT4Vx6TgmnliDGplx9xjU8nQZk7x/nW2tVlIdjq/C48Q6+oBTd6DH75 /m0Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=KpayRy1m; 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 fb2-20020a1709073a0200b0086b4343995bsi1555167ejc.629.2023.01.23.23.19.01; Mon, 23 Jan 2023 23:19:25 -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=KpayRy1m; 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 S233103AbjAXHMu (ORCPT + 99 others); Tue, 24 Jan 2023 02:12:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46564 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233467AbjAXHMq (ORCPT ); Tue, 24 Jan 2023 02:12:46 -0500 Received: from mail-pj1-x102d.google.com (mail-pj1-x102d.google.com [IPv6:2607:f8b0:4864:20::102d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 145EB3EC50 for ; Mon, 23 Jan 2023 23:12:37 -0800 (PST) Received: by mail-pj1-x102d.google.com with SMTP id t12-20020a17090aae0c00b00229f4cff534so760515pjq.1 for ; Mon, 23 Jan 2023 23:12: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=oH9vt83FVTay5mm3rIS7SlgtDXXGxJxNj0BGxkKfd2s=; b=KpayRy1mwChJZrnXae442WsM2cwAA8qXgwj4GzK6axTqDd6Gw56qrfgcyEzk+jiW1m lA/0YVULthaerJWfY2IDUDE4Nk7kG4Ils5j/PBdP/TgfGkfMb5haMfOf/jdiYXP3/r8i +Vpr6A0fZ3rIjOQUg9NBx8zJ9cOkYBIs+bRv/fmLG1U7hykUhmywmxtVyeCHIDNgUvJd DfeeqDLcfc2d7pFBYPWXY+03fdm19/EuJSEzPBTFqVKEflWr1nyiNacn9G1Uw1/T0v6m XvM1fm4Z+AEp0Jyfpf5LNu8c5fyhRlMssYkXQUqysPQwPOhofUpYspWu55ELGAgFFTYZ xAXg== 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=20QOfFNaxwxDXYNPpFZ49etcbeL2Zf4MqFvykmwfu1fL0G4UOhiOdFVOs2TOm00+31 cWl5+hJXjjRiDdEdwUIswM95UNgqJYRWaVjmHTBz97hFoqlYBOfcyAoo9tO2P8QiFHGQ DDAzKVO+LtUEHQJa58030CktBRt0kM56/GnyruHn/xpIQQDzyGh+P8pUSXP961Von6Wq CL0NJP880ayWf3aTPV4VA5houeml4U8wUke7cod/Zd1mI30mStNwhJPhHcUCiVRUELNa 0HjnxFXbIyqnAyayT2zove5mlFSTGR20GPXH6bTP3HkaZDpgP+dF8eMVkEUn3V4PWWam CXLQ== X-Gm-Message-State: AFqh2krfVuWb31E0UYK5g8s6uCpDvKzJcxe+Vqxqy/6m0mMfCSsQG3Md U4cqWewSQWgmFAJiU8LVsvL5 X-Received: by 2002:a05:6a20:3a82:b0:b8:7e6d:5b72 with SMTP id d2-20020a056a203a8200b000b87e6d5b72mr25572101pzh.36.1674544356275; Mon, 23 Jan 2023 23:12:36 -0800 (PST) Received: from localhost.localdomain ([117.193.209.165]) by smtp.gmail.com with ESMTPSA id 7-20020a17090a174700b00219220edf0dsm736041pjm.48.2023.01.23.23.12.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 23:12: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 , Kishon Vijay Abraham I Subject: [PATCH v5 3/5] PCI: endpoint: Use a separate lock for protecting epc->pci_epf list Date: Tue, 24 Jan 2023 12:41:56 +0530 Message-Id: <20230124071158.5503-4-manivannan.sadhasivam@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230124071158.5503-1-manivannan.sadhasivam@linaro.org> References: <20230124071158.5503-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?1755887451852409983?= X-GMAIL-MSGID: =?utf-8?q?1755887451852409983?= 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 Tue Jan 24 07:11: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: 47572 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2011023wrn; Mon, 23 Jan 2023 23:18:27 -0800 (PST) X-Google-Smtp-Source: AMrXdXskUO2oMuE5DDdTD7w7fzThjRbXRZ8UrVx8EjYPDAP1fD9snAYdSVgOqF3uwWNOeYwG1oLG X-Received: by 2002:a05:6402:547:b0:499:bec8:4d with SMTP id i7-20020a056402054700b00499bec8004dmr40078548edx.32.1674544706748; Mon, 23 Jan 2023 23:18:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674544706; cv=none; d=google.com; s=arc-20160816; b=iWkVDP6guvtDtl101gNV81F0Ca5aD4WcfcT5ES6X7V3SMMTk8qk5ZzzLZPprTVLG+a 7CTWhh1DvrlBshALwbDn0vvpwK/FTDLOuBtQ/89WmSWVY1D02BRkOTg2J4tp+FjR7vuX QUBnjLQq3mFDf2P/dX47uQwc1693anZhceJyFGHAcmX5I8n6oR2co2/N1YT5doU8KAyO PiAZX3zoW9Gi7WXgYf0UERrHhOaJ+oZQsOPLPS2jWse1aSgy8WpZyUPOZVsNyHpKxvUl SdfAb+ejHN00XnKGVcQecvVkrJ9sEq2djy8tML+1w3GWFQux/d1vQoLi+AYZM5ON9Vv0 /qIA== 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=fb4Pul32/FDYzcFrcbH3Ur1guZwdPMZHu60xQ650Ug1mur54iX0YjCI/QdeXhbe0xE WP1JpUWMxfFbdGMnedl3u13/QP83X/tEcxynBnLQeIDZiSr6TGZXD9Hj4UUVl3m1Qa5n FBkcJ2ee0tnug4xDNnp89LexqBgGNo+6yhPrVNBB6Qsjdt47qXWD1pgiaaIcaNJlMe2S DJHqonIWE2MBXnk+UCCPMILNkGfVCYqxIs1aa7Y7OwgFnlTlzDkOi6FrDbsuTkl9eYGY JfsClatfGajETayo4m9vMmIWknoXYNdT5/RE+h2uR9RLxodJSZbmSSi6sG9iWoWWom+e 2FMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=jLkKilHT; 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 b22-20020aa7c916000000b0049e7d30f950si2045393edt.539.2023.01.23.23.18.03; Mon, 23 Jan 2023 23:18:26 -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=jLkKilHT; 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 S233480AbjAXHNB (ORCPT + 99 others); Tue, 24 Jan 2023 02:13:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46804 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233486AbjAXHM4 (ORCPT ); Tue, 24 Jan 2023 02:12:56 -0500 Received: from mail-pl1-x629.google.com (mail-pl1-x629.google.com [IPv6:2607:f8b0:4864:20::629]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0DDC535B5 for ; Mon, 23 Jan 2023 23:12:42 -0800 (PST) Received: by mail-pl1-x629.google.com with SMTP id k13so13938569plg.0 for ; Mon, 23 Jan 2023 23:12:42 -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=jLkKilHTzY/C2gsXwduuwbnZbxommKG4NDPVIPHJS2s8XV3xmC21LPWVZya5CgL+XE BB7Tt0eTbwzy0TWpJGBKvITSxZn7LozlbKEjzK7hX3hZkE9iiNrHTmU2TDkEo1z9CcxM ZL2llotCUra8/97oBsOoJNlLRGLBFVP6LRsIJxp7eFyapgP+WKTRz1h92P506qq8mPcj SaGFIFz/NiYdU5bramL0TmwIJGD1J+kLE/RglKXkZbZkIrhvn7Aft839Y5ZV57ZqE2d8 m23KSjfN29rKbUUj/oacO1QuuCzwyIXMc6BcAKl3dGygF2uSAsg2XOByhzQNawYUirxM I0/w== 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=ltBdjpUaMczHRIKZwteSgTyroDNlVUveGe/alrvv39AKbs2SuBYq3hCMv6ZlOpuLI/ XikPvWaMiPi/MXiVyHjPt+XyRQzucOtUiV9opQFqnQuchw/8104oWs+vdTqe8Rm4oPtj RTkClzX+9/ooEAxCFKG+btBJZkQd4Eg/hcZJWXpJq4U1B4dY2T5drrjQLFZvH2SzbRVm 69YH6Z+n7bX22yPTVte7hGwmbltxU09N0U+TspavJ42Un46SVebEAfl6IfPJzzZ2xt38 f2bGDZ9tPL65wcsNO7GHlcRRTczgtB55L2IlZjHHFmdMjmf2t92ep0SREoeKguQePA/F u4XA== X-Gm-Message-State: AFqh2krvKq73dKumO9FwH4t/HR+sWXnPbO8tzVzI6SmbR4q3VWYUXFGY e5l3DCUG2gr7VA0cWWQq4r0q X-Received: by 2002:a17:90a:c298:b0:229:b5e:2e03 with SMTP id f24-20020a17090ac29800b002290b5e2e03mr28940773pjt.32.1674544362064; Mon, 23 Jan 2023 23:12:42 -0800 (PST) Received: from localhost.localdomain ([117.193.209.165]) by smtp.gmail.com with ESMTPSA id 7-20020a17090a174700b00219220edf0dsm736041pjm.48.2023.01.23.23.12.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 23:12:41 -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: [PATCH v5 4/5] PCI: endpoint: Use callback mechanism for passing events from EPC to EPF Date: Tue, 24 Jan 2023 12:41:57 +0530 Message-Id: <20230124071158.5503-5-manivannan.sadhasivam@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230124071158.5503-1-manivannan.sadhasivam@linaro.org> References: <20230124071158.5503-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?1755887390681499353?= X-GMAIL-MSGID: =?utf-8?q?1755887390681499353?= 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 Tue Jan 24 07:11: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: 47574 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2013686wrn; Mon, 23 Jan 2023 23:27:51 -0800 (PST) X-Google-Smtp-Source: AMrXdXuH41BozkinXiw55GGc2QypSuGArrQwL0a6tYQoo2uUdACLfhSIaoqTe2h9RpDDRwiopSHj X-Received: by 2002:a17:907:9a86:b0:870:8b4f:8a71 with SMTP id km6-20020a1709079a8600b008708b4f8a71mr28686426ejc.6.1674545271660; Mon, 23 Jan 2023 23:27:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674545271; cv=none; d=google.com; s=arc-20160816; b=DGviXI8zOwSDsHTJzaOl52V3l8Y8Ctt/qzvovG+lF+PtGLw2DLqLfQdlp26EHThgaV z6SzKn80LCjfbqXVShJAJg8dtejZsDp0knADGTaYvf7+Yxt2jftEVUhMo9mX99nVIB3S Ez21cxMG+rPVQNrzaT7UuPlUoA0J8jWH6VNnlx8OTu5aySIdYsFv8+X6fJovg/QFElIn gPVnH2+Nm7JpHoOMrH1gBDxEhuGv3eEIlXSmseoP0IaR7PvkrUWc4yZul/33QrMqVqfG KTP8Vb1wmh69Vf9V5Ws240Bq+7GTdU4Cq/WeneM3oGor39p2LUZ+dECEigz+nRh6CE5a 2eQg== 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=NE2wDny5PvDRrubr6JRTjSZsx71LXB56a2j7Ta+DwYo=; b=p6Aghbv2y83C4miR4tJQOI6SEMxpfMShxOEPQdKHYVQxfuR9BDlhPLxTRkconoh0EE qngU3fYjpm5CmUD0PawPPWvzhid7rNqTMDoZrO3ggW7mcBBGUWCxfD1sQwyW32FI6Q5A YfvFjTA2ZJg6E+UwVw3aOGn9YTULswXY/QJCr8esr8kBofUgj9ubljyvwWfqDoquVn2G 0UA9EDX7DQCOOenzesu2knoaXymjis6jlasbJuz6gWxMB46vr4qRrD0QJgr7d9PvZEEj GBVsLJ65AktxGPg1+tkavklMUA8iNkGyJbhulbGRMxHyWMw/2Lk+bp7/sRQcZ+wZDzzY 5ezA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=oC+dWgQH; 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 ui17-20020a170907c91100b0087784d21e5asi1418637ejc.721.2023.01.23.23.27.25; Mon, 23 Jan 2023 23:27:51 -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=oC+dWgQH; 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 S233149AbjAXHNP (ORCPT + 99 others); Tue, 24 Jan 2023 02:13:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47074 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233485AbjAXHNG (ORCPT ); Tue, 24 Jan 2023 02:13:06 -0500 Received: from mail-pj1-x1033.google.com (mail-pj1-x1033.google.com [IPv6:2607:f8b0:4864:20::1033]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7C21983F9 for ; Mon, 23 Jan 2023 23:12:48 -0800 (PST) Received: by mail-pj1-x1033.google.com with SMTP id m11so2111822pji.0 for ; Mon, 23 Jan 2023 23:12:48 -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=NE2wDny5PvDRrubr6JRTjSZsx71LXB56a2j7Ta+DwYo=; b=oC+dWgQH/gctvZu2MG2Q87ikWE5cGSRh3pjabyPTFWcOWNtke3S08mO6T7Re/wQC3M AlmVTy7tI8HpppCq+teW51YusVPsiGL8WgkOrRU5fE8X+rAEECEsntEjcxiqpOnjowq4 H4wESEem/k/QvtLYUwQ3b+7GZ6EhZyL2c8MfpdLKbzqe9Oy+4XjQdTOokzJ+14XEDYlc pF6Q1EJCXCHDHFz+/1SWUtQ7b9izzG5tNe/9tv+/inUbAqMVfa8Hxui2i4+dwVYGjmHm tyrDap8AYGzV5FvURU3cMnGmLR+vyrF6bc2scyoKLAYjlCRSB/lP/kzxu0awpQ0Bf/Pu 8X5A== 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=NE2wDny5PvDRrubr6JRTjSZsx71LXB56a2j7Ta+DwYo=; b=52dVQIUW47pow2f+5drLGtWCaLWUsmkl0tEzsIgu0jb9crTRSlorm8UpVkBkPuH8d8 0OFHWFhsPJ4oC1kjqFxxwIo19a5zyohObzUp3d3p/hf+hCJ8UDXcv7ZCokSGkcMvP09h 24TxzMabVU98QALmF6oFdzFLwW+i8eco7BTsXfZJrZVIJnW8VhVluw596ul4pPbcKvcM 5baJRfWTlgxJMOjNdhoxTjSuVqJGLMUy9graTywjrEaJCsQ6q4w5/JPjxuXwmvr3yAxm fiJkSmijQr172ughpjbVoAZzYokPba8/jgg+00DHpO3eAZZ5Xw8Wqohwjhdr8VVonknx jWWA== X-Gm-Message-State: AFqh2kqAdHd8JzrYddmoey9b22GNpT+yLwN5oKPPmJEBnzk4km7E33pl DiHCu581VgBzGGayweOd6IxN X-Received: by 2002:a17:90a:b107:b0:219:dc24:7595 with SMTP id z7-20020a17090ab10700b00219dc247595mr28596417pjq.19.1674544367425; Mon, 23 Jan 2023 23:12:47 -0800 (PST) Received: from localhost.localdomain ([117.193.209.165]) by smtp.gmail.com with ESMTPSA id 7-20020a17090a174700b00219220edf0dsm736041pjm.48.2023.01.23.23.12.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 23:12:46 -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: [PATCH v5 5/5] PCI: endpoint: Use link_up() callback in place of LINK_UP notifier Date: Tue, 24 Jan 2023 12:41:58 +0530 Message-Id: <20230124071158.5503-6-manivannan.sadhasivam@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230124071158.5503-1-manivannan.sadhasivam@linaro.org> References: <20230124071158.5503-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?1755887982914059986?= X-GMAIL-MSGID: =?utf-8?q?1755887982914059986?= 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..0f9d2ec822ac 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) +static 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;