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_ */