get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 9596,
    "url": "http://patches.dpdk.org/api/patches/9596/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1450422247-6814-2-git-send-email-yuanhan.liu@linux.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": "<1450422247-6814-2-git-send-email-yuanhan.liu@linux.intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1450422247-6814-2-git-send-email-yuanhan.liu@linux.intel.com",
    "date": "2015-12-18T07:04:06",
    "name": "[dpdk-dev,2/3] vhost: simplify numa_realloc",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "6f095b8c7b52df9e32b32026bdee8fb4bbe54b18",
    "submitter": {
        "id": 307,
        "url": "http://patches.dpdk.org/api/people/307/?format=api",
        "name": "Yuanhan Liu",
        "email": "yuanhan.liu@linux.intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1450422247-6814-2-git-send-email-yuanhan.liu@linux.intel.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/9596/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/9596/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 290FC8E58;\n\tFri, 18 Dec 2015 08:03:42 +0100 (CET)",
            "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n\tby dpdk.org (Postfix) with ESMTP id 3EA2E2EDA\n\tfor <dev@dpdk.org>; Fri, 18 Dec 2015 08:03:38 +0100 (CET)",
            "from orsmga003.jf.intel.com ([10.7.209.27])\n\tby fmsmga102.fm.intel.com with ESMTP; 17 Dec 2015 23:03:37 -0800",
            "from yliu-dev.sh.intel.com ([10.239.66.49])\n\tby orsmga003.jf.intel.com with ESMTP; 17 Dec 2015 23:03:36 -0800"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.20,445,1444719600\"; d=\"scan'208\";a=\"710218469\"",
        "From": "Yuanhan Liu <yuanhan.liu@linux.intel.com>",
        "To": "dev@dpdk.org",
        "Date": "Fri, 18 Dec 2015 15:04:06 +0800",
        "Message-Id": "<1450422247-6814-2-git-send-email-yuanhan.liu@linux.intel.com>",
        "X-Mailer": "git-send-email 1.9.0",
        "In-Reply-To": "<1450422247-6814-1-git-send-email-yuanhan.liu@linux.intel.com>",
        "References": "<1450422247-6814-1-git-send-email-yuanhan.liu@linux.intel.com>",
        "Subject": "[dpdk-dev] [PATCH 2/3] vhost: simplify numa_realloc",
        "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": "We could first check if we need realloc vq or not, if so,\nreallocate it. We then do similar to vhost dev realloc.\n\nThis could get rid of the tons of repeated \"if (realloc_dev)\"\nand \"if (realloc_vq)\" statements, therefore, makes code\na bit more readable.\n\nSigned-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>\n---\n lib/librte_vhost/virtio-net.c | 77 ++++++++++++++++++++-----------------------\n 1 file changed, 36 insertions(+), 41 deletions(-)",
    "diff": "diff --git a/lib/librte_vhost/virtio-net.c b/lib/librte_vhost/virtio-net.c\nindex 2f83438..31ca4f7 100644\n--- a/lib/librte_vhost/virtio-net.c\n+++ b/lib/librte_vhost/virtio-net.c\n@@ -441,64 +441,59 @@ static struct virtio_net*\n numa_realloc(struct virtio_net *dev, int index)\n {\n \tint oldnode, newnode;\n-\tstruct virtio_net *old_dev, *new_dev = NULL;\n-\tstruct vhost_virtqueue *old_vq, *new_vq = NULL;\n+\tstruct virtio_net *old_dev;\n+\tstruct vhost_virtqueue *old_vq, *vq;\n \tint ret;\n-\tint realloc_dev = 0, realloc_vq = 0;\n \n \told_dev = dev;\n-\told_vq  = dev->virtqueue[index];\n+\tvq = old_vq = dev->virtqueue[index];\n \n-\tret  = get_mempolicy(&newnode, NULL, 0, old_vq->desc,\n-\t\t\tMPOL_F_NODE | MPOL_F_ADDR);\n-\tret = ret | get_mempolicy(&oldnode, NULL, 0, old_dev,\n+\tret = get_mempolicy(&newnode, NULL, 0, old_vq->desc,\n \t\t\tMPOL_F_NODE | MPOL_F_ADDR);\n+\n+\t/* check if we need to reallocate vq */\n+\tret = get_mempolicy(&oldnode, NULL, 0, old_vq, MPOL_F_NODE | MPOL_F_ADDR);\n \tif (ret) {\n \t\tRTE_LOG(ERR, VHOST_CONFIG,\n-\t\t\t\"Unable to get vring desc or dev numa information.\\n\");\n+\t\t\t\"Unable to get vq numa information.\\n\");\n \t\treturn dev;\n \t}\n-\tif (oldnode != newnode)\n-\t\trealloc_dev = 1;\n+\tif (oldnode != newnode) {\n+\t\tRTE_LOG(INFO, VHOST_CONFIG,\n+\t\t\t\"reallocate vq from %d to %d node\\n\", oldnode, newnode);\n+\t\tvq = rte_malloc_socket(NULL, sizeof(*vq), 0, newnode);\n+\t\tif (!vq)\n+\t\t\treturn dev;\n+\n+\t\tmemcpy(vq, old_vq, sizeof(*vq));\n+\t\trte_free(old_vq);\n+\t}\n \n-\tret = get_mempolicy(&oldnode, NULL, 0, old_vq,\n-\t\t\tMPOL_F_NODE | MPOL_F_ADDR);\n+\t/* check if we need to reallocate dev */\n+\tret = get_mempolicy(&oldnode, NULL, 0, old_dev, MPOL_F_NODE | MPOL_F_ADDR);\n \tif (ret) {\n \t\tRTE_LOG(ERR, VHOST_CONFIG,\n-\t\t\t\"Unable to get vq numa information.\\n\");\n-\t\treturn dev;\n+\t\t\t\"Unable to get vring desc or dev numa information.\\n\");\n+\t\tgoto out;\n \t}\n-\tif (oldnode != newnode)\n-\t\trealloc_vq = 1;\n-\n-\tif (realloc_dev == 0 && realloc_vq == 0)\n-\t\treturn dev;\n-\n-\tif (realloc_dev)\n-\t\tnew_dev = rte_malloc_socket(NULL,\n-\t\t\tsizeof(struct virtio_net), 0, newnode);\n-\tif (realloc_vq)\n-\t\tnew_vq = rte_malloc_socket(NULL,\n-\t\t\tsizeof(struct vhost_virtqueue), 0, newnode);\n-\tif (!new_dev && !new_vq)\n-\t\treturn dev;\n-\n-\tif (realloc_vq)\n-\t\tmemcpy(new_vq, old_vq, sizeof(*new_vq));\n-\tif (realloc_dev)\n-\t\tmemcpy(new_dev, old_dev, sizeof(*new_dev));\n+\tif (oldnode != newnode) {\n+\t\tRTE_LOG(INFO, VHOST_CONFIG,\n+\t\t\t\"reallocate dev from %d to %d node\\n\", oldnode, newnode);\n+\t\tdev = rte_malloc_socket(NULL, sizeof(*dev), 0, newnode);\n+\t\tif (!dev) {\n+\t\t\tdev = old_dev;\n+\t\t\tgoto out;\n+\t\t}\n \n-\t(new_dev ? new_dev : old_dev)->virtqueue[index] =\n-\t\tnew_vq ? new_vq : old_vq;\n-\tif (realloc_vq)\n-\t\trte_free(old_vq);\n-\tif (realloc_dev) {\n+\t\tmemcpy(dev, old_dev, sizeof(*dev));\n \t\trte_free(old_dev);\n-\n-\t\tvhost_devices[new_dev->device_fh] = new_dev;\n \t}\n \n-\treturn realloc_dev ? new_dev: dev;\n+out:\n+\tdev->virtqueue[index] = vq;\n+\tvhost_devices[dev->device_fh] = dev;\n+\n+\treturn dev;\n }\n #else\n static struct virtio_net*\n",
    "prefixes": [
        "dpdk-dev",
        "2/3"
    ]
}