get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/958754/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 958754,
    "url": "http://patchwork.ozlabs.org/api/patches/958754/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20180817102645.3839621-15-arnd@arndb.de/",
    "project": {
        "id": 2,
        "url": "http://patchwork.ozlabs.org/api/projects/2/?format=api",
        "name": "Linux PPC development",
        "link_name": "linuxppc-dev",
        "list_id": "linuxppc-dev.lists.ozlabs.org",
        "list_email": "linuxppc-dev@lists.ozlabs.org",
        "web_url": "https://github.com/linuxppc/wiki/wiki",
        "scm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git",
        "webscm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/",
        "list_archive_url": "https://lore.kernel.org/linuxppc-dev/",
        "list_archive_url_format": "https://lore.kernel.org/linuxppc-dev/{}/",
        "commit_url_format": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}"
    },
    "msgid": "<20180817102645.3839621-15-arnd@arndb.de>",
    "list_archive_url": "https://lore.kernel.org/linuxppc-dev/20180817102645.3839621-15-arnd@arndb.de/",
    "date": "2018-08-17T10:26:44",
    "name": "[RFC,14/15] PCI: make pcibios_root_bridge_prepare a callback",
    "commit_ref": null,
    "pull_url": null,
    "state": "not-applicable",
    "archived": false,
    "hash": "7a280b79bbf7596821e0253567e4fbcc37ab8b63",
    "submitter": {
        "id": 30,
        "url": "http://patchwork.ozlabs.org/api/people/30/?format=api",
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20180817102645.3839621-15-arnd@arndb.de/mbox/",
    "series": [
        {
            "id": 61229,
            "url": "http://patchwork.ozlabs.org/api/series/61229/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=61229",
            "date": "2018-08-17T10:26:32",
            "name": "PCI: turn some __weak functions into callbacks",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/61229/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/958754/comments/",
    "check": "success",
    "checks": "http://patchwork.ozlabs.org/api/patches/958754/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>",
        "X-Original-To": [
            "patchwork-incoming@ozlabs.org",
            "linuxppc-dev@lists.ozlabs.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@ozlabs.org",
            "linuxppc-dev@lists.ozlabs.org"
        ],
        "Received": [
            "from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 41sKWH0zdYz9s3Z\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri, 17 Aug 2018 20:41:31 +1000 (AEST)",
            "from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 41sKWG6YhhzF0vb\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri, 17 Aug 2018 20:41:30 +1000 (AEST)",
            "from mout.kundenserver.de (mout.kundenserver.de [217.72.192.75])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128\n\tbits)) (No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 41sKKB4GR2zDrRN\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tFri, 17 Aug 2018 20:32:45 +1000 (AEST)",
            "from wuerfel.lan ([109.193.40.16]) by mrelayeu.kundenserver.de\n\t(mreue101 [212.227.15.145]) with ESMTPA (Nemesis) id\n\t0MIe3k-1fsotc3lQO-002Dcj; Fri, 17 Aug 2018 12:27:21 +0200"
        ],
        "Authentication-Results": [
            "ozlabs.org;\n\tdmarc=none (p=none dis=none) header.from=arndb.de",
            "lists.ozlabs.org;\n\tdmarc=none (p=none dis=none) header.from=arndb.de",
            "lists.ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=arndb.de\n\t(client-ip=217.72.192.75; helo=mout.kundenserver.de;\n\tenvelope-from=arnd@arndb.de; receiver=<UNKNOWN>)",
            "lists.ozlabs.org;\n\tdmarc=none (p=none dis=none) header.from=arndb.de"
        ],
        "X-Greylist": "delayed 301 seconds by postgrey-1.36 at bilbo;\n\tFri, 17 Aug 2018 20:32:46 AEST",
        "From": "Arnd Bergmann <arnd@arndb.de>",
        "To": "linux-pci@vger.kernel.org,\n\tBjorn Helgaas <bhelgaas@google.com>",
        "Subject": "[RFC 14/15] PCI: make pcibios_root_bridge_prepare a callback",
        "Date": "Fri, 17 Aug 2018 12:26:44 +0200",
        "Message-Id": "<20180817102645.3839621-15-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:vZ1tUwmaDYGgBzDuu0lrWWtkxQnlkXj5dtYX8zCbAbjMLPhmXwP\n\tt9LwpfD9mkpXEZveH7+fB8uk6X4OjdFYNyOnA1ey8wm+8CsZSfl/mDsjXOrb7MOd2PtYpje\n\tOlpTlmfI8HEz2MmVEtEV3Ua7aljIba3990heu2dTAIP1yUOKAYEcf+hRy1ZnQhsCmKw51jI\n\t+C4qufrNzYmzj/M0BHZrg==",
        "X-UI-Out-Filterresults": "notjunk:1; V01:K0:dxliqE4bdUU=:3wNTq0x8GVJJDBiQ3AXqXs\n\tG1qv2M9EJ/R9gkV1bKMYZCs8sWmMSWUClGEIkfFaJ2W2G0STrO3wSkWADrlKtkCc9PfdTAoup\n\t3zxFFpGjrFC3KfzxAbZML6rOtKnoEb5e3CksJj+aa1fm6aeQMQTvedb371xxPgfGWKva598XF\n\tPUSLvS6C3LcfmUQxzp0qZhcq8yppA5YYztqdY4TGZalE1Y8SY+nXhfKO6wlKvVk8gBAw8bicO\n\tEVd+BdFeloh0voA6J06gKNEZYjc6N7/m2U+JDcnX3Ypj9EGMwtWwQMC/6iRinDdnA0fgkwqW4\n\tveqzwD45anZ44l+bkcdHI139spogAFCokqTAoS3lNwGdDFgnCrnv5wpnz92x18JhrHZFSK46h\n\t1ooUzAs76v4ReXOyxEaBYCIkZfLExQcmeFHG/69ANMAnxIAA7Yx8NyY+vmE5/VThcDYmgZXGe\n\t1jKXIZH/4ZFYKwPKIieTXdvXbmbnn+iTnmgndrm+wqozHbn1r61w/IAcy+XYfVEqj5uzXRSMJ\n\t1QxFviL9Dt34LjlL5KMfIJTwrsc9uYg7id2Spp2jrfngo0HnfwR71KrBA6ZNY7a0IAEr+OX4X\n\t030RsyIZnKMH2VTlrWfZhEjRisjQ8d9DdbWD9684DeNYA34N2KYNUgsazhi7hJGNV8xjU9sY+\n\tIW1+wFwF4nHlkdCh9SPWlrphoEsYEnEVQAW5fgWeSJm3dqoevlxFhDJCnasD5iu58MTk=",
        "X-BeenThere": "linuxppc-dev@lists.ozlabs.org",
        "X-Mailman-Version": "2.1.27",
        "Precedence": "list",
        "List-Id": "Linux on PowerPC Developers Mail List\n\t<linuxppc-dev.lists.ozlabs.org>",
        "List-Unsubscribe": "<https://lists.ozlabs.org/options/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.ozlabs.org/pipermail/linuxppc-dev/>",
        "List-Post": "<mailto:linuxppc-dev@lists.ozlabs.org>",
        "List-Help": "<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=help>",
        "List-Subscribe": "<https://lists.ozlabs.org/listinfo/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=subscribe>",
        "Cc": "Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,\n\tArnd Bergmann <arnd@arndb.de>, linux-kernel@vger.kernel.org,\n\tChristoph Hellwig <hch@infradead.org>, linux-acpi@vger.kernel.org,\n\tlinuxppc-dev@lists.ozlabs.org",
        "Errors-To": "linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org",
        "Sender": "\"Linuxppc-dev\"\n\t<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>"
    },
    "content": "pcibios_root_bridge_prepare() is always used as a per host bridge\nfunction, not per architecture.\n\nMaking it a callback in the pci_host_bridge instead lets the host\nbridge implementation easily override it, and avoids the checks\nin the architecture for which host bridge implementation is being\nused.\n\nAlternatively, we could probably just call the pcibios_root_bridge_prepare\nafter alloc_pci_host_bridge() here and get rid of it as a generic\ninterface altogether, but doing that has a slightly higher chance\nof breaking something subtle.\n\nSigned-off-by: Arnd Bergmann <arnd@arndb.de>\n---\n arch/arm64/kernel/pci.c          | 18 ++++++++----------\n arch/ia64/pci/pci.c              | 15 ++++-----------\n arch/powerpc/kernel/pci-common.c |  9 +--------\n arch/x86/pci/acpi.c              | 15 ++++-----------\n drivers/acpi/pci_root.c          |  1 +\n drivers/pci/probe.c              | 28 ++++++++++++++++------------\n include/linux/acpi.h             |  2 ++\n include/linux/pci.h              |  3 +--\n 8 files changed, 37 insertions(+), 54 deletions(-)",
    "diff": "diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c\nindex 3d196c68e362..8958a7c32a9f 100644\n--- a/arch/arm64/kernel/pci.c\n+++ b/arch/arm64/kernel/pci.c\n@@ -71,19 +71,17 @@ int acpi_pci_bus_find_domain_nr(struct pci_bus *bus)\n \treturn root->segment;\n }\n \n-int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)\n+int acpi_pci_root_bridge_prepare(struct pci_host_bridge *bridge)\n {\n-\tif (!acpi_disabled) {\n-\t\tstruct pci_config_window *cfg = bridge->bus->sysdata;\n-\t\tstruct acpi_device *adev = to_acpi_device(cfg->parent);\n-\t\tstruct device *bus_dev = &bridge->bus->dev;\n+\tstruct pci_config_window *cfg = bridge->bus->sysdata;\n+\tstruct acpi_device *adev = to_acpi_device(cfg->parent);\n+\tstruct device *bus_dev = &bridge->bus->dev;\n \n-\t\tACPI_COMPANION_SET(&bridge->dev, adev);\n-\t\tset_dev_node(bus_dev, acpi_get_node(acpi_device_handle(adev)));\n+\tACPI_COMPANION_SET(&bridge->dev, adev);\n+\tset_dev_node(bus_dev, acpi_get_node(acpi_device_handle(adev)));\n \n-\t\t/* Try to assign the IRQ number when probing a new device */\n-\t\tbridge->alloc_irq = acpi_pci_irq_enable;\n-\t}\n+\t/* Try to assign the IRQ number when probing a new device */\n+\tbridge->alloc_irq = acpi_pci_irq_enable;\n \n \treturn 0;\n }\ndiff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c\nindex 7ccc64d5fe3e..511b8a058d80 100644\n--- a/arch/ia64/pci/pci.c\n+++ b/arch/ia64/pci/pci.c\n@@ -308,18 +308,11 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)\n \t\t\t\t    &info->common, &info->controller);\n }\n \n-int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)\n+int acpi_pci_root_bridge_prepare(struct pci_host_bridge *bridge)\n {\n-\t/*\n-\t * We pass NULL as parent to pci_create_root_bus(), so if it is not NULL\n-\t * here, pci_create_root_bus() has been called by someone else and\n-\t * sysdata is likely to be different from what we expect.  Let it go in\n-\t * that case.\n-\t */\n-\tif (!bridge->dev.parent) {\n-\t\tstruct pci_controller *controller = bridge->bus->sysdata;\n-\t\tACPI_COMPANION_SET(&bridge->dev, controller->companion);\n-\t}\n+\tstruct pci_controller *controller = bridge->bus->sysdata;\n+\tACPI_COMPANION_SET(&bridge->dev, controller->companion);\n+\n \treturn 0;\n }\n \ndiff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c\nindex afc9598e4349..5e5c6dd7ebe8 100644\n--- a/arch/powerpc/kernel/pci-common.c\n+++ b/arch/powerpc/kernel/pci-common.c\n@@ -771,14 +771,6 @@ int pci_proc_domain(struct pci_bus *bus)\n \treturn 1;\n }\n \n-int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)\n-{\n-\tif (ppc_md.pcibios_root_bridge_prepare)\n-\t\treturn ppc_md.pcibios_root_bridge_prepare(bridge);\n-\n-\treturn 0;\n-}\n-\n /* This header fixup will do the resource fixup for all devices as they are\n  * probed, but not for bridge ranges\n  */\n@@ -1612,6 +1604,7 @@ void pcibios_scan_phb(struct pci_controller *hose)\n \tpci_add_resource(&bridge->windows, &hose->busn);\n \n \tbridge->bus_add_device = ppc_md->pcibios_bus_add_device;\n+\tbridge->prepare = ppc_md->pcibios_root_bridge_prepare;\n \tbridge->dev.parent = hose->parent;\n \tbridge->sysdata = hose;\n \tbridge->busnr = hose->first_busno;\ndiff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c\nindex 5559dcaddd5e..041b2003707c 100644\n--- a/arch/x86/pci/acpi.c\n+++ b/arch/x86/pci/acpi.c\n@@ -382,18 +382,11 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)\n \treturn bus;\n }\n \n-int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)\n+int acpi_pci_root_bridge_prepare(struct pci_host_bridge *bridge)\n {\n-\t/*\n-\t * We pass NULL as parent to pci_create_root_bus(), so if it is not NULL\n-\t * here, pci_create_root_bus() has been called by someone else and\n-\t * sysdata is likely to be different from what we expect.  Let it go in\n-\t * that case.\n-\t */\n-\tif (!bridge->dev.parent) {\n-\t\tstruct pci_sysdata *sd = bridge->bus->sysdata;\n-\t\tACPI_COMPANION_SET(&bridge->dev, sd->companion);\n-\t}\n+\tstruct pci_sysdata *sd = bridge->bus->sysdata;\n+\tACPI_COMPANION_SET(&bridge->dev, sd->companion);\n+\n \treturn 0;\n }\n \ndiff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c\nindex 5f73de3b67c8..5da0f70c4e65 100644\n--- a/drivers/acpi/pci_root.c\n+++ b/drivers/acpi/pci_root.c\n@@ -910,6 +910,7 @@ struct pci_bus *acpi_pci_root_create(struct acpi_pci_root *root,\n \tbridge->sysdata = sysdata;\n \tbridge->busnr = busnum;\n \tbridge->ops = ops->pci_ops;\n+\tbridge->prepare = acpi_pci_root_bridge_prepare;\n \tpci_set_host_bridge_release(bridge, acpi_pci_root_release_info,\n \t\t\t\t    info);\n \ndiff --git a/drivers/pci/probe.c b/drivers/pci/probe.c\nindex eaedb4fe143a..f493d7e299e6 100644\n--- a/drivers/pci/probe.c\n+++ b/drivers/pci/probe.c\n@@ -762,6 +762,22 @@ static void pci_set_bus_msi_domain(struct pci_bus *bus)\n \tdev_set_msi_domain(&bus->dev, d);\n }\n \n+/**\n+ * pcibios_root_bridge_prepare - Platform-specific host bridge setup\n+ * @bridge: Host bridge to set up\n+ *\n+ * Host bridge drivers can do some last minute fixups on the bridge\n+ * here. Usually this should be done before calling pci_register_host_bridge\n+ * though, so this hook can be removed.\n+ */\n+static int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)\n+{\n+\tif (bridge->prepare)\n+\t\treturn bridge->prepare(bridge);\n+\n+\treturn 0;\n+}\n+\n /*\n  * pci_register_host_bridge() - Register a host bridge without scanning\n  *\n@@ -2889,18 +2905,6 @@ unsigned int pci_scan_child_bus(struct pci_bus *bus)\n }\n EXPORT_SYMBOL_GPL(pci_scan_child_bus);\n \n-/**\n- * pcibios_root_bridge_prepare - Platform-specific host bridge setup\n- * @bridge: Host bridge to set up\n- *\n- * Default empty implementation.  Replace with an architecture-specific setup\n- * routine, if necessary.\n- */\n-int __weak pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)\n-{\n-\treturn 0;\n-}\n-\n void __weak pcibios_add_bus(struct pci_bus *bus)\n {\n }\ndiff --git a/include/linux/acpi.h b/include/linux/acpi.h\nindex 9967ba2e0b31..62c0278a7614 100644\n--- a/include/linux/acpi.h\n+++ b/include/linux/acpi.h\n@@ -336,12 +336,14 @@ extern int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity);\n void acpi_unregister_gsi (u32 gsi);\n \n struct pci_dev;\n+struct pci_host_bridge;\n \n int acpi_pci_irq_enable (struct pci_dev *dev);\n void acpi_penalize_isa_irq(int irq, int active);\n bool acpi_isa_irq_available(int irq);\n void acpi_penalize_sci_irq(int irq, int trigger, int polarity);\n void acpi_pci_irq_disable (struct pci_dev *dev);\n+int acpi_pci_root_bridge_prepare(struct pci_host_bridge *bridge);\n \n extern int ec_read(u8 addr, u8 *val);\n extern int ec_write(u8 addr, u8 val);\ndiff --git a/include/linux/pci.h b/include/linux/pci.h\nindex 1296d9fcc5da..24216daef6f8 100644\n--- a/include/linux/pci.h\n+++ b/include/linux/pci.h\n@@ -472,6 +472,7 @@ struct pci_host_bridge {\n \tvoid\t\t*sysdata;\n \tint\t\tbusnr;\n \tstruct list_head windows;\t/* resource_entry */\n+\tint (*prepare)(struct pci_host_bridge *bridge);\n \tu8 (*swizzle_irq)(struct pci_dev *, u8 *); /* Platform IRQ swizzler */\n \tint (*map_irq)(const struct pci_dev *, u8, u8);\n \tvoid (*release_fn)(struct pci_host_bridge *);\n@@ -518,8 +519,6 @@ void pci_set_host_bridge_release(struct pci_host_bridge *bridge,\n \t\t\t\t void (*release_fn)(struct pci_host_bridge *),\n \t\t\t\t void *release_data);\n \n-int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge);\n-\n /*\n  * The first PCI_BRIDGE_RESOURCE_NUM PCI bus resources (those that correspond\n  * to P2P or CardBus bridge windows) go in a table.  Additional ones (for\n",
    "prefixes": [
        "RFC",
        "14/15"
    ]
}