Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1128/?format=api
https://patches.dpdk.org/api/patches/1128/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/1415152183-119796-4-git-send-email-yongwang@vmware.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": "<1415152183-119796-4-git-send-email-yongwang@vmware.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1415152183-119796-4-git-send-email-yongwang@vmware.com", "date": "2014-11-05T01:49:40", "name": "[dpdk-dev,v2,3/6] vmxnet3: Fix dev stop/restart bug", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "23003086b881409c9c7f60033f3e878a40cb0067", "submitter": { "id": 93, "url": "https://patches.dpdk.org/api/people/93/?format=api", "name": "Yong Wang", "email": "yongwang@vmware.com" }, "delegate": null, "mbox": "https://patches.dpdk.org/project/dpdk/patch/1415152183-119796-4-git-send-email-yongwang@vmware.com/mbox/", "series": [], "comments": "https://patches.dpdk.org/api/patches/1128/comments/", "check": "pending", "checks": "https://patches.dpdk.org/api/patches/1128/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 C8F8D7F2D;\n\tWed, 5 Nov 2014 02:40:33 +0100 (CET)", "from smtp-outbound-2.vmware.com (smtp-outbound-2.vmware.com\n\t[208.91.2.13]) by dpdk.org (Postfix) with ESMTP id D54795947\n\tfor <dev@dpdk.org>; Wed, 5 Nov 2014 02:40:30 +0100 (CET)", "from sc9-mailhost1.vmware.com (sc9-mailhost1.vmware.com\n\t[10.113.161.71])\n\tby smtp-outbound-2.vmware.com (Postfix) with ESMTP id BF45C289F4\n\tfor <dev@dpdk.org>; Tue, 4 Nov 2014 17:49:46 -0800 (PST)", "from sc9-mailhost2.vmware.com (unknown [10.32.43.10])\n\tby sc9-mailhost1.vmware.com (Postfix) with ESMTP id A1DC1191CE\n\tfor <dev@dpdk.org>; Tue, 4 Nov 2014 17:49:46 -0800 (PST)" ], "From": "Yong Wang <yongwang@vmware.com>", "To": "dev@dpdk.org", "Date": "Tue, 4 Nov 2014 17:49:40 -0800", "Message-Id": "<1415152183-119796-4-git-send-email-yongwang@vmware.com>", "X-Mailer": "git-send-email 1.9.1", "In-Reply-To": "<1415152183-119796-1-git-send-email-yongwang@vmware.com>", "References": "<1415152183-119796-1-git-send-email-yongwang@vmware.com>", "Subject": "[dpdk-dev] [PATCH v2 3/6] vmxnet3: Fix dev stop/restart bug", "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 change makes vmxnet3 consistent with other pmds in\nterms of dev_stop behavior: rather than releasing tx/rx\nrings, it only resets the ring structure and release the\npending mbufs.\n\nVerified with various tests (test-pmd and pktgen) over\nvmxnet3 that dev stop/restart works fine.\n\nSigned-off-by: Yong Wang <yongwang@vmware.com>\n---\n lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c | 78 ++++++++++++++++++++++++++++++++---\n 1 file changed, 73 insertions(+), 5 deletions(-)", "diff": "diff --git a/lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c b/lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c\nindex 0b6363f..2017d4b 100644\n--- a/lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c\n+++ b/lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c\n@@ -157,7 +157,7 @@ vmxnet3_txq_dump(struct vmxnet3_tx_queue *txq)\n #endif\n \n static inline void\n-vmxnet3_cmd_ring_release(vmxnet3_cmd_ring_t *ring)\n+vmxnet3_cmd_ring_release_mbufs(vmxnet3_cmd_ring_t *ring)\n {\n \twhile (ring->next2comp != ring->next2fill) {\n \t\t/* No need to worry about tx desc ownership, device is quiesced by now. */\n@@ -171,16 +171,23 @@ vmxnet3_cmd_ring_release(vmxnet3_cmd_ring_t *ring)\n \t\t}\n \t\tvmxnet3_cmd_ring_adv_next2comp(ring);\n \t}\n+}\n+\n+static void\n+vmxnet3_cmd_ring_release(vmxnet3_cmd_ring_t *ring)\n+{\n+\tvmxnet3_cmd_ring_release_mbufs(ring);\n \trte_free(ring->buf_info);\n \tring->buf_info = NULL;\n }\n \n+\n void\n vmxnet3_dev_tx_queue_release(void *txq)\n {\n \tvmxnet3_tx_queue_t *tq = txq;\n \n-\tif (txq != NULL) {\n+\tif (tq != NULL) {\n \t\t/* Release the cmd_ring */\n \t\tvmxnet3_cmd_ring_release(&tq->cmd_ring);\n \t}\n@@ -192,13 +199,74 @@ vmxnet3_dev_rx_queue_release(void *rxq)\n \tint i;\n \tvmxnet3_rx_queue_t *rq = rxq;\n \n-\tif (rxq != NULL) {\n+\tif (rq != NULL) {\n \t\t/* Release both the cmd_rings */\n \t\tfor (i = 0; i < VMXNET3_RX_CMDRING_SIZE; i++)\n \t\t\tvmxnet3_cmd_ring_release(&rq->cmd_ring[i]);\n \t}\n }\n \n+static void\n+vmxnet3_dev_tx_queue_reset(void *txq)\n+{\n+\tvmxnet3_tx_queue_t *tq = txq;\n+\tstruct vmxnet3_cmd_ring *ring = &tq->cmd_ring;\n+\tstruct vmxnet3_comp_ring *comp_ring = &tq->comp_ring;\n+\tint size;\n+\n+\tif (tq != NULL) {\n+\t\t/* Release the cmd_ring mbufs */\n+\t\tvmxnet3_cmd_ring_release_mbufs(&tq->cmd_ring);\n+\t}\n+\n+\t/* Tx vmxnet rings structure initialization*/\n+\tring->next2fill = 0;\n+\tring->next2comp = 0;\n+\tring->gen = VMXNET3_INIT_GEN;\n+\tcomp_ring->next2proc = 0;\n+\tcomp_ring->gen = VMXNET3_INIT_GEN;\n+\n+\tsize = sizeof(struct Vmxnet3_TxDesc) * ring->size;\n+\tsize += sizeof(struct Vmxnet3_TxCompDesc) * comp_ring->size;\n+\n+\tmemset(ring->base, 0, size);\n+}\n+\n+static void\n+vmxnet3_dev_rx_queue_reset(void *rxq)\n+{\n+\tint i;\n+\tvmxnet3_rx_queue_t *rq = rxq;\n+\tstruct vmxnet3_cmd_ring *ring0, *ring1;\n+\tstruct vmxnet3_comp_ring *comp_ring;\n+\tint size;\n+\n+\tif (rq != NULL) {\n+\t\t/* Release both the cmd_rings mbufs */\n+\t\tfor (i = 0; i < VMXNET3_RX_CMDRING_SIZE; i++)\n+\t\t\tvmxnet3_cmd_ring_release_mbufs(&rq->cmd_ring[i]);\n+\t}\n+\n+\tring0 = &rq->cmd_ring[0];\n+\tring1 = &rq->cmd_ring[1];\n+\tcomp_ring = &rq->comp_ring;\n+\n+\t/* Rx vmxnet rings structure initialization */\n+\tring0->next2fill = 0;\n+\tring1->next2fill = 0;\n+\tring0->next2comp = 0;\n+\tring1->next2comp = 0;\n+\tring0->gen = VMXNET3_INIT_GEN;\n+\tring1->gen = VMXNET3_INIT_GEN;\n+\tcomp_ring->next2proc = 0;\n+\tcomp_ring->gen = VMXNET3_INIT_GEN;\n+\n+\tsize = sizeof(struct Vmxnet3_RxDesc) * (ring0->size + ring1->size);\n+\tsize += sizeof(struct Vmxnet3_RxCompDesc) * comp_ring->size;\n+\n+\tmemset(ring0->base, 0, size);\n+}\n+\n void\n vmxnet3_dev_clear_queues(struct rte_eth_dev *dev)\n {\n@@ -211,7 +279,7 @@ vmxnet3_dev_clear_queues(struct rte_eth_dev *dev)\n \n \t\tif (txq != NULL) {\n \t\t\ttxq->stopped = TRUE;\n-\t\t\tvmxnet3_dev_tx_queue_release(txq);\n+\t\t\tvmxnet3_dev_tx_queue_reset(txq);\n \t\t}\n \t}\n \n@@ -220,7 +288,7 @@ vmxnet3_dev_clear_queues(struct rte_eth_dev *dev)\n \n \t\tif (rxq != NULL) {\n \t\t\trxq->stopped = TRUE;\n-\t\t\tvmxnet3_dev_rx_queue_release(rxq);\n+\t\t\tvmxnet3_dev_rx_queue_reset(rxq);\n \t\t}\n \t}\n }\n", "prefixes": [ "dpdk-dev", "v2", "3/6" ] }{ "id": 1128, "url": "