get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 41942,
    "url": "http://patches.dpdk.org/api/patches/41942/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1530267871-7161-5-git-send-email-jia.guo@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1530267871-7161-5-git-send-email-jia.guo@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1530267871-7161-5-git-send-email-jia.guo@intel.com",
    "date": "2018-06-29T10:24:26",
    "name": "[V4,4/9] bus/pci: implement sigbus handler operation",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "68a9997a1c0f36586b0a4a0b39602506158b8c22",
    "submitter": {
        "id": 507,
        "url": "http://patches.dpdk.org/api/people/507/?format=api",
        "name": "Guo, Jia",
        "email": "jia.guo@intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1530267871-7161-5-git-send-email-jia.guo@intel.com/mbox/",
    "series": [
        {
            "id": 314,
            "url": "http://patches.dpdk.org/api/series/314/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=314",
            "date": "2018-06-29T10:24:22",
            "name": "hot plug failure handle mechanism",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/314/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/41942/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/41942/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 255E91B522;\n\tFri, 29 Jun 2018 12:27:07 +0200 (CEST)",
            "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n\tby dpdk.org (Postfix) with ESMTP id F17FE1B518\n\tfor <dev@dpdk.org>; Fri, 29 Jun 2018 12:27:03 +0200 (CEST)",
            "from fmsmga005.fm.intel.com ([10.253.24.32])\n\tby orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t29 Jun 2018 03:27:03 -0700",
            "from jeffguo-z170x-ud5.sh.intel.com (HELO localhost.localdomain)\n\t([10.67.104.10])\n\tby fmsmga005.fm.intel.com with ESMTP; 29 Jun 2018 03:27:00 -0700"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.51,285,1526367600\"; d=\"scan'208\";a=\"241324438\"",
        "From": "Jeff Guo <jia.guo@intel.com>",
        "To": "stephen@networkplumber.org, bruce.richardson@intel.com,\n\tferruh.yigit@intel.com, konstantin.ananyev@intel.com,\n\tgaetan.rivet@6wind.com, jingjing.wu@intel.com, thomas@monjalon.net,\n\tmotih@mellanox.com, matan@mellanox.com, harry.van.haaren@intel.com,\n\tqi.z.zhang@intel.com, shaopeng.he@intel.com, bernard.iremonger@intel.com",
        "Cc": "jblunck@infradead.org, shreyansh.jain@nxp.com, dev@dpdk.org,\n\tjia.guo@intel.com, helin.zhang@intel.com",
        "Date": "Fri, 29 Jun 2018 18:24:26 +0800",
        "Message-Id": "<1530267871-7161-5-git-send-email-jia.guo@intel.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1530267871-7161-1-git-send-email-jia.guo@intel.com>",
        "References": "<1530267871-7161-1-git-send-email-jia.guo@intel.com>",
        "Subject": "[dpdk-dev] [PATCH V4 4/9] bus/pci: implement sigbus handler\n\toperation",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "This patch implements the ops of sigbus handler for PCI bus, it is\nfunctional to find the corresponding pci device which is be hot removal.\nand then handle the hot plug failure for this device.\n\nSigned-off-by: Jeff Guo <jia.guo@intel.com>\n---\nv4->v3:\nsplit patches to be small and clear.\n---\n drivers/bus/pci/pci_common.c | 50 ++++++++++++++++++++++++++++++++++++++++++++\n 1 file changed, 50 insertions(+)",
    "diff": "diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c\nindex 095cd4e..0f5b4af 100644\n--- a/drivers/bus/pci/pci_common.c\n+++ b/drivers/bus/pci/pci_common.c\n@@ -400,6 +400,32 @@ pci_find_device(const struct rte_device *start, rte_dev_cmp_t cmp,\n \treturn NULL;\n }\n \n+/* check the failure address belongs to which device. */\n+static struct rte_pci_device *\n+pci_find_device_by_addr(const void *failure_addr)\n+{\n+\tstruct rte_pci_device *pdev = NULL;\n+\tint i;\n+\n+\tFOREACH_DEVICE_ON_PCIBUS(pdev) {\n+\t\tfor (i = 0; i != RTE_DIM(pdev->mem_resource); i++) {\n+\t\t\tif ((uint64_t)(uintptr_t)failure_addr >=\n+\t\t\t    (uint64_t)(uintptr_t)pdev->mem_resource[i].addr &&\n+\t\t\t    (uint64_t)(uintptr_t)failure_addr <\n+\t\t\t    (uint64_t)(uintptr_t)pdev->mem_resource[i].addr +\n+\t\t\t    pdev->mem_resource[i].len) {\n+\t\t\t\tRTE_LOG(INFO, EAL, \"Failure address \"\n+\t\t\t\t\t\"%16.16\"PRIx64\" belongs to \"\n+\t\t\t\t\t\"device %s!\\n\",\n+\t\t\t\t\t(uint64_t)(uintptr_t)failure_addr,\n+\t\t\t\t\tpdev->device.name);\n+\t\t\t\treturn pdev;\n+\t\t\t}\n+\t\t}\n+\t}\n+\treturn NULL;\n+}\n+\n static int\n pci_hotplug_handler(struct rte_device *dev)\n {\n@@ -428,6 +454,29 @@ pci_hotplug_handler(struct rte_device *dev)\n }\n \n static int\n+pci_sigbus_handler(const void *failure_addr)\n+{\n+\tstruct rte_pci_device *pdev = NULL;\n+\tint ret = 0;\n+\n+\tpdev = pci_find_device_by_addr(failure_addr);\n+\tif (!pdev) {\n+\t\t/* It is a generic sigbus error. */\n+\t\tret = 1;\n+\t} else {\n+\t\t/* The sigbus error is caused of hot removal. */\n+\t\tret = pci_hotplug_handler(&pdev->device);\n+\t\tif (ret) {\n+\t\t\tRTE_LOG(ERR, EAL, \"Failed to handle hot plug for \"\n+\t\t\t\t\"device %s\", pdev->name);\n+\t\t\tret = -1;\n+\t\t\trte_errno = -1;\n+\t\t}\n+\t}\n+\treturn ret;\n+}\n+\n+static int\n pci_plug(struct rte_device *dev)\n {\n \treturn pci_probe_all_drivers(RTE_DEV_TO_PCI(dev));\n@@ -458,6 +507,7 @@ struct rte_pci_bus rte_pci_bus = {\n \t\t.parse = pci_parse,\n \t\t.get_iommu_class = rte_pci_get_iommu_class,\n \t\t.hotplug_handler = pci_hotplug_handler,\n+\t\t.sigbus_handler = pci_sigbus_handler,\n \t},\n \t.device_list = TAILQ_HEAD_INITIALIZER(rte_pci_bus.device_list),\n \t.driver_list = TAILQ_HEAD_INITIALIZER(rte_pci_bus.driver_list),\n",
    "prefixes": [
        "V4",
        "4/9"
    ]
}