get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2367,
    "url": "https://patches.dpdk.org/api/patches/2367/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1421664027-17971-3-git-send-email-mukawa@igel.co.jp/",
    "project": {
        "id": 1,
        "url": "https://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": "<1421664027-17971-3-git-send-email-mukawa@igel.co.jp>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1421664027-17971-3-git-send-email-mukawa@igel.co.jp",
    "date": "2015-01-19T10:40:18",
    "name": "[dpdk-dev,v4,02/11] eal/pci: Consolidate pci address comparison APIs",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "a020c89b4b45eca87f61e81858b882888f0fda8e",
    "submitter": {
        "id": 64,
        "url": "https://patches.dpdk.org/api/people/64/?format=api",
        "name": "Tetsuya Mukawa",
        "email": "mukawa@igel.co.jp"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1421664027-17971-3-git-send-email-mukawa@igel.co.jp/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/2367/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/2367/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 1756A5AAF;\n\tMon, 19 Jan 2015 11:41:21 +0100 (CET)",
            "from mail-pa0-f45.google.com (mail-pa0-f45.google.com\n\t[209.85.220.45]) by dpdk.org (Postfix) with ESMTP id 567FF5A9B\n\tfor <dev@dpdk.org>; Mon, 19 Jan 2015 11:41:12 +0100 (CET)",
            "by mail-pa0-f45.google.com with SMTP id lf10so38146727pab.4\n\tfor <dev@dpdk.org>; Mon, 19 Jan 2015 02:41:11 -0800 (PST)",
            "from localhost.localdomain (napt.igel.co.jp. [219.106.231.132])\n\tby mx.google.com with ESMTPSA id\n\ta13sm11337588pdm.44.2015.01.19.02.41.10\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tMon, 19 Jan 2015 02:41:11 -0800 (PST)"
        ],
        "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=qLvIe6utVplUXgxCAC70C29KY1iDXCpSsk/jqJ7fydY=;\n\tb=MVDXEZsc8bXrE6sMnAN6/BLZJAWlSqI2WnsmX2Zp6MUwCoDn3EcBeBwb+ZhDSkB1bp\n\tu4wFf1oOCoQ9/wiGglU6C4C7hIag8LpitXvM5aOTp6u1/2oXbkN2S45KaWgobtDCdY7k\n\t4xVRocjQbyumfBdotvEI6T+GcP/GoNhx5yVoMm+a4KecJSmw8fDVlD7Xy8bzmvAQmfEe\n\tCX2OwdZnCjD+Ke3ogUFghOrFRRW2zm8c2FB6A36ZHtw/Ix4vk+wjCWm64pcYmygXEg5t\n\tN99KfYHk31buV+DWJmn0yTcr+D3U48yIcWu8w/9vsGEnlHLVqQoIf3COmhaizSDz8iQQ\n\t9Dlg==",
        "X-Gm-Message-State": "ALoCoQl0TO0oWVdz83vKTdOTxcf5Spi6/Q13qToQyFD2u4wklFpbGVxzTJWJb680ovKlknHFjAse",
        "X-Received": "by 10.66.156.38 with SMTP id wb6mr18250792pab.139.1421664071706; \n\tMon, 19 Jan 2015 02:41:11 -0800 (PST)",
        "From": "Tetsuya Mukawa <mukawa@igel.co.jp>",
        "To": "dev@dpdk.org",
        "Date": "Mon, 19 Jan 2015 19:40:18 +0900",
        "Message-Id": "<1421664027-17971-3-git-send-email-mukawa@igel.co.jp>",
        "X-Mailer": "git-send-email 1.9.1",
        "In-Reply-To": "<1421664027-17971-1-git-send-email-mukawa@igel.co.jp>",
        "References": "<1418106629-22227-2-git-send-email-mukawa@igel.co.j>\n\t<1421664027-17971-1-git-send-email-mukawa@igel.co.jp>",
        "Subject": "[dpdk-dev] [PATCH v4 02/11] eal/pci: Consolidate pci address\n\tcomparison APIs",
        "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": "This patch replaces pci_addr_comparison() and memcmp() of pci addresses by\neal_compare_pci_addr().\n\nv4:\n- Fix calculation method of eal_compare_pci_addr().\n- Add parameter checking.\n\nSigned-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>\n---\n lib/librte_eal/bsdapp/eal/eal_pci.c       | 16 +--------------\n lib/librte_eal/common/eal_common_pci.c    |  2 +-\n lib/librte_eal/common/include/rte_pci.h   | 34 +++++++++++++++++++++++++++++++\n lib/librte_eal/linuxapp/eal/eal_pci.c     | 23 ++++++---------------\n lib/librte_eal/linuxapp/eal/eal_pci_uio.c |  2 +-\n 5 files changed, 43 insertions(+), 34 deletions(-)",
    "diff": "diff --git a/lib/librte_eal/bsdapp/eal/eal_pci.c b/lib/librte_eal/bsdapp/eal/eal_pci.c\nindex 74ecce7..7eda513 100644\n--- a/lib/librte_eal/bsdapp/eal/eal_pci.c\n+++ b/lib/librte_eal/bsdapp/eal/eal_pci.c\n@@ -270,20 +270,6 @@ pci_uio_map_resource(struct rte_pci_device *dev)\n \treturn (0);\n }\n \n-/* Compare two PCI device addresses. */\n-static int\n-pci_addr_comparison(struct rte_pci_addr *addr, struct rte_pci_addr *addr2)\n-{\n-\tuint64_t dev_addr = (addr->domain << 24) + (addr->bus << 16) + (addr->devid << 8) + addr->function;\n-\tuint64_t dev_addr2 = (addr2->domain << 24) + (addr2->bus << 16) + (addr2->devid << 8) + addr2->function;\n-\n-\tif (dev_addr > dev_addr2)\n-\t\treturn 1;\n-\telse\n-\t\treturn 0;\n-}\n-\n-\n /* Scan one pci sysfs entry, and fill the devices list from it. */\n static int\n pci_scan_one(int dev_pci_fd, struct pci_conf *conf)\n@@ -358,7 +344,7 @@ pci_scan_one(int dev_pci_fd, struct pci_conf *conf)\n \t\tstruct rte_pci_device *dev2 = NULL;\n \n \t\tTAILQ_FOREACH(dev2, &pci_device_list, next) {\n-\t\t\tif (pci_addr_comparison(&dev->addr, &dev2->addr))\n+\t\t\tif (eal_compare_pci_addr(&dev->addr, &dev2->addr))\n \t\t\t\tcontinue;\n \t\t\telse {\n \t\t\t\tTAILQ_INSERT_BEFORE(dev2, dev, next);\ndiff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c\nindex f3c7f71..a89f5c3 100644\n--- a/lib/librte_eal/common/eal_common_pci.c\n+++ b/lib/librte_eal/common/eal_common_pci.c\n@@ -93,7 +93,7 @@ static struct rte_devargs *pci_devargs_lookup(struct rte_pci_device *dev)\n \t\tif (devargs->type != RTE_DEVTYPE_BLACKLISTED_PCI &&\n \t\t\tdevargs->type != RTE_DEVTYPE_WHITELISTED_PCI)\n \t\t\tcontinue;\n-\t\tif (!memcmp(&dev->addr, &devargs->pci.addr, sizeof(dev->addr)))\n+\t\tif (!eal_compare_pci_addr(&dev->addr, &devargs->pci.addr))\n \t\t\treturn devargs;\n \t}\n \treturn NULL;\ndiff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h\nindex dd1da28..128b2ce 100644\n--- a/lib/librte_eal/common/include/rte_pci.h\n+++ b/lib/librte_eal/common/include/rte_pci.h\n@@ -261,6 +261,40 @@ eal_parse_pci_DomBDF(const char *input, struct rte_pci_addr *dev_addr)\n }\n #undef GET_PCIADDR_FIELD\n \n+/* Compare two PCI device addresses. */\n+/**\n+ * Utility function to compare two PCI device addresses.\n+ *\n+ * @param addr\n+ *\tThe PCI Bus-Device-Function address to compare\n+ * @param addr2\n+ *\tThe PCI Bus-Device-Function address to compare\n+ * @return\n+ *\t0 on equal PCI address.\n+ *\tPositive on addr is greater than addr2.\n+ *\tNegative on addr is less than addr2, or error.\n+ */\n+static inline int\n+eal_compare_pci_addr(struct rte_pci_addr *addr, struct rte_pci_addr *addr2)\n+{\n+\tuint64_t dev_addr, dev_addr2;\n+\n+\tif ((addr == NULL) || (addr2 == NULL))\n+\t\treturn -1;\n+\n+\tdev_addr = (addr->domain << 24) | (addr->bus << 16) |\n+\t\t\t\t(addr->devid << 8) | addr->function;\n+\tdev_addr2 = (addr2->domain << 24) | (addr2->bus << 16) |\n+\t\t\t\t(addr2->devid << 8) | addr2->function;\n+\n+\tif (dev_addr > dev_addr2)\n+\t\treturn 1;\n+\telse if (dev_addr < dev_addr2)\n+\t\treturn -1;\n+\telse\n+\t\treturn 0;\n+}\n+\n /**\n  * Probe the PCI bus for registered drivers.\n  *\ndiff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c\nindex b5f5410..3d2d93c 100644\n--- a/lib/librte_eal/linuxapp/eal/eal_pci.c\n+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c\n@@ -200,20 +200,6 @@ error:\n \treturn -1;\n }\n \n-/* Compare two PCI device addresses. */\n-static int\n-pci_addr_comparison(struct rte_pci_addr *addr, struct rte_pci_addr *addr2)\n-{\n-\tuint64_t dev_addr = (addr->domain << 24) + (addr->bus << 16) + (addr->devid << 8) + addr->function;\n-\tuint64_t dev_addr2 = (addr2->domain << 24) + (addr2->bus << 16) + (addr2->devid << 8) + addr2->function;\n-\n-\tif (dev_addr > dev_addr2)\n-\t\treturn 1;\n-\telse\n-\t\treturn 0;\n-}\n-\n-\n /* Scan one pci sysfs entry, and fill the devices list from it. */\n static int\n pci_scan_one(const char *dirname, uint16_t domain, uint8_t bus,\n@@ -304,14 +290,17 @@ pci_scan_one(const char *dirname, uint16_t domain, uint8_t bus,\n \t}\n \telse {\n \t\tstruct rte_pci_device *dev2 = NULL;\n+\t\tint ret;\n \n \t\tTAILQ_FOREACH(dev2, &pci_device_list, next) {\n-\t\t\tif (pci_addr_comparison(&dev->addr, &dev2->addr))\n+\t\t\tret = eal_compare_pci_addr(&dev->addr, &dev2->addr);\n+\t\t\tif (ret > 0)\n \t\t\t\tcontinue;\n-\t\t\telse {\n+\t\t\telse if (ret < 0) {\n \t\t\t\tTAILQ_INSERT_BEFORE(dev2, dev, next);\n \t\t\t\treturn 0;\n-\t\t\t}\n+\t\t\t} else\t/* already registered */\n+\t\t\t\treturn 0;\n \t\t}\n \t\tTAILQ_INSERT_TAIL(&pci_device_list, dev, next);\n \t}\ndiff --git a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c\nindex e53f06b..1da3507 100644\n--- a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c\n+++ b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c\n@@ -123,7 +123,7 @@ pci_uio_map_secondary(struct rte_pci_device *dev)\n \tTAILQ_FOREACH(uio_res, pci_res_list, next) {\n \n \t\t/* skip this element if it doesn't match our PCI address */\n-\t\tif (memcmp(&uio_res->pci_addr, &dev->addr, sizeof(dev->addr)))\n+\t\tif (eal_compare_pci_addr(&uio_res->pci_addr, &dev->addr))\n \t\t\tcontinue;\n \n \t\tfor (i = 0; i != uio_res->nb_maps; i++) {\n",
    "prefixes": [
        "dpdk-dev",
        "v4",
        "02/11"
    ]
}