get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 10275,
    "url": "http://patches.dpdk.org/api/patches/10275/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1454078953-23744-9-git-send-email-david.marchand@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": "<1454078953-23744-9-git-send-email-david.marchand@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1454078953-23744-9-git-send-email-david.marchand@6wind.com",
    "date": "2016-01-29T14:49:12",
    "name": "[dpdk-dev,v2,8/9] pci: implement blacklist using a hook",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "3441d379b75d586c2360eefe83312ccce46c14ce",
    "submitter": {
        "id": 3,
        "url": "http://patches.dpdk.org/api/people/3/?format=api",
        "name": "David Marchand",
        "email": "david.marchand@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/1454078953-23744-9-git-send-email-david.marchand@6wind.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/10275/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/10275/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 25C64C71C;\n\tFri, 29 Jan 2016 15:49:33 +0100 (CET)",
            "from mail-wm0-f51.google.com (mail-wm0-f51.google.com\n\t[74.125.82.51]) by dpdk.org (Postfix) with ESMTP id 70C47C6E8\n\tfor <dev@dpdk.org>; Fri, 29 Jan 2016 15:49:27 +0100 (CET)",
            "by mail-wm0-f51.google.com with SMTP id 128so55990473wmz.1\n\tfor <dev@dpdk.org>; Fri, 29 Jan 2016 06:49:27 -0800 (PST)",
            "from gloops.dev.6wind.com (144.77.126.78.rev.sfr.net.\n\t[78.126.77.144]) by smtp.gmail.com with ESMTPSA id\n\ty188sm7811294wmy.11.2016.01.29.06.49.26\n\t(version=TLSv1/SSLv3 cipher=OTHER);\n\tFri, 29 Jan 2016 06:49: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=FKGPYp8SXjVj+CGTDpbmFzxg7KTW74xVFQVMK9QGSDg=;\n\tb=syf0B31ofwSd+p55Gzd8tL13m30eqOU3IuFhV4kQVEngNL5Yr/rkvkbykpGicU/XJ3\n\tY8sfbErnn8Ngzd+y1L2e2540NAnrogumYXppFLzzKNPQwJYe6nkq9/fVMxCT22u8kqDE\n\trhmaL+5WYVII+xRSgIqzL6pISiXKFjR51n/pFVcgWsWwvJ1Ngbcxjacm8NQABNaZIzjF\n\t8ACiULQCz9MeshNeqc4jKerUyOKm74iS9w7d0G3GBGsnOTsseUQw4SiJDFuxIUIA5Maz\n\tR1yCWuu5ZXpJfJXBsqBaqVp6YMhQNabY9lRrrndZCqWpw6AXe9BMvd8hlwE2zx6L3C4e\n\tydeQ==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20130820;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=FKGPYp8SXjVj+CGTDpbmFzxg7KTW74xVFQVMK9QGSDg=;\n\tb=dY7ExJBjAF7ZQjLhIhrx19hdl61LGCqz37/4tGwfflSQ3jsqpn0sPMxKPNRHFwVoxa\n\t2ZzGUgV9xghGlqzUUIrmCxSxHvkEMU0QH/DwHkLTFIPh6kio5BPU0yT7JyBuTk8phlQl\n\tXq/xIZA6kVheBt3+1BuhXtFmZ7/vmfCzKu7stOP9xKMSsfnUDltw1gd7O9Rbkbx7hR0I\n\t+Dd3kLAtgtJiYhb3tINtEBL+3QtaceKsIRGWZbbifKNLP0ENV8CPE4ynDQoOUnWAKAPe\n\tFw1/NuCuj/E6iH2CJQvHafesZXJkNnpkFZh5rq5abGG7X65I9q9VaYXvUKc9Y87G61tl\n\tgHTA==",
        "X-Gm-Message-State": "AG10YOQO2xItwVuu5pTMk8+AhM+zCOzJh8OWYF33hY5EQnu2mThmiYAJTWGLj5mceGG3wBY/",
        "X-Received": "by 10.28.179.84 with SMTP id c81mr9526756wmf.30.1454078967334;\n\tFri, 29 Jan 2016 06:49:27 -0800 (PST)",
        "From": "David Marchand <david.marchand@6wind.com>",
        "To": "dev@dpdk.org",
        "Date": "Fri, 29 Jan 2016 15:49:12 +0100",
        "Message-Id": "<1454078953-23744-9-git-send-email-david.marchand@6wind.com>",
        "X-Mailer": "git-send-email 1.9.1",
        "In-Reply-To": "<1454078953-23744-1-git-send-email-david.marchand@6wind.com>",
        "References": "<1453476464-31767-1-git-send-email-david.marchand@6wind.com>\n\t<1454078953-23744-1-git-send-email-david.marchand@6wind.com>",
        "Cc": "viktorin@rehivetech.com",
        "Subject": "[dpdk-dev] [PATCH v2 8/9] pci: implement blacklist using a hook",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <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": "The idea is to prepare a generic hook system for all bus, but I am still\nunsure if this approach will be the right one, hence, keeping this as\nprivate for now.\n\nHere, blacklisting policy is removed from pci scan code, making it possible\nto override it later by the application (once the api is judged generic and\ngood enough).\n\nWith this, blacklist evaluation moves to rte_eal_pci_probe() only.\nThis way, rte_eal_pci_probe_one() (used by hotplug when attaching) now\naccepts to probe devices that were blacklisted initially.\n\nA new debug trace is added when skipping a device not part of a given\nwhitelist.\n\nSigned-off-by: David Marchand <david.marchand@6wind.com>\n---\n lib/librte_eal/common/eal_common_pci.c | 101 +++++++++++++++++++++++++--------\n 1 file changed, 77 insertions(+), 24 deletions(-)",
    "diff": "diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c\nindex 082eab8..4a0ec73 100644\n--- a/lib/librte_eal/common/eal_common_pci.c\n+++ b/lib/librte_eal/common/eal_common_pci.c\n@@ -87,6 +87,62 @@ struct pci_driver_list pci_driver_list =\n struct pci_device_list pci_device_list =\n \tTAILQ_HEAD_INITIALIZER(pci_device_list);\n \n+enum rte_eal_pci_hook {\n+\tRTE_EAL_PCI_SCAN,\n+};\n+\n+enum rte_eal_pci_hook_return {\n+\tRTE_EAL_PCI_HOOK_OK,\n+\tRTE_EAL_PCI_HOOK_ERROR,\n+\tRTE_EAL_PCI_HOOK_SKIP,\n+};\n+\n+typedef int (rte_eal_pci_hook_t)(enum rte_eal_pci_hook,\n+\t\t\t\t struct rte_pci_driver *,\n+\t\t\t\t struct rte_pci_device *);\n+\n+static int\n+blacklist_pci_hook(enum rte_eal_pci_hook h,\n+\t\t   struct rte_pci_driver *dr __rte_unused,\n+\t\t   struct rte_pci_device *dev)\n+{\n+\tint ret;\n+\n+\tswitch (h) {\n+\tcase RTE_EAL_PCI_SCAN:\n+\t{\n+\t\tint whitelist =\n+\t\t\trte_eal_devargs_type_count(RTE_DEVTYPE_WHITELISTED_PCI);\n+\t\tint blacklist =\n+\t\t\trte_eal_devargs_type_count(RTE_DEVTYPE_BLACKLISTED_PCI);\n+\n+\t\t/*\n+\t\t * We want to probe this device when:\n+\t\t * - there is no whitelist/blacklist,\n+\t\t * - there is a whitelist, and device is part of it,\n+\t\t * - there is a blacklist, and device is not part of it.\n+\t\t */\n+\t\tif (whitelist && !dev->devargs) {\n+\t\t\tRTE_LOG(DEBUG, EAL, \"  Device is not whitelisted, not initializing\\n\");\n+\t\t\tret = RTE_EAL_PCI_HOOK_SKIP;\n+\t\t} else if (blacklist && dev->devargs) {\n+\t\t\tRTE_LOG(DEBUG, EAL, \"  Device is blacklisted, not initializing\\n\");\n+\t\t\tret = RTE_EAL_PCI_HOOK_SKIP;\n+\t\t} else\n+\t\t\tret = RTE_EAL_PCI_HOOK_OK;\n+\t\tbreak;\n+\t}\n+\tdefault:\n+\t\t/* nothing to do here, just say ok */\n+\t\tret = RTE_EAL_PCI_HOOK_OK;\n+\t\tbreak;\n+\t}\n+\n+\treturn ret;\n+}\n+\n+static rte_eal_pci_hook_t *pci_hook = &blacklist_pci_hook;\n+\n static struct rte_devargs *pci_devargs_lookup(struct rte_pci_device *dev)\n {\n \tstruct rte_devargs *devargs;\n@@ -209,22 +265,10 @@ static int\n pci_probe_device(struct rte_pci_driver *dr, struct rte_pci_device *dev)\n {\n \tint ret;\n-\tstruct rte_pci_addr *loc = &dev->addr;\n-\n-\tRTE_LOG(DEBUG, EAL, \"PCI device \"PCI_PRI_FMT\" on NUMA socket %i\\n\",\n-\t\tloc->domain, loc->bus, loc->devid, loc->function,\n-\t\tdev->numa_node);\n \n \tRTE_LOG(DEBUG, EAL, \"  probe driver: %x:%x %s\\n\", dev->id.vendor_id,\n \t\tdev->id.device_id, dr->name);\n \n-\t/* no initialization when blacklisted, return without error */\n-\tif (dev->devargs != NULL &&\n-\t\tdev->devargs->type == RTE_DEVTYPE_BLACKLISTED_PCI) {\n-\t\tRTE_LOG(DEBUG, EAL, \"  Device is blacklisted, not initializing\\n\");\n-\t\treturn 1;\n-\t}\n-\n \tif (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING) {\n #ifdef RTE_PCI_CONFIG\n \t\t/*\n@@ -310,6 +354,11 @@ rte_eal_pci_probe_one(const struct rte_pci_addr *addr)\n \tif (!dev)\n \t\tgoto err_return;\n \n+\tRTE_LOG(DEBUG, EAL, \"PCI device \"PCI_PRI_FMT\" on NUMA socket %i\\n\",\n+\t\tdev->addr.domain, dev->addr.bus,\n+\t\tdev->addr.devid, dev->addr.function,\n+\t\tdev->numa_node);\n+\n \tdr = pci_find_driver(dev);\n \tif (!dr)\n \t\tgoto err_return;\n@@ -369,27 +418,31 @@ rte_eal_pci_probe(void)\n \tstruct rte_pci_device *dev;\n \tstruct rte_pci_driver *dr;\n \tstruct rte_devargs *devargs;\n-\tint probe_all = 0;\n-\n-\tif (rte_eal_devargs_type_count(RTE_DEVTYPE_WHITELISTED_PCI) == 0)\n-\t\tprobe_all = 1;\n+\tint ret;\n \n \tTAILQ_FOREACH(dev, &pci_device_list, next) {\n \n-\t\t/* no driver available */\n-\t\tdr = pci_find_driver(dev);\n-\t\tif (!dr)\n-\t\t\tcontinue;\n+\t\tRTE_LOG(DEBUG, EAL,\n+\t\t\t\"PCI device \"PCI_PRI_FMT\" on NUMA socket %i\\n\",\n+\t\t\tdev->addr.domain, dev->addr.bus,\n+\t\t\tdev->addr.devid, dev->addr.function,\n+\t\t\tdev->numa_node);\n \n \t\t/* set devargs in PCI structure */\n \t\tdevargs = pci_devargs_lookup(dev);\n \t\tif (devargs != NULL)\n \t\t\tdev->devargs = devargs;\n \n-\t\t/* skip if not probing all and device is not whitelisted */\n-\t\tif (!probe_all &&\n-\t\t    (devargs == NULL ||\n-\t\t     devargs->type != RTE_DEVTYPE_WHITELISTED_PCI))\n+\t\tret = pci_hook(RTE_EAL_PCI_SCAN, NULL, dev);\n+\t\tif (ret != RTE_EAL_PCI_HOOK_OK) {\n+\t\t\tRTE_LOG(DEBUG, EAL, \"  scan hook refused dev, err=%d\\n\",\n+\t\t\t\tret);\n+\t\t\tcontinue;\n+\t\t}\n+\n+\t\t/* no driver available */\n+\t\tdr = pci_find_driver(dev);\n+\t\tif (!dr)\n \t\t\tcontinue;\n \n \t\tif (pci_probe_device(dr, dev) < 0)\n",
    "prefixes": [
        "dpdk-dev",
        "v2",
        "8/9"
    ]
}