get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 19761,
    "url": "http://patches.dpdk.org/api/patches/19761/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1484801117-779-6-git-send-email-thomas.monjalon@6wind.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": "<1484801117-779-6-git-send-email-thomas.monjalon@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1484801117-779-6-git-send-email-thomas.monjalon@6wind.com",
    "date": "2017-01-19T04:45:09",
    "name": "[dpdk-dev,v11,05/13] app/test: check bus scan",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "2045104e28b17c778a0616d40c3386a1bd4f05fa",
    "submitter": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/people/1/?format=api",
        "name": "Thomas Monjalon",
        "email": "thomas.monjalon@6wind.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1484801117-779-6-git-send-email-thomas.monjalon@6wind.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/19761/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/19761/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 [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id D46D6FB48;\n\tThu, 19 Jan 2017 05:45:43 +0100 (CET)",
            "from mail-wm0-f54.google.com (mail-wm0-f54.google.com\n\t[74.125.82.54]) by dpdk.org (Postfix) with ESMTP id 459A9FB21\n\tfor <dev@dpdk.org>; Thu, 19 Jan 2017 05:45:27 +0100 (CET)",
            "by mail-wm0-f54.google.com with SMTP id c206so58680100wme.0\n\tfor <dev@dpdk.org>; Wed, 18 Jan 2017 20:45:27 -0800 (PST)",
            "from XPS13.localdomain (184.203.134.77.rev.sfr.net.\n\t[77.134.203.184]) by smtp.gmail.com with ESMTPSA id\n\tt194sm2568586wmd.1.2017.01.18.20.45.26\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tWed, 18 Jan 2017 20:45:26 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=6wind-com.20150623.gappssmtp.com; s=20150623;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=hqGFAbU3UPyPmLwJPGV7yKFzEDmeZJZIXg+zigqUfcE=;\n\tb=HRUa3N2vbO3Mx/KyfPiXxtiyyqDW8LH9cp5bcRth/6HIQxoyAX65vwxINFnaSH7Dv8\n\t6ehWgs7Xl74tBYLBX2Ml5QEChY2YWNZAVLxkALBojYugzUYSosnuhb0X8HJyirUAW624\n\tBc8C+L/NDUduOrXhG4ACqxan6ifQV1Pq89u9PQkFKqVqwGb+yx87ITImSQRSB4F21+sm\n\tNshe+kAyTM2O01bcODACzC3I7R5qToKtiaGrtsHZBfcn4OtuBxfYiqnf/TYb311ZXK4g\n\tOeV72/v5RG2TXPNb7w+JfwsBjKZEaFb3aJ2fTWekxJy0BLKon/7quvyr+MYtqCWdzG3Y\n\tJvoQ==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=hqGFAbU3UPyPmLwJPGV7yKFzEDmeZJZIXg+zigqUfcE=;\n\tb=rzuQ+UJDbxbmvjf5IHceJQj/ids+9wNcsrvKNL4d6uZB2vnQ0OoTiaHlbxQBAu0hL8\n\teSeu5NDEYK6Q0CNTw7mXu9/4YrMLuiacC6PBPE9z/8Ud+xGnm0mzFWoHNpIAm315lbZd\n\tJn5E9FxAn1DPhy1zyf+YN3LOrsJMdYj13NIzAyk4nh/v0o16UYdUR9N6oAJyn/ABzaGs\n\tcH5Z1oMBAMcelfQpG/h1e2A6LViG9Rk2RHUQBRbXUHn3T6R3tKvai7l9S7klcpMVR5Av\n\tO/GXXuIIN1qs8LLePe7wr5jkfxirSm9g7zVn2l1ff98zw7fQsTNzlf9VjX7g17egPDMN\n\t7NIQ==",
        "X-Gm-Message-State": "AIkVDXIVsol8P/hMV7tBiZspz5kniMVHbzzE2Vb1OQygqOdkKUl4fvxhMhq43g3va8c7Dvmx",
        "X-Received": "by 10.28.55.68 with SMTP id e65mr5610121wma.62.1484801126765;\n\tWed, 18 Jan 2017 20:45:26 -0800 (PST)",
        "From": "Thomas Monjalon <thomas.monjalon@6wind.com>",
        "To": "Shreyansh Jain <shreyansh.jain@nxp.com>",
        "Cc": "dev@dpdk.org",
        "Date": "Thu, 19 Jan 2017 05:45:09 +0100",
        "Message-Id": "<1484801117-779-6-git-send-email-thomas.monjalon@6wind.com>",
        "X-Mailer": "git-send-email 2.7.0",
        "In-Reply-To": "<1484801117-779-1-git-send-email-thomas.monjalon@6wind.com>",
        "References": "<1484748329-5418-1-git-send-email-shreyansh.jain@nxp.com>\n\t<1484801117-779-1-git-send-email-thomas.monjalon@6wind.com>",
        "Subject": "[dpdk-dev] [PATCH v11 05/13] app/test: check bus scan",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Shreyansh Jain <shreyansh.jain@nxp.com>\n\nSigned-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>\n---\n app/test/test_bus.c | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++\n 1 file changed, 174 insertions(+)",
    "diff": "diff --git a/app/test/test_bus.c b/app/test/test_bus.c\nindex e2a58fa..de4f1ab 100644\n--- a/app/test/test_bus.c\n+++ b/app/test/test_bus.c\n@@ -106,10 +106,26 @@ struct dummy_bus_map {\n struct rte_bus_list orig_bus_list =\n \tTAILQ_HEAD_INITIALIZER(orig_bus_list);\n \n+/* Forward declarations for callbacks from bus */\n+\n+/* Bus A\n+ * Scan would register devA1 and devA2 to bus\n+ */\n+static int scan_fn_for_busA(void);\n+\n+/* Bus B\n+ * Scan would register devB1 and devB2 to bus\n+ */\n+static int scan_fn_for_busB(void);\n+\n+/* generic implementations wrapped around by above declarations */\n+static int generic_scan_fn(struct rte_bus *bus);\n+\n struct dummy_bus busA = {\n \t.name = \"busA_impl\", /* busA */\n \t.bus = {\n \t\t.name = \"busA\",\n+\t\t.scan = scan_fn_for_busA,\n \t},\n };\n \n@@ -117,6 +133,7 @@ struct dummy_bus busB = {\n \t.name = \"busB_impl\", /* busB */\n \t.bus = {\n \t\t.name = \"busB\",\n+\t\t.scan = scan_fn_for_busB,\n \t},\n };\n \n@@ -222,9 +239,80 @@ dump_device_tree(void)\n \tprintf(\"------>8-------\\n\");\n }\n \n+/* @internal\n+ * Move over the bus_map and find the entry matching the bus object\n+ * passed as argument.\n+ * For each device in that bus_map list, register.\n+ *\n+ * @param bus\n+ *\tbus to scan againt test entry\n+ * @return\n+ *\t0 for successful scan, even if no devices are found\n+ *\t!0 for any error in scanning (like, invalid bus)\n+ */\n+static int\n+generic_scan_fn(struct rte_bus *bus)\n+{\n+\tint i = 0;\n+\tstruct dummy_device *ddev = NULL;\n+\tstruct dummy_bus_map *dbmap = NULL;\n+\tstruct dummy_bus *db = NULL;\n+\n+\tif (!bus)\n+\t\treturn -1;\n+\n+\t/* Extract the device tree node using the bus passed */\n+\tfor (i = 0; bus_map[i].name; i++) {\n+\t\tif (!strcmp(bus_map[i].name, bus->name)) {\n+\t\t\tdbmap = &bus_map[i];\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\n+\tif (!dbmap)\n+\t\treturn -1;\n+\n+\tdb = dbmap->dbus;\n+\n+\t/* For all the devices in the device tree (bus_map), add device */\n+\tfor (i = 0; dbmap->ddevices[i]; i++) {\n+\t\tddev = dbmap->ddevices[i];\n+\t\tTAILQ_INSERT_TAIL(&db->device_list, ddev, next);\n+\t}\n+\n+\treturn 0;\n+}\n+\n+int\n+scan_fn_for_busA(void) {\n+\tstruct dummy_bus_map *dbm;\n+\n+\tdbm = &bus_map[0];\n+\twhile (dbm) {\n+\t\tif (strcmp(dbm->name, \"busA\") == 0)\n+\t\t\treturn generic_scan_fn(&dbm->dbus->bus);\n+\t\tdbm++;\n+\t}\n+\treturn 1;\n+}\n+\n+int\n+scan_fn_for_busB(void) {\n+\tstruct dummy_bus_map *dbm;\n+\n+\tdbm = &bus_map[0];\n+\twhile (dbm) {\n+\t\tif (strcmp(dbm->name, \"busB\") == 0)\n+\t\t\treturn generic_scan_fn(&dbm->dbus->bus);\n+\t\tdbm++;\n+\t}\n+\treturn 1;\n+}\n+\n static int\n test_bus_setup(void)\n {\n+\tint i = 0;\n \tstruct rte_bus *bus_p = NULL;\n \n \t/* Preserve the original bus list before executing test */\n@@ -234,6 +322,13 @@ test_bus_setup(void)\n \t\tTAILQ_INSERT_TAIL(&orig_bus_list, bus_p, next);\n \t}\n \n+\t/* Initialize the bus lists */\n+\tfor (i = 0; bus_map[i].name; i++) {\n+\t\tTAILQ_INIT(&bus_map[i].dbus->device_list);\n+\t\tTAILQ_INIT(&bus_map[i].dbus->driver_list);\n+\t}\n+\n+\tdump_device_tree();\n \treturn 0;\n }\n \n@@ -332,6 +427,79 @@ test_bus_unregistration(void)\n \treturn 0;\n }\n \n+static int\n+test_device_unregistration_on_bus(void)\n+{\n+\tint i;\n+\tstruct rte_bus *bus = NULL;\n+\tstruct dummy_device *ddev;\n+\tstruct dummy_bus *dbus;\n+\n+\tfor (i = 0; bus_map[i].name; i++) {\n+\t\tbus = &(bus_map[i].dbus->bus);\n+\t\tif (!bus) {\n+\t\t\tprintf(\"Unable to find bus (%s)\\n\",\n+\t\t\t       bus_map[i].name);\n+\t\t\treturn -1;\n+\t\t}\n+\n+\t\tdbus = container_of(bus, struct dummy_bus, bus);\n+\t\t/* For bus 'bus', unregister all devices */\n+\t\tTAILQ_FOREACH(ddev, &dbus->device_list, next) {\n+\t\t\tTAILQ_REMOVE(&dbus->device_list, ddev, next);\n+\t\t}\n+\t}\n+\n+\tfor (i = 0; bus_map[i].name; i++) {\n+\t\tbus = &(bus_map[i].dbus->bus);\n+\t\tdbus = container_of(bus, struct dummy_bus, bus);\n+\n+\t\tif (!TAILQ_EMPTY(&dbus->device_list)) {\n+\t\t\tprintf(\"Unable to remove all devices on bus (%s)\\n\",\n+\t\t\t       bus->name);\n+\t\t\treturn -1;\n+\t\t}\n+\t}\n+\n+\t/* All devices from all buses have been removed */\n+\tprintf(\"All devices on all buses unregistered.\\n\");\n+\tdump_device_tree();\n+\n+\treturn 0;\n+}\n+\n+/* @internal\n+ * For each bus registered, call the scan function to identify devices\n+ * on the bus.\n+ *\n+ * @param void\n+ * @return\n+ *\t0 for successful scan\n+ *\t!0 for unsuccessful scan\n+ *\n+ */\n+static int\n+test_bus_scan(void)\n+{\n+\tint ret;\n+\tstruct rte_bus *bus;\n+\n+\tTAILQ_FOREACH(bus, &rte_bus_list, next) {\n+\t\t/* Call the scan function for each bus */\n+\t\tret = bus->scan();\n+\t\tif (ret) {\n+\t\t\tprintf(\"Scan of buses failed.\\n\");\n+\t\t\treturn -1;\n+\t\t}\n+\t}\n+\n+\tprintf(\"Scan of all buses completed.\\n\");\n+\tdump_device_tree();\n+\n+\treturn 0;\n+}\n+\n+\n int\n test_bus(void)\n {\n@@ -342,6 +510,12 @@ test_bus(void)\n \tif (test_bus_registration())\n \t\treturn -1;\n \n+\tif (test_bus_scan())\n+\t\treturn -1;\n+\n+\tif (test_device_unregistration_on_bus())\n+\t\treturn -1;\n+\n \tif (test_bus_unregistration())\n \t\treturn -1;\n \n",
    "prefixes": [
        "dpdk-dev",
        "v11",
        "05/13"
    ]
}