Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/40692/?format=api
https://patches.dpdk.org/api/patches/40692/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/20180606123128.7868-2-maxime.coquelin@redhat.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": "<20180606123128.7868-2-maxime.coquelin@redhat.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20180606123128.7868-2-maxime.coquelin@redhat.com", "date": "2018-06-06T12:31:24", "name": "[dpdk-dev,v2,1/5] net/virtio: prevent simple Tx path selection by default", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "75c333c4159b4c94bd267060a4a98c5a53a81c82", "submitter": { "id": 512, "url": "https://patches.dpdk.org/api/people/512/?format=api", "name": "Maxime Coquelin", "email": "maxime.coquelin@redhat.com" }, "delegate": { "id": 2642, "url": "https://patches.dpdk.org/api/users/2642/?format=api", "username": "mcoquelin", "first_name": "Maxime", "last_name": "Coquelin", "email": "maxime.coquelin@redhat.com" }, "mbox": "https://patches.dpdk.org/project/dpdk/patch/20180606123128.7868-2-maxime.coquelin@redhat.com/mbox/", "series": [ { "id": 20, "url": "https://patches.dpdk.org/api/series/20/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=20", "date": "2018-06-06T12:31:23", "name": "net/virtio: Tx path selection and offload improvements", "version": 2, "mbox": "https://patches.dpdk.org/series/20/mbox/" } ], "comments": "https://patches.dpdk.org/api/patches/40692/comments/", "check": "warning", "checks": "https://patches.dpdk.org/api/patches/40692/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<maxime.coquelin@redhat.com>", "Received": [ "from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73])\n\tby dpdk.org (Postfix) with ESMTP id CDFE71B1D4\n\tfor <dev@dpdk.org>; Wed, 6 Jun 2018 14:31:44 +0200 (CEST)", "from smtp.corp.redhat.com\n\t(int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 52FBE40BC068;\n\tWed, 6 Jun 2018 12:31:44 +0000 (UTC)", "from localhost.localdomain (ovpn-112-47.ams2.redhat.com\n\t[10.36.112.47])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 586646B58D;\n\tWed, 6 Jun 2018 12:31:43 +0000 (UTC)" ], "From": "Maxime Coquelin <maxime.coquelin@redhat.com>", "To": "zhihong.wang@intel.com,\n\ttiwei.bie@intel.com,\n\tdev@dpdk.org", "Cc": "Maxime Coquelin <maxime.coquelin@redhat.com>", "Date": "Wed, 6 Jun 2018 14:31:24 +0200", "Message-Id": "<20180606123128.7868-2-maxime.coquelin@redhat.com>", "In-Reply-To": "<20180606123128.7868-1-maxime.coquelin@redhat.com>", "References": "<20180606123128.7868-1-maxime.coquelin@redhat.com>", "X-Scanned-By": "MIMEDefang 2.79 on 10.11.54.5", "X-Greylist": [ "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.11.55.7]); Wed, 06 Jun 2018 12:31:44 +0000 (UTC)", "inspected by milter-greylist-4.5.16 (mx1.redhat.com\n\t[10.11.55.7]); \n\tWed, 06 Jun 2018 12:31:44 +0000 (UTC) for IP:'10.11.54.5'\n\tDOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com'\n\tHELO:'smtp.corp.redhat.com' FROM:'maxime.coquelin@redhat.com' RCPT:''" ], "Subject": "[dpdk-dev] [PATCH v2 1/5] net/virtio: prevent simple Tx path\n\tselection by default", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://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": "<https://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>", "X-List-Received-Date": "Wed, 06 Jun 2018 12:31:45 -0000" }, "content": "Simple Tx path is not compliant with the Virtio specification,\nas it assumes the device will use the descriptors in order.\n\nVIRTIO_F_IN_ORDER feature has been introduced recently, but the\nsimple Tx path is not compliant with it as VIRTIO_F_IN_ORDER\nrequires that chained descriptors are used sequentially, which\nis not the case in simple Tx path.\n\nThis patch introduces 'simple_tx_support' devarg to unlock\nTx simple path selection.\n\nReported-by: Tiwei Bie <tiwei.bie@intel.com>\nSigned-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>\n---\n doc/guides/nics/virtio.rst | 9 +++++\n drivers/net/virtio/virtio_ethdev.c | 72 +++++++++++++++++++++++++++++++++++++-\n drivers/net/virtio/virtio_pci.h | 1 +\n 3 files changed, 81 insertions(+), 1 deletion(-)", "diff": "diff --git a/doc/guides/nics/virtio.rst b/doc/guides/nics/virtio.rst\nindex 8922f9c0b..53ce1c12a 100644\n--- a/doc/guides/nics/virtio.rst\n+++ b/doc/guides/nics/virtio.rst\n@@ -222,6 +222,9 @@ Tx callbacks:\n \n #. ``virtio_xmit_pkts_simple``:\n Vector version fixes the available ring indexes to optimize performance.\n+ This implementation does not comply with the Virtio specification, and so\n+ is not selectable by default. \"simple_tx_support=1\" devarg must be passed\n+ to unlock it.\n \n \n By default, the non-vector callbacks are used:\n@@ -331,3 +334,9 @@ The user can specify below argument in devargs.\n driver, and works as a HW vhost backend. This argument is used to specify\n a virtio device needs to work in vDPA mode.\n (Default: 0 (disabled))\n+\n+#. ``simple_tx_support``:\n+\n+ This argument enables support for the simple Tx path, which is not\n+ compliant with the Virtio specification.\n+ (Default: 0 (disabled))\ndiff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c\nindex 5833dad73..bdc4f09d5 100644\n--- a/drivers/net/virtio/virtio_ethdev.c\n+++ b/drivers/net/virtio/virtio_ethdev.c\n@@ -1331,6 +1331,8 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev)\n \tif (hw->use_simple_tx) {\n \t\tPMD_INIT_LOG(INFO, \"virtio: using simple Tx path on port %u\",\n \t\t\teth_dev->data->port_id);\n+\t\tPMD_INIT_LOG(WARNING,\n+\t\t\t\t\"virtio: simple Tx path does not comply with Virtio spec\");\n \t\teth_dev->tx_pkt_burst = virtio_xmit_pkts_simple;\n \t} else {\n \t\tPMD_INIT_LOG(INFO, \"virtio: using standard Tx path on port %u\",\n@@ -1790,6 +1792,65 @@ rte_virtio_pmd_init(void)\n \trte_pci_register(&rte_virtio_pmd);\n }\n \n+#define VIRTIO_SIMPLE_TX_SUPPORT \"simple_tx_support\"\n+\n+static int virtio_dev_args_check(const char *key, const char *val,\n+\t\tvoid *opaque)\n+{\n+\tstruct rte_eth_dev *dev = opaque;\n+\tstruct virtio_hw *hw = dev->data->dev_private;\n+\tunsigned long tmp;\n+\tint ret = 0;\n+\n+\terrno = 0;\n+\ttmp = strtoul(val, NULL, 0);\n+\tif (errno) {\n+\t\tPMD_INIT_LOG(INFO, \"%s: \\\"%s\\\" is not a valid integer\", key, val);\n+\t\treturn errno;\n+\t}\n+\n+\tif (strcmp(VIRTIO_SIMPLE_TX_SUPPORT, key) == 0)\n+\t\thw->support_simple_tx = !!tmp;\n+\n+\treturn ret;\n+}\n+\n+static int\n+virtio_dev_args(struct rte_eth_dev *dev)\n+{\n+\tstruct rte_kvargs *kvlist;\n+\tstruct rte_devargs *devargs;\n+\tconst char *valid_args[] = {\n+\t\tVIRTIO_SIMPLE_TX_SUPPORT,\n+\t\tNULL,\n+\t};\n+\tint ret;\n+\tint i;\n+\n+\tdevargs = dev->device->devargs;\n+\tif (!devargs)\n+\t\treturn 0; /* return success */\n+\n+\tkvlist = rte_kvargs_parse(devargs->args, valid_args);\n+\tif (kvlist == NULL)\n+\t\treturn -EINVAL;\n+\n+\t /* Process parameters. */\n+\tfor (i = 0; (valid_args[i] != NULL); ++i) {\n+\t\tif (rte_kvargs_count(kvlist, valid_args[i])) {\n+\t\t\tret = rte_kvargs_process(kvlist, valid_args[i],\n+\t\t\t\t\t\t virtio_dev_args_check, dev);\n+\t\t\tif (ret) {\n+\t\t\t\trte_kvargs_free(kvlist);\n+\t\t\t\treturn ret;\n+\t\t\t}\n+\t\t}\n+\t}\n+\trte_kvargs_free(kvlist);\n+\n+\treturn 0;\n+}\n+\n /*\n * Configure virtio device\n * It returns 0 on success.\n@@ -1804,6 +1865,10 @@ virtio_dev_configure(struct rte_eth_dev *dev)\n \tint ret;\n \n \tPMD_INIT_LOG(DEBUG, \"configure\");\n+\n+\tif (virtio_dev_args(dev))\n+\t\treturn -ENOTSUP;\n+\n \treq_features = VIRTIO_PMD_DEFAULT_GUEST_FEATURES;\n \n \tif (dev->data->dev_conf.intr_conf.rxq) {\n@@ -1869,7 +1934,12 @@ virtio_dev_configure(struct rte_eth_dev *dev)\n \trte_spinlock_init(&hw->state_lock);\n \n \thw->use_simple_rx = 1;\n-\thw->use_simple_tx = 1;\n+\t/*\n+\t * Simple Tx does not comply with Virtio spec,\n+\t * \"simple_tx_support=1\" devarg needs to be passed\n+\t * to unlock it.\n+\t */\n+\thw->use_simple_tx = hw->support_simple_tx;\n \n #if defined RTE_ARCH_ARM64 || defined RTE_ARCH_ARM\n \tif (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_NEON)) {\ndiff --git a/drivers/net/virtio/virtio_pci.h b/drivers/net/virtio/virtio_pci.h\nindex a28ba8339..7318bb318 100644\n--- a/drivers/net/virtio/virtio_pci.h\n+++ b/drivers/net/virtio/virtio_pci.h\n@@ -231,6 +231,7 @@ struct virtio_hw {\n \tuint8_t\t vlan_strip;\n \tuint8_t\t use_msix;\n \tuint8_t modern;\n+\tuint8_t\t support_simple_tx;\n \tuint8_t use_simple_rx;\n \tuint8_t use_simple_tx;\n \tuint16_t port_id;\n", "prefixes": [ "dpdk-dev", "v2", "1/5" ] }{ "id": 40692, "url": "