From patchwork Wed Nov 15 04:56:45 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oza Pawandeep X-Patchwork-Id: 838095 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pci-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=codeaurora.org header.i=@codeaurora.org header.b="DodAZ+06"; dkim=pass (1024-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="meu2eFqC"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ycBtn5DfHz9sDB for ; Wed, 15 Nov 2017 15:57:05 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753422AbdKOE5D (ORCPT ); Tue, 14 Nov 2017 23:57:03 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:38750 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752233AbdKOE5C (ORCPT ); Tue, 14 Nov 2017 23:57:02 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 0DBB060852; Wed, 15 Nov 2017 04:57:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1510721822; bh=KTJLS1gbh26GzdEpupC4Rh/gynGJnPbNEKSLwIayTI0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DodAZ+06BbG7ZxNPlX6Y+SAVz6l8thlm1jmuc/YdbgCX71S6rDlejg2zATS1GDui7 +dfOM7411s8tvo++7R1NaI2ejfuoMeBxfz3vcQB+NnsJI78wUPhi4ODNICGoEPL/R6 cG/7ECXb8DEg/I35j/uWkMLMElUhDA1Eqz+4olIA= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED, T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from blr-ubuntu-poza.qualcomm.com (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.18.19]) (using TLSv1.1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) (Authenticated sender: poza@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 592886081A; Wed, 15 Nov 2017 04:56:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1510721821; bh=KTJLS1gbh26GzdEpupC4Rh/gynGJnPbNEKSLwIayTI0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=meu2eFqCLwZ1iQLO6p7OgPhyZXGAK7fTc7CijnP68liMAPjL8eNviHqb5U7AYnwa9 ZmYUHnWn38rZHarFZ+TCCRY2ZBBkzl9owiLoJq3o/fkK4Jnjgsf3qgXCXuO/dihk1+ znD+hFEHcKcCnntn3eluhdAdHy24pJvGtaH0+pcc= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 592886081A Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=poza@codeaurora.org From: Oza Pawandeep To: linux-pci@vger.kernel.org, okaya@codeaurora.org, timur@codeaurora.org Cc: Bjorn Helgaas , Dongdong Liu , Gabriele Paoloni , Thomas Gleixner , Greg Kroah-Hartman , linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Oza Pawandeep Subject: [PATCH v2 1/4] PCI: Add port service list node for pci_dev. Date: Wed, 15 Nov 2017 10:26:45 +0530 Message-Id: <1510721808-27164-2-git-send-email-poza@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1510721808-27164-1-git-send-email-poza@codeaurora.org> References: <1510721808-27164-1-git-send-email-poza@codeaurora.org> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org This patch adds the list node to keep track of services registered to pci port driver. Signed-off-by: Oza Pawandeep diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 14e0ea1..f772979 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -1931,6 +1931,7 @@ struct pci_dev *pci_alloc_dev(struct pci_bus *bus) return NULL; INIT_LIST_HEAD(&dev->bus_list); + INIT_LIST_HEAD(&dev->service_list); dev->dev.type = &pci_dev_type; dev->bus = pci_bus_get(bus); diff --git a/include/linux/pci.h b/include/linux/pci.h index 96c9498..eb86a4b 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -408,6 +408,8 @@ struct pci_dev { struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE]; /* sysfs file for resources */ struct bin_attribute *res_attr_wc[DEVICE_COUNT_RESOURCE]; /* sysfs file for WC mapping of resources */ + struct list_head service_list; /* node in per-service list */ + #ifdef CONFIG_PCIE_PTM unsigned int ptm_root:1; unsigned int ptm_enabled:1; From patchwork Wed Nov 15 04:56:46 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oza Pawandeep X-Patchwork-Id: 838096 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pci-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=codeaurora.org header.i=@codeaurora.org header.b="bKy75TMk"; dkim=pass (1024-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="k60tgfQi"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ycBtr6GRmz9sDB for ; Wed, 15 Nov 2017 15:57:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753276AbdKOE5H (ORCPT ); Tue, 14 Nov 2017 23:57:07 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:38858 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752233AbdKOE5G (ORCPT ); Tue, 14 Nov 2017 23:57:06 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id C520860860; Wed, 15 Nov 2017 04:57:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1510721825; bh=0yIXsetSK0NaBHRFwpm6ZKl7jfHo2UpODO72sDKu9yQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bKy75TMkICc7AMmCsZ8+j7W02i+iJirbol6f5/6Q1p5E7trRQRwYPuas50ImibOpN nAdND/htJ2LBExZSoSWdilPOy1+ZrzamKVT8HSPUfKq3Ua2xXHggxy5ebdBVvi0UBw ZDbp+/4pTC5pkwnHaU6ao1hgj9xdRnuDHMYDjRc8= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED, T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from blr-ubuntu-poza.qualcomm.com (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.18.19]) (using TLSv1.1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) (Authenticated sender: poza@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id E30ED60860; Wed, 15 Nov 2017 04:57:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1510721824; bh=0yIXsetSK0NaBHRFwpm6ZKl7jfHo2UpODO72sDKu9yQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=k60tgfQidL6X1FLdeS6US8Bw8I48TzJr/Vkv7m20uKHFMDT6Vw1qGFdxNd6laEcrt wTkuZIGnXHQfDcM7k0OX+Ffj7IHiY0MBjMPVdut1rySd+lMVikER5CJ3iH0d37yPtJ xj+xc8IunoZl77X9WGiF/IBZumuvLSe0etd81xIA= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org E30ED60860 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=poza@codeaurora.org From: Oza Pawandeep To: linux-pci@vger.kernel.org, okaya@codeaurora.org, timur@codeaurora.org Cc: Bjorn Helgaas , Dongdong Liu , Gabriele Paoloni , Thomas Gleixner , Greg Kroah-Hartman , linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Oza Pawandeep Subject: [PATCH v2 2/4] PCI/portdrv: Add/Remove port services to the list Date: Wed, 15 Nov 2017 10:26:46 +0530 Message-Id: <1510721808-27164-3-git-send-email-poza@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1510721808-27164-1-git-send-email-poza@codeaurora.org> References: <1510721808-27164-1-git-send-email-poza@codeaurora.org> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org This patch adds and removes the port service to the service list. Signed-off-by: Oza Pawandeep diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index a592103..6bfe986 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -454,6 +454,8 @@ static int pcie_port_probe_service(struct device *dev) if (status) return status; + list_add_tail(&pciedev->slist, &pciedev->port->service_list); + get_device(dev); return 0; } @@ -477,6 +479,9 @@ static int pcie_port_remove_service(struct device *dev) pciedev = to_pcie_device(dev); driver = to_service_driver(dev->driver); + + list_del(&pciedev->slist); + if (driver && driver->remove) { driver->remove(pciedev); put_device(dev); diff --git a/include/linux/pcieport_if.h b/include/linux/pcieport_if.h index b69769d..9d05621 100644 --- a/include/linux/pcieport_if.h +++ b/include/linux/pcieport_if.h @@ -31,6 +31,7 @@ struct pcie_device { u32 service; /* Port service this device represents */ void *priv_data; /* Service Private Data */ struct device device; /* Generic Device Interface */ + struct list_head slist; /* List of services */ }; #define to_pcie_device(d) container_of(d, struct pcie_device, device) From patchwork Wed Nov 15 04:56:47 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oza Pawandeep X-Patchwork-Id: 838097 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pci-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=codeaurora.org header.i=@codeaurora.org header.b="REW+6jUD"; dkim=pass (1024-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="MHsf7Jbn"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ycBtw05fmz9sDB for ; Wed, 15 Nov 2017 15:57:12 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754624AbdKOE5K (ORCPT ); Tue, 14 Nov 2017 23:57:10 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:39000 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752233AbdKOE5J (ORCPT ); Tue, 14 Nov 2017 23:57:09 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 7342660720; Wed, 15 Nov 2017 04:57:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1510721829; bh=KCP663HBsE3EnGH6Jguz6OnLl9TsYAURGIuGwULKESY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=REW+6jUDwdPji1COzeWn4H3qYs8eGhLbsHXq3aYYi4u7+4FK66WRzTd9wNvg5BIxX 73fQ9sDqjsESHJ1ekPQaC3oZ2XcLwonkBdQhyIK47zNnrvZxDsuVkTo/1beNUigcan g50bWJRzFwOCORjnuz5RK56JEzAsxymkZZRBDV/A= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED, T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from blr-ubuntu-poza.qualcomm.com (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.18.19]) (using TLSv1.1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) (Authenticated sender: poza@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 7D4DB60720; Wed, 15 Nov 2017 04:57:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1510721828; bh=KCP663HBsE3EnGH6Jguz6OnLl9TsYAURGIuGwULKESY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MHsf7Jbnsuv3IQ1BWMvtATFu8sMwDqbbslM/odKcaqMYdtYz4NEizFD7hCTvCLDao pQdH6QVT4dxVmX1zeZuQqKrL9cOQa36sqOUfYA+Qetpqpp4oX0e3HdVslqkLb6hBIe URnj/HiBH4ftJSboKA9vU4CzrN77HBcKnc/wfxT0= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 7D4DB60720 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=poza@codeaurora.org From: Oza Pawandeep To: linux-pci@vger.kernel.org, okaya@codeaurora.org, timur@codeaurora.org Cc: Bjorn Helgaas , Dongdong Liu , Gabriele Paoloni , Thomas Gleixner , Greg Kroah-Hartman , linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Oza Pawandeep Subject: [PATCH v2 3/4] PCI/portdrv: Implement interface to query the registered service Date: Wed, 15 Nov 2017 10:26:47 +0530 Message-Id: <1510721808-27164-4-git-send-email-poza@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1510721808-27164-1-git-send-email-poza@codeaurora.org> References: <1510721808-27164-1-git-send-email-poza@codeaurora.org> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org This patch implements query service interface. So that, any port service driver can query to know, if the service is active or not. When multiple service drivers try to take actions, these service drivers could race or could have conflict of interest. For e.g. when DPC is enabled, AER should not attempt recovery. The other interface walks up the parent till root bridge, so that on each pci_dev service can be queried. Signed-off-by: Oza Pawandeep diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index 6bfe986..c7681d9 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -490,6 +490,40 @@ static int pcie_port_remove_service(struct device *dev) } /** + * pcie_port_query_service - query the associated port service. + * dev: pcie device + * @port service: PCI express port service + */ +bool pcie_port_query_service(struct pci_dev *dev, u32 port_service) +{ + struct pcie_device *pdev; + + list_for_each_entry(pdev, &dev->service_list, slist) { + if (pdev->service == port_service) + return true; + } + return false; +} +EXPORT_SYMBOL(pcie_port_query_service); + +/** + * pcie_port_upstream_bridge - returns immediate upstream bridge. + * dev: pcie device + */ +struct pci_dev *pcie_port_upstream_bridge(struct pci_dev *dev) +{ + struct pci_dev *parent; + + parent = pci_upstream_bridge(dev); + + if (parent && pci_is_pcie(parent)) + return parent; + + return NULL; +} +EXPORT_SYMBOL(pcie_port_upstream_bridge); + +/** * pcie_port_shutdown_service - shut down given PCI Express port service * @dev: PCI Express port service device to handle * diff --git a/include/linux/pcieport_if.h b/include/linux/pcieport_if.h index 9d05621..8322443 100644 --- a/include/linux/pcieport_if.h +++ b/include/linux/pcieport_if.h @@ -68,5 +68,6 @@ struct pcie_port_service_driver { int pcie_port_service_register(struct pcie_port_service_driver *new); void pcie_port_service_unregister(struct pcie_port_service_driver *new); - +bool pcie_port_query_service(struct pci_dev *dev, u32 port_service); +struct pci_dev *pcie_port_upstream_bridge(struct pci_dev *dev); #endif /* _PCIEPORT_IF_H_ */ From patchwork Wed Nov 15 04:56:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oza Pawandeep X-Patchwork-Id: 838098 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pci-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=codeaurora.org header.i=@codeaurora.org header.b="IRywdD93"; dkim=pass (1024-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="k8mUpAw4"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ycBv30CZ5z9sDB for ; Wed, 15 Nov 2017 15:57:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754867AbdKOE5R (ORCPT ); Tue, 14 Nov 2017 23:57:17 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:39198 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752233AbdKOE5Q (ORCPT ); Tue, 14 Nov 2017 23:57:16 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 833136081A; Wed, 15 Nov 2017 04:57:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1510721835; bh=2tbS7LoVaZEoRsf302gMnOkewWOyHhYMVvd4kYAPj9k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IRywdD93AYKzZUJkcGY7humQeNWaN9L0mDWKFkuR6Dw5ArQF1exbwsUER+4BR4hyO HCHaTaD3cgfT2d2rNoh3YGy0APKyKcxfwB2r1XeqqZF+s9/dXH+8VbZLBKFWn6qhuI O9he+qPWKHZ9VsLi2+AeGhRNEBZJhfpngcXqm8Po= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED, T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from blr-ubuntu-poza.qualcomm.com (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.18.19]) (using TLSv1.1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) (Authenticated sender: poza@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 1E8BC6086D; Wed, 15 Nov 2017 04:57:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1510721832; bh=2tbS7LoVaZEoRsf302gMnOkewWOyHhYMVvd4kYAPj9k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=k8mUpAw4TBkaezzrr/0nw2K67eBOZBtEjdFfhGj4xpFsmtdJsuchUOMExHRmWMans HeKV/ZnAHnjONRxOrIEmSOOxwzf/qCb2Z1k4quPILq5w4iEi5NPsyPh8oGC92W4gc4 36G6LLhJiBDqeMOiBncCzFNkClB1wU/O22YVgCDA= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 1E8BC6086D Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=poza@codeaurora.org From: Oza Pawandeep To: linux-pci@vger.kernel.org, okaya@codeaurora.org, timur@codeaurora.org Cc: Bjorn Helgaas , Dongdong Liu , Gabriele Paoloni , Thomas Gleixner , Greg Kroah-Hartman , linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Oza Pawandeep Subject: [PATCH v2 4/4] PCI/AER: Dont do recovery when DPC is enabled Date: Wed, 15 Nov 2017 10:26:48 +0530 Message-Id: <1510721808-27164-5-git-send-email-poza@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1510721808-27164-1-git-send-email-poza@codeaurora.org> References: <1510721808-27164-1-git-send-email-poza@codeaurora.org> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org PCI Express Base Specification, Rev. 4.0 Version 0.9 6.2.10: Downstream Port Containment (DPC) DPC is an optional normative feature of a Downstream Port. DPC halts PCI Express traffic below a Downstream Port after an unmasked uncorrectable error is detected at or below the Port, avoiding the potential spread of any data corruption, and permitting error recovery if supported by software Triggering DPC disables its Link by directing the LTSSM to the Disabled state. Once the LTSSM reaches the Disabled state, it remains in that state until the DPC Trigger Status bit is Cleared So when DPC service is active and registered to port driver, AER should not attempt to recover, since DPC will be removing downstream devices, and do the recovery. Signed-off-by: Oza Pawandeep diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c index 7448052..a9108ea 100644 --- a/drivers/pci/pcie/aer/aerdrv_core.c +++ b/drivers/pci/pcie/aer/aerdrv_core.c @@ -482,6 +482,27 @@ static pci_ers_result_t reset_link(struct pci_dev *dev) } /** + * pcie_port_query_uptream_service - query upstream service + * @dev: pointer to a pci_dev data structure of agent detecting an error + * @service: service to be queried + * + * Invoked to know the status of the service for pci device. + */ +static bool pcie_port_query_uptream_service(struct pci_dev *dev, u32 service) +{ + struct pci_dev *upstream_dev = dev; + + do { + if (pcie_port_query_service(upstream_dev, service)) + return true; + upstream_dev = pcie_port_upstream_bridge(upstream_dev); + } while (upstream_dev); + + return false; +} + + +/** * do_recovery - handle nonfatal/fatal error recovery process * @dev: pointer to a pci_dev data structure of agent detecting an error * @severity: error severity type @@ -495,6 +516,18 @@ static void do_recovery(struct pci_dev *dev, int severity) pci_ers_result_t status, result = PCI_ERS_RESULT_RECOVERED; enum pci_channel_state state; + /* + * If DPC is enabled, there is no need to attempt recovery. + * Since DPC disables its Link by directing the LTSSM to + * the Disabled state. + * DPC driver will take care of the recovery, there is no need + * for AER driver to race. + */ + if (pcie_port_query_uptream_service(dev, PCIE_PORT_SERVICE_DPC)) { + dev_info(&dev->dev, "AER: Device recovery to be done by DPC\n"); + return; + } + if (severity == AER_FATAL) state = pci_channel_io_frozen; else