From patchwork Fri Aug 17 10:26:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 144467 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp596192ljj; Fri, 17 Aug 2018 03:28:19 -0700 (PDT) X-Google-Smtp-Source: AA+uWPx6NtEadozR3J4GdDb4zqX/luKQAOQp/KqN+ZRDTHNYshP1vM/xVQx6MmAAK+nbbNqy5zpo X-Received: by 2002:a62:fc5:: with SMTP id 66-v6mr36436401pfp.237.1534501699102; Fri, 17 Aug 2018 03:28:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534501699; cv=none; d=google.com; s=arc-20160816; b=BFAwzvT7hScU9MUvUzsLAktLz+yOF3FNr9jRnNyauULvHbWZ0F2oFYBnXScWWh6PWy Itd/5nQP9N/tfStpRAeNPEIxR7SlNJTUqG3ttJaclSzq3rn16IG1aJPayh5SKZBNq3AF +rOwJZ1MMzpIBlxn43NzDki/rLw4GNo/Ed2EhUWwOgReWGBWAqE5PtpY01+YWgtcqgZB KRLF0AZ8tvkg4mMJri6lV36le5O/Jeo77YiXv74GdBOjjdISPzdWvMM78A+BlsmFA3cE CDPnXSHVzvleQG+dXQunKDYPT45cZTuCfIwj+p3tPXckwZusIhKrjWusfWtLGMlDnqLm WSUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=E6E8D4iCwO5eyh2oGtKaG0vyFm/WWnHElO1PiOsU+lU=; b=ipRzvfN1TDJfGKszx3mDgc3dwV+GFYERaOZXzSewdKzCTDK2zFdP2aXfccyA/VSBuy 4B7acsEdUFJv/pjVVGjfbKuPzlL88n+JOQ6hryBdPytcHYWf8O+qWmBs1JPuc49P84Ah hmgIHIyMVwFB/FvGeSXCAfRikbrRBL0jRdwNEz6MXGjt1zmLay5NKZNYOZeDJkVte3Cx wV7jQcc8ICkXn5WrQxj/GEmVi52ZbfhIogim7M16IOzzXJgC2FnrmolX6Egp4kmNAcpF F4bjQQAho1zXK2XaAAmRHh+344Sg86DM4AYJEPj1FKA1WVYCfAnxQVFSYEBMwgpqBrR+ 9Qww== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n34-v6si1865788pld.99.2018.08.17.03.28.18; Fri, 17 Aug 2018 03:28:19 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727461AbeHQNbK (ORCPT + 32 others); Fri, 17 Aug 2018 09:31:10 -0400 Received: from mout.kundenserver.de ([212.227.17.10]:59335 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727032AbeHQNab (ORCPT ); Fri, 17 Aug 2018 09:30:31 -0400 Received: from wuerfel.lan ([109.193.40.16]) by mrelayeu.kundenserver.de (mreue101 [212.227.15.145]) with ESMTPA (Nemesis) id 0MAdid-1fjhxn3cuR-00BsPO; Fri, 17 Aug 2018 12:27:16 +0200 From: Arnd Bergmann To: linux-pci@vger.kernel.org, Bjorn Helgaas Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Lorenzo Pieralisi , Benjamin Herrenschmidt , linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org, Arnd Bergmann Subject: [RFC 04/15] PCI: export pci_register_host_bridge Date: Fri, 17 Aug 2018 12:26:34 +0200 Message-Id: <20180817102645.3839621-5-arnd@arndb.de> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180817102645.3839621-1-arnd@arndb.de> References: <20180817102645.3839621-1-arnd@arndb.de> X-Provags-ID: V03:K1:qV+QiFpoLBNDT+pnsfxk7Q12Wr+Zfztf79RikKLfT1kBpbTwKUM iZEEf/AFkASGLvQTzHO6lI+OsNf423ev36D4uMlANybis7iSjomPpFGobYlMVXCwQdTCqSd ugZbMhW+33xetnzQSUdMeicQ786GrhuoT6iTK6eAwaMormNmf16uMK5AaJlveZ1uMEi0UOl d7rj/WjNLBnDisKLuP0zg== X-UI-Out-Filterresults: notjunk:1; V01:K0:6viyPx4Qb74=:ccCWwxVG4h9e67s1aeOEA5 DSD5frqpk3rf+CElY2taeu1iNYf0RDqjWPk1AQkQlRZIT8V6ygBWKhYW8+niK8SPrhzEefQoN MTAzJhGQjUG5mJz4neuPJrfWfvoRyWWno3raPfFD4IBjJzeE+wQ5wSD5PVhe19BsXlubY02g8 5MO+LdODz2tWxlOkI+FGaNMHD3AUyYbfeZFVfCVihpH50sWaTbfhg9dfHCMQlN3Ux8fH+iDcz CzK2NJmTJLXfvDYvkbuBwOQsXeMCOMgWI0S787/Hu3SxiX6sgA0WyOQsvPnufZss/8nagJgzF pmhXqG5ei/dM3MxDDeER5wKJlSfFLLZV9YBysTjF+RyUu0srfhAgAK/0VoLg/xLf8+W+ss8S6 cT6Eop6PKWq7TliAkzqtHUgUqQKfTg63eGJ+bxelz36NgAJhtrdwfjUrvcK8GvIo9n6ofst7f M+ZpnwtofMJalysbiNMd0/U5C+LZvQIDyhBnjN+ztTMX161kKMmQQRMGt9bU5zlGebSHJML9t uxwQ3exwP8EM1g/36YZc/Juqs5Obu3SVHVwOM1GmpgDg6RViN0CBJ9wm0T9fA1B4qvj9y5YX3 okKhgiwMMZCJUT1fjABTxHH38aHmgTpoprIuHZ9tZSVc1oJT/y7nNxmLlGE+AtLIOIUiyAUVu 8M9riaC7jjFCIl60jk8C9N1eE/iRsPX3qGaPVVog7/SbWPtLeyy25TBnk4ZFk760HgD0= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There are a couple of users of the old pci_create_root_bus() interface, which calls pci_register_host_bridge() without actually scanning the bus. In order to get those callers a little closer to the current method of separating the allocation and probing of the host bridge, this exports the internal interface to modules. If all the callers can get moved over to pci_host_probe() or pci_scan_root_bus_bridge() later, the export can be removed again. Signed-off-by: Arnd Bergmann --- drivers/pci/probe.c | 25 ++++++++++++++++++++++++- include/linux/pci.h | 1 + 2 files changed, 25 insertions(+), 1 deletion(-) -- 2.18.0 diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index cf169742c03e..5ca7d5941ad0 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -762,7 +762,29 @@ static void pci_set_bus_msi_domain(struct pci_bus *bus) dev_set_msi_domain(&bus->dev, d); } -static int pci_register_host_bridge(struct pci_host_bridge *bridge) +/* + * pci_register_host_bridge() - Register a host bridge without scanning + * + * @bridge: a newly allocated host bridge structure + * + * This is the core part of bringing up a new PCI host bridge, + * before we scan for attached devices and register them as + * pci_dev. + * + * For the most part, this is an implementation detail of the + * pci_host_probe() interface, which brings up the entire bus, + * bus some older platforms still call it directly and manually + * scan for devices. + * + * If your driver uses this, try to convert it to using + * pci_host_probe() instead. + * + * Return: zero on suggess, or a negative error code. + * Note: after pci_register_host_bridge() successfully returns, + * the pci_host_bridge device is alive in driver core, and must + * not be freed directly. + */ +int pci_register_host_bridge(struct pci_host_bridge *bridge) { struct device *parent = bridge->dev.parent; struct resource_entry *window, *n; @@ -877,6 +899,7 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge) kfree(bus); return err; } +EXPORT_SYMBOL_GPL(pci_register_host_bridge); static bool pci_bridge_child_ext_cfg_accessible(struct pci_dev *bridge) { diff --git a/include/linux/pci.h b/include/linux/pci.h index d226e06fb5e5..e1337148cf9f 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -909,6 +909,7 @@ struct pci_bus *pci_create_root_bus(struct device *parent, int bus, struct pci_ops *ops, void *sysdata, struct list_head *resources); int pci_host_probe(struct pci_host_bridge *bridge); +int pci_register_host_bridge(struct pci_host_bridge *); int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int busmax); int pci_bus_update_busn_res_end(struct pci_bus *b, int busmax); void pci_bus_release_busn_res(struct pci_bus *b);