get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 16948,
    "url": "https://patches.dpdk.org/api/patches/16948/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1478338865-26126-7-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-7-git-send-email-yuanhan.liu@linux.intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1478338865-26126-7-git-send-email-yuanhan.liu@linux.intel.com",
    "date": "2016-11-05T09:41:01",
    "name": "[dpdk-dev,v2,06/10] net/virtio: move queue configure code to proper place",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "7db80e021a3aa6d92084410ad55f6cfdffd47d5e",
    "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-7-git-send-email-yuanhan.liu@linux.intel.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/16948/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/16948/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 5A34D5583;\n\tSat,  5 Nov 2016 10:41:21 +0100 (CET)",
            "from mga09.intel.com (mga09.intel.com [134.134.136.24])\n\tby dpdk.org (Postfix) with ESMTP id 426DB137C\n\tfor <dev@dpdk.org>; Sat,  5 Nov 2016 10:40:26 +0100 (CET)",
            "from fmsmga004.fm.intel.com ([10.253.24.48])\n\tby orsmga102.jf.intel.com with ESMTP; 05 Nov 2016 02:40:25 -0700",
            "from yliu-dev.sh.intel.com ([10.239.67.162])\n\tby fmsmga004.fm.intel.com with ESMTP; 05 Nov 2016 02:40:24 -0700"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.31,448,1473145200\"; d=\"scan'208\";a=\"187945140\"",
        "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:01 +0800",
        "Message-Id": "<1478338865-26126-7-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 06/10] net/virtio: move queue configure code\n\tto proper place",
        "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 only piece of code of virtio_dev_rxtx_start() is actually doing\nqueue configure/setup work. So, move it to corresponding queue_setup\ncallback.\n\nOnce that is done, virtio_dev_rxtx_start() becomes an empty function,\nthus it's being removed.\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 |   2 -\n drivers/net/virtio/virtio_ethdev.h |   2 -\n drivers/net/virtio/virtio_rxtx.c   | 186 ++++++++++++++++---------------------\n 3 files changed, 78 insertions(+), 112 deletions(-)",
    "diff": "diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c\nindex 82dcc97..a3e2aa9 100644\n--- a/drivers/net/virtio/virtio_ethdev.c\n+++ b/drivers/net/virtio/virtio_ethdev.c\n@@ -1497,8 +1497,6 @@ virtio_dev_start(struct rte_eth_dev *dev)\n \tif (hw->started)\n \t\treturn 0;\n \n-\t/* Do final configuration before rx/tx engine starts */\n-\tvirtio_dev_rxtx_start(dev);\n \tvtpci_reinit_complete(hw);\n \n \thw->started = 1;\ndiff --git a/drivers/net/virtio/virtio_ethdev.h b/drivers/net/virtio/virtio_ethdev.h\nindex 8a3fa6d..27d9a19 100644\n--- a/drivers/net/virtio/virtio_ethdev.h\n+++ b/drivers/net/virtio/virtio_ethdev.h\n@@ -78,8 +78,6 @@ void virtio_dev_cq_start(struct rte_eth_dev *dev);\n /*\n  * RX/TX function prototypes\n  */\n-void virtio_dev_rxtx_start(struct rte_eth_dev *dev);\n-\n int  virtio_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id,\n \t\tuint16_t nb_rx_desc, unsigned int socket_id,\n \t\tconst struct rte_eth_rxconf *rx_conf,\ndiff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c\nindex 24129d6..22d97a4 100644\n--- a/drivers/net/virtio/virtio_rxtx.c\n+++ b/drivers/net/virtio/virtio_rxtx.c\n@@ -388,112 +388,6 @@ virtio_dev_cq_start(struct rte_eth_dev *dev)\n \t}\n }\n \n-void\n-virtio_dev_rxtx_start(struct rte_eth_dev *dev)\n-{\n-\t/*\n-\t * Start receive and transmit vrings\n-\t * -\tSetup vring structure for all queues\n-\t * -\tInitialize descriptor for the rx vring\n-\t * -\tAllocate blank mbufs for the each rx descriptor\n-\t *\n-\t */\n-\tuint16_t i;\n-\tuint16_t desc_idx;\n-\tstruct virtio_hw *hw = dev->data->dev_private;\n-\n-\tPMD_INIT_FUNC_TRACE();\n-\n-\t/* Start rx vring. */\n-\tfor (i = 0; i < dev->data->nb_rx_queues; i++) {\n-\t\tstruct virtnet_rx *rxvq = dev->data->rx_queues[i];\n-\t\tstruct virtqueue *vq = rxvq->vq;\n-\t\tint error, nbufs;\n-\t\tstruct rte_mbuf *m;\n-\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-\t\t}\n-\n-\t\t/* Allocate blank mbufs for the each rx descriptor */\n-\t\tnbufs = 0;\n-\t\terror = ENOSPC;\n-\n-\t\tif (hw->use_simple_rxtx) {\n-\t\t\tfor (desc_idx = 0; desc_idx < vq->vq_nentries;\n-\t\t\t     desc_idx++) {\n-\t\t\t\tvq->vq_ring.avail->ring[desc_idx] = desc_idx;\n-\t\t\t\tvq->vq_ring.desc[desc_idx].flags =\n-\t\t\t\t\tVRING_DESC_F_WRITE;\n-\t\t\t}\n-\t\t}\n-\n-\t\tmemset(&rxvq->fake_mbuf, 0, sizeof(rxvq->fake_mbuf));\n-\t\tfor (desc_idx = 0; desc_idx < RTE_PMD_VIRTIO_RX_MAX_BURST;\n-\t\t     desc_idx++) {\n-\t\t\tvq->sw_ring[vq->vq_nentries + desc_idx] =\n-\t\t\t\t&rxvq->fake_mbuf;\n-\t\t}\n-\n-\t\twhile (!virtqueue_full(vq)) {\n-\t\t\tm = rte_mbuf_raw_alloc(rxvq->mpool);\n-\t\t\tif (m == NULL)\n-\t\t\t\tbreak;\n-\n-\t\t\t/******************************************\n-\t\t\t*         Enqueue allocated buffers        *\n-\t\t\t*******************************************/\n-\t\t\tif (hw->use_simple_rxtx)\n-\t\t\t\terror = virtqueue_enqueue_recv_refill_simple(vq, m);\n-\t\t\telse\n-\t\t\t\terror = virtqueue_enqueue_recv_refill(vq, m);\n-\n-\t\t\tif (error) {\n-\t\t\t\trte_pktmbuf_free(m);\n-\t\t\t\tbreak;\n-\t\t\t}\n-\t\t\tnbufs++;\n-\t\t}\n-\n-\t\tvq_update_avail_idx(vq);\n-\n-\t\tPMD_INIT_LOG(DEBUG, \"Allocated %d bufs\", nbufs);\n-\n-\t\tVIRTQUEUE_DUMP(vq);\n-\t}\n-\n-\t/* Start tx vring. */\n-\tfor (i = 0; i < dev->data->nb_tx_queues; i++) {\n-\t\tstruct virtnet_tx *txvq = dev->data->tx_queues[i];\n-\t\tstruct virtqueue *vq = txvq->vq;\n-\n-\t\tif (hw->use_simple_rxtx) {\n-\t\t\tuint16_t mid_idx  = vq->vq_nentries >> 1;\n-\n-\t\t\tfor (desc_idx = 0; desc_idx < mid_idx; desc_idx++) {\n-\t\t\t\tvq->vq_ring.avail->ring[desc_idx] =\n-\t\t\t\t\tdesc_idx + mid_idx;\n-\t\t\t\tvq->vq_ring.desc[desc_idx + mid_idx].next =\n-\t\t\t\t\tdesc_idx;\n-\t\t\t\tvq->vq_ring.desc[desc_idx + mid_idx].addr =\n-\t\t\t\t\ttxvq->virtio_net_hdr_mem +\n-\t\t\t\t\toffsetof(struct virtio_tx_region, tx_hdr);\n-\t\t\t\tvq->vq_ring.desc[desc_idx + mid_idx].len =\n-\t\t\t\t\tvq->hw->vtnet_hdr_size;\n-\t\t\t\tvq->vq_ring.desc[desc_idx + mid_idx].flags =\n-\t\t\t\t\tVRING_DESC_F_NEXT;\n-\t\t\t\tvq->vq_ring.desc[desc_idx].flags = 0;\n-\t\t\t}\n-\t\t\tfor (desc_idx = mid_idx; desc_idx < vq->vq_nentries;\n-\t\t\t     desc_idx++)\n-\t\t\t\tvq->vq_ring.avail->ring[desc_idx] = desc_idx;\n-\t\t}\n-\n-\t\tVIRTQUEUE_DUMP(vq);\n-\t}\n-}\n-\n int\n virtio_dev_rx_queue_setup(struct rte_eth_dev *dev,\n \t\t\tuint16_t queue_idx,\n@@ -506,6 +400,9 @@ virtio_dev_rx_queue_setup(struct rte_eth_dev *dev,\n \tstruct virtio_hw *hw = dev->data->dev_private;\n \tstruct virtqueue *vq = hw->vqs[vtpci_queue_idx];\n \tstruct virtnet_rx *rxvq;\n+\tint error, nbufs;\n+\tstruct rte_mbuf *m;\n+\tuint16_t desc_idx;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -514,13 +411,61 @@ virtio_dev_rx_queue_setup(struct rte_eth_dev *dev,\n \tvq->vq_free_cnt = RTE_MIN(vq->vq_free_cnt, nb_desc);\n \n \trxvq = &vq->rxq;\n-\trxvq->mpool = mp;\n \trxvq->queue_id = queue_idx;\n-\n+\trxvq->mpool = mp;\n+\tif (rxvq->mpool == NULL) {\n+\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\"Cannot allocate mbufs for rx virtqueue\");\n+\t}\n \tdev->data->rx_queues[queue_idx] = rxvq;\n \n+\n+\t/* Allocate blank mbufs for the each rx descriptor */\n+\tnbufs = 0;\n+\terror = ENOSPC;\n+\n+\tif (hw->use_simple_rxtx) {\n+\t\tfor (desc_idx = 0; desc_idx < vq->vq_nentries;\n+\t\t     desc_idx++) {\n+\t\t\tvq->vq_ring.avail->ring[desc_idx] = desc_idx;\n+\t\t\tvq->vq_ring.desc[desc_idx].flags =\n+\t\t\t\tVRING_DESC_F_WRITE;\n+\t\t}\n+\t}\n+\n+\tmemset(&rxvq->fake_mbuf, 0, sizeof(rxvq->fake_mbuf));\n+\tfor (desc_idx = 0; desc_idx < RTE_PMD_VIRTIO_RX_MAX_BURST;\n+\t     desc_idx++) {\n+\t\tvq->sw_ring[vq->vq_nentries + desc_idx] =\n+\t\t\t&rxvq->fake_mbuf;\n+\t}\n+\n+\twhile (!virtqueue_full(vq)) {\n+\t\tm = rte_mbuf_raw_alloc(rxvq->mpool);\n+\t\tif (m == NULL)\n+\t\t\tbreak;\n+\n+\t\t/* Enqueue allocated buffers */\n+\t\tif (hw->use_simple_rxtx)\n+\t\t\terror = virtqueue_enqueue_recv_refill_simple(vq, m);\n+\t\telse\n+\t\t\terror = virtqueue_enqueue_recv_refill(vq, m);\n+\n+\t\tif (error) {\n+\t\t\trte_pktmbuf_free(m);\n+\t\t\tbreak;\n+\t\t}\n+\t\tnbufs++;\n+\t}\n+\n+\tvq_update_avail_idx(vq);\n+\n+\tPMD_INIT_LOG(DEBUG, \"Allocated %d bufs\", nbufs);\n+\n \tvirtio_rxq_vec_setup(rxvq);\n \n+\tVIRTQUEUE_DUMP(vq);\n+\n \treturn 0;\n }\n \n@@ -568,6 +513,7 @@ virtio_dev_tx_queue_setup(struct rte_eth_dev *dev,\n \tstruct virtqueue *vq = hw->vqs[vtpci_queue_idx];\n \tstruct virtnet_tx *txvq;\n \tuint16_t tx_free_thresh;\n+\tuint16_t desc_idx;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -596,6 +542,30 @@ virtio_dev_tx_queue_setup(struct rte_eth_dev *dev,\n \n \tvq->vq_free_thresh = tx_free_thresh;\n \n+\tif (hw->use_simple_rxtx) {\n+\t\tuint16_t mid_idx  = vq->vq_nentries >> 1;\n+\n+\t\tfor (desc_idx = 0; desc_idx < mid_idx; desc_idx++) {\n+\t\t\tvq->vq_ring.avail->ring[desc_idx] =\n+\t\t\t\tdesc_idx + mid_idx;\n+\t\t\tvq->vq_ring.desc[desc_idx + mid_idx].next =\n+\t\t\t\tdesc_idx;\n+\t\t\tvq->vq_ring.desc[desc_idx + mid_idx].addr =\n+\t\t\t\ttxvq->virtio_net_hdr_mem +\n+\t\t\t\toffsetof(struct virtio_tx_region, tx_hdr);\n+\t\t\tvq->vq_ring.desc[desc_idx + mid_idx].len =\n+\t\t\t\tvq->hw->vtnet_hdr_size;\n+\t\t\tvq->vq_ring.desc[desc_idx + mid_idx].flags =\n+\t\t\t\tVRING_DESC_F_NEXT;\n+\t\t\tvq->vq_ring.desc[desc_idx].flags = 0;\n+\t\t}\n+\t\tfor (desc_idx = mid_idx; desc_idx < vq->vq_nentries;\n+\t\t     desc_idx++)\n+\t\t\tvq->vq_ring.avail->ring[desc_idx] = desc_idx;\n+\t}\n+\n+\tVIRTQUEUE_DUMP(vq);\n+\n \tdev->data->tx_queues[queue_idx] = txvq;\n \treturn 0;\n }\n",
    "prefixes": [
        "dpdk-dev",
        "v2",
        "06/10"
    ]
}