get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 40707,
    "url": "http://patchwork.dpdk.org/api/patches/40707/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20180607092616.27720-2-maxime.coquelin@redhat.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20180607092616.27720-2-maxime.coquelin@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180607092616.27720-2-maxime.coquelin@redhat.com",
    "date": "2018-06-07T09:26:12",
    "name": "[dpdk-dev,v3,1/5] net/virtio: forbid simple Tx path by default",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "047e8825785acf4c4aeac5e4263f4643e065815d",
    "submitter": {
        "id": 512,
        "url": "http://patchwork.dpdk.org/api/people/512/?format=api",
        "name": "Maxime Coquelin",
        "email": "maxime.coquelin@redhat.com"
    },
    "delegate": {
        "id": 2642,
        "url": "http://patchwork.dpdk.org/api/users/2642/?format=api",
        "username": "mcoquelin",
        "first_name": "Maxime",
        "last_name": "Coquelin",
        "email": "maxime.coquelin@redhat.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20180607092616.27720-2-maxime.coquelin@redhat.com/mbox/",
    "series": [
        {
            "id": 25,
            "url": "http://patchwork.dpdk.org/api/series/25/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=25",
            "date": "2018-06-07T09:26:11",
            "name": "net/virtio: Tx path selection and offload improvements",
            "version": 3,
            "mbox": "http://patchwork.dpdk.org/series/25/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/40707/comments/",
    "check": "warning",
    "checks": "http://patchwork.dpdk.org/api/patches/40707/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 [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 113B71B021;\n\tThu,  7 Jun 2018 11:26:36 +0200 (CEST)",
            "from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73])\n\tby dpdk.org (Postfix) with ESMTP id 3EE861B018\n\tfor <dev@dpdk.org>; Thu,  7 Jun 2018 11:26:34 +0200 (CEST)",
            "from smtp.corp.redhat.com\n\t(int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6])\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 9A10579D36;\n\tThu,  7 Jun 2018 09:26:33 +0000 (UTC)",
            "from localhost.localdomain (ovpn-112-46.ams2.redhat.com\n\t[10.36.112.46])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 19AB520357CA;\n\tThu,  7 Jun 2018 09:26:31 +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": "Thu,  7 Jun 2018 11:26:12 +0200",
        "Message-Id": "<20180607092616.27720-2-maxime.coquelin@redhat.com>",
        "In-Reply-To": "<20180607092616.27720-1-maxime.coquelin@redhat.com>",
        "References": "<20180607092616.27720-1-maxime.coquelin@redhat.com>",
        "X-Scanned-By": "MIMEDefang 2.78 on 10.11.54.6",
        "X-Greylist": [
            "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.11.55.2]); Thu, 07 Jun 2018 09:26:33 +0000 (UTC)",
            "inspected by milter-greylist-4.5.16 (mx1.redhat.com\n\t[10.11.55.2]); \n\tThu, 07 Jun 2018 09:26:33 +0000 (UTC) for IP:'10.11.54.6'\n\tDOMAIN:'int-mx06.intmail.prod.int.rdu2.redhat.com'\n\tHELO:'smtp.corp.redhat.com' FROM:'maxime.coquelin@redhat.com' RCPT:''"
        ],
        "Subject": "[dpdk-dev] [PATCH v3 1/5] net/virtio: forbid simple Tx path by\n\tdefault",
        "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>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "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 | 73 +++++++++++++++++++++++++++++++++++++-\n drivers/net/virtio/virtio_pci.h    |  1 +\n 3 files changed, 82 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..052dd056a 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,66 @@ 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,\n+\t\t\t\t\"%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, NULL);\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 +1866,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 +1935,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",
        "v3",
        "1/5"
    ]
}