get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 16947,
    "url": "https://patches.dpdk.org/api/patches/16947/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1478338865-26126-6-git-send-email-yuanhan.liu@linux.intel.com/",
    "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": "<1478338865-26126-6-git-send-email-yuanhan.liu@linux.intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1478338865-26126-6-git-send-email-yuanhan.liu@linux.intel.com",
    "date": "2016-11-05T09:41:00",
    "name": "[dpdk-dev,v2,05/10] net/virtio: initiate vring at init stage",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "ab1cb346c92b480cafbb7d89c8792daf99170e66",
    "submitter": {
        "id": 307,
        "url": "https://patches.dpdk.org/api/people/307/?format=api",
        "name": "Yuanhan Liu",
        "email": "yuanhan.liu@linux.intel.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1478338865-26126-6-git-send-email-yuanhan.liu@linux.intel.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/16947/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/16947/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 B312737B8;\n\tSat,  5 Nov 2016 10:41:18 +0100 (CET)",
            "from mga09.intel.com (mga09.intel.com [134.134.136.24])\n\tby dpdk.org (Postfix) with ESMTP id 6C529137C\n\tfor <dev@dpdk.org>; Sat,  5 Nov 2016 10:40:24 +0100 (CET)",
            "from fmsmga004.fm.intel.com ([10.253.24.48])\n\tby orsmga102.jf.intel.com with ESMTP; 05 Nov 2016 02:40:24 -0700",
            "from yliu-dev.sh.intel.com ([10.239.67.162])\n\tby fmsmga004.fm.intel.com with ESMTP; 05 Nov 2016 02:40:22 -0700"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.31,448,1473145200\"; d=\"scan'208\";a=\"187945123\"",
        "From": "Yuanhan Liu <yuanhan.liu@linux.intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "Thomas Monjalon <thomas.monjalon@6wind.com>,\n\tTan Jianfeng <jianfeng.tan@intel.com>,\n\tKevin Traynor <ktraynor@redhat.com>, \n\tIlya Maximets <i.maximets@samsung.com>,\n\tKyle Larose <klarose@sandvine.com>, \n\tMaxime Coquelin <maxime.coquelin@redhat.com>,\n\tYuanhan Liu <yuanhan.liu@linux.intel.com>",
        "Date": "Sat,  5 Nov 2016 17:41:00 +0800",
        "Message-Id": "<1478338865-26126-6-git-send-email-yuanhan.liu@linux.intel.com>",
        "X-Mailer": "git-send-email 1.9.0",
        "In-Reply-To": "<1478338865-26126-1-git-send-email-yuanhan.liu@linux.intel.com>",
        "References": "<1478189400-14606-1-git-send-email-yuanhan.liu@linux.intel.com>\n\t<1478338865-26126-1-git-send-email-yuanhan.liu@linux.intel.com>",
        "Subject": "[dpdk-dev] [PATCH v2 05/10] net/virtio: initiate vring at init stage",
        "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": "virtio_dev_vring_start() is actually doing the vring initiation job.\nAnd the vring initiation job should be done at the dev init stage, as\nstated with great details in former commit.\n\nSo move it there, and rename it to virtio_init_vring().\n\nSigned-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>\nReviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>\n---\n drivers/net/virtio/virtio_ethdev.c | 32 +++++++++++++++++++++++++++++++-\n drivers/net/virtio/virtio_rxtx.c   | 32 --------------------------------\n 2 files changed, 31 insertions(+), 33 deletions(-)",
    "diff": "diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c\nindex 67a175d..82dcc97 100644\n--- a/drivers/net/virtio/virtio_ethdev.c\n+++ b/drivers/net/virtio/virtio_ethdev.c\n@@ -308,6 +308,35 @@ virtio_get_nr_vq(struct virtio_hw *hw)\n \treturn nr_vq;\n }\n \n+static void\n+virtio_init_vring(struct virtqueue *vq)\n+{\n+\tint size = vq->vq_nentries;\n+\tstruct vring *vr = &vq->vq_ring;\n+\tuint8_t *ring_mem = vq->vq_ring_virt_mem;\n+\n+\tPMD_INIT_FUNC_TRACE();\n+\n+\t/*\n+\t * Reinitialise since virtio port might have been stopped and restarted\n+\t */\n+\tmemset(ring_mem, 0, vq->vq_ring_size);\n+\tvring_init(vr, size, ring_mem, VIRTIO_PCI_VRING_ALIGN);\n+\tvq->vq_used_cons_idx = 0;\n+\tvq->vq_desc_head_idx = 0;\n+\tvq->vq_avail_idx = 0;\n+\tvq->vq_desc_tail_idx = (uint16_t)(vq->vq_nentries - 1);\n+\tvq->vq_free_cnt = vq->vq_nentries;\n+\tmemset(vq->vq_descx, 0, sizeof(struct vq_desc_extra) * vq->vq_nentries);\n+\n+\tvring_desc_init(vr->desc, size);\n+\n+\t/*\n+\t * Disable device(host) interrupting guest\n+\t */\n+\tvirtqueue_disable_intr(vq);\n+}\n+\n static int\n virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)\n {\n@@ -371,7 +400,6 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)\n \tvq->hw = hw;\n \tvq->vq_queue_index = vtpci_queue_idx;\n \tvq->vq_nentries = vq_size;\n-\tvq->vq_free_cnt = vq_size;\n \n \t/*\n \t * Reserve a memzone for vring elements\n@@ -402,6 +430,8 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)\n \tPMD_INIT_LOG(DEBUG, \"vq->vq_ring_virt_mem: 0x%\" PRIx64,\n \t\t     (uint64_t)(uintptr_t)mz->addr);\n \n+\tvirtio_init_vring(vq);\n+\n \tif (sz_hdr_mz) {\n \t\tsnprintf(vq_hdr_name, sizeof(vq_hdr_name), \"port%d_vq%d_hdr\",\n \t\t\t dev->data->port_id, vtpci_queue_idx);\ndiff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c\nindex 6e7ff27..24129d6 100644\n--- a/drivers/net/virtio/virtio_rxtx.c\n+++ b/drivers/net/virtio/virtio_rxtx.c\n@@ -378,42 +378,12 @@ virtqueue_enqueue_xmit(struct virtnet_tx *txvq, struct rte_mbuf *cookie,\n \tvq_update_avail_ring(vq, head_idx);\n }\n \n-static void\n-virtio_dev_vring_start(struct virtqueue *vq)\n-{\n-\tint size = vq->vq_nentries;\n-\tstruct vring *vr = &vq->vq_ring;\n-\tuint8_t *ring_mem = vq->vq_ring_virt_mem;\n-\n-\tPMD_INIT_FUNC_TRACE();\n-\n-\t/*\n-\t * Reinitialise since virtio port might have been stopped and restarted\n-\t */\n-\tmemset(vq->vq_ring_virt_mem, 0, vq->vq_ring_size);\n-\tvring_init(vr, size, ring_mem, VIRTIO_PCI_VRING_ALIGN);\n-\tvq->vq_used_cons_idx = 0;\n-\tvq->vq_desc_head_idx = 0;\n-\tvq->vq_avail_idx = 0;\n-\tvq->vq_desc_tail_idx = (uint16_t)(vq->vq_nentries - 1);\n-\tvq->vq_free_cnt = vq->vq_nentries;\n-\tmemset(vq->vq_descx, 0, sizeof(struct vq_desc_extra) * vq->vq_nentries);\n-\n-\tvring_desc_init(vr->desc, size);\n-\n-\t/*\n-\t * Disable device(host) interrupting guest\n-\t */\n-\tvirtqueue_disable_intr(vq);\n-}\n-\n void\n virtio_dev_cq_start(struct rte_eth_dev *dev)\n {\n \tstruct virtio_hw *hw = dev->data->dev_private;\n \n \tif (hw->cvq && hw->cvq->vq) {\n-\t\tvirtio_dev_vring_start(hw->cvq->vq);\n \t\tVIRTQUEUE_DUMP((struct virtqueue *)hw->cvq->vq);\n \t}\n }\n@@ -441,7 +411,6 @@ virtio_dev_rxtx_start(struct rte_eth_dev *dev)\n \t\tint error, nbufs;\n \t\tstruct rte_mbuf *m;\n \n-\t\tvirtio_dev_vring_start(vq);\n \t\tif (rxvq->mpool == NULL) {\n \t\t\trte_exit(EXIT_FAILURE,\n \t\t\t\t\"Cannot allocate mbufs for rx virtqueue\");\n@@ -499,7 +468,6 @@ virtio_dev_rxtx_start(struct rte_eth_dev *dev)\n \t\tstruct virtnet_tx *txvq = dev->data->tx_queues[i];\n \t\tstruct virtqueue *vq = txvq->vq;\n \n-\t\tvirtio_dev_vring_start(vq);\n \t\tif (hw->use_simple_rxtx) {\n \t\t\tuint16_t mid_idx  = vq->vq_nentries >> 1;\n \n",
    "prefixes": [
        "dpdk-dev",
        "v2",
        "05/10"
    ]
}