get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 68542,
    "url": "https://patches.dpdk.org/api/patches/68542/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20200415164733.75416-3-yong.liu@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": "<20200415164733.75416-3-yong.liu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200415164733.75416-3-yong.liu@intel.com",
    "date": "2020-04-15T16:47:27",
    "name": "[v4,2/8] net/virtio-user: add vectorized datapath parameter",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "22169a76aa4a2205ed3448ab76ed419293f120d4",
    "submitter": {
        "id": 17,
        "url": "https://patches.dpdk.org/api/people/17/?format=api",
        "name": "Marvin Liu",
        "email": "yong.liu@intel.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/20200415164733.75416-3-yong.liu@intel.com/mbox/",
    "series": [
        {
            "id": 9391,
            "url": "https://patches.dpdk.org/api/series/9391/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=9391",
            "date": "2020-04-15T16:47:25",
            "name": "add packed ring vectorized datapath",
            "version": 4,
            "mbox": "https://patches.dpdk.org/series/9391/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/68542/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/68542/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 64D45A0563;\n\tWed, 15 Apr 2020 11:13:38 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id E45461D654;\n\tWed, 15 Apr 2020 11:13:25 +0200 (CEST)",
            "from mga09.intel.com (mga09.intel.com [134.134.136.24])\n by dpdk.org (Postfix) with ESMTP id E2FE61D62D\n for <dev@dpdk.org>; Wed, 15 Apr 2020 11:13:21 +0200 (CEST)",
            "from orsmga004.jf.intel.com ([10.7.209.38])\n by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 15 Apr 2020 02:13:21 -0700",
            "from npg-dpdk-virtual-marvin-dev.sh.intel.com ([10.67.119.58])\n by orsmga004.jf.intel.com with ESMTP; 15 Apr 2020 02:13:19 -0700"
        ],
        "IronPort-SDR": [
            "\n vGiMV8YMai9MuQ4if3ga+s/DGJleeJUuEmXHidWS9AcyY07zWJKvqKqhMxzamOi5DA7SSjBW70\n s3yE5D2MDDTA==",
            "\n HawkskQqurqDnQRNZSbac+mwj3mwLY9WFwPhXt0CPTDgB73cY2e7jq5jt8YY/IV/NIVLkHBZYj\n +8RtTp1+3jew=="
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.72,386,1580803200\"; d=\"scan'208\";a=\"400250838\"",
        "From": "Marvin Liu <yong.liu@intel.com>",
        "To": "maxime.coquelin@redhat.com, xiaolong.ye@intel.com, zhihong.wang@intel.com",
        "Cc": "harry.van.haaren@intel.com, dev@dpdk.org, Marvin Liu <yong.liu@intel.com>",
        "Date": "Thu, 16 Apr 2020 00:47:27 +0800",
        "Message-Id": "<20200415164733.75416-3-yong.liu@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20200415164733.75416-1-yong.liu@intel.com>",
        "References": "<20200313174230.74661-1-yong.liu@intel.com>\n <20200415164733.75416-1-yong.liu@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v4 2/8] net/virtio-user: add vectorized datapath\n\tparameter",
        "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://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Add new parameter \"vectorized\" which can enable vectorized datapath\nexplicitly. This parameter will work for both split ring and packed\nring. When \"vectorized\" option is on, driver will check both compiling\nenvironment and running enviornment.\n\nSigned-off-by: Marvin Liu <yong.liu@intel.com>",
    "diff": "diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c\nindex f9d0ea70d..19a36ad82 100644\n--- a/drivers/net/virtio/virtio_ethdev.c\n+++ b/drivers/net/virtio/virtio_ethdev.c\n@@ -1547,7 +1547,7 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev)\n \t\t\teth_dev->rx_pkt_burst = &virtio_recv_pkts_packed;\n \t\t}\n \t} else {\n-\t\tif (hw->use_simple_rx) {\n+\t\tif (hw->use_vec_rx) {\n \t\t\tPMD_INIT_LOG(INFO, \"virtio: using simple Rx path on port %u\",\n \t\t\t\teth_dev->data->port_id);\n \t\t\teth_dev->rx_pkt_burst = virtio_recv_pkts_vec;\n@@ -2157,33 +2157,31 @@ virtio_dev_configure(struct rte_eth_dev *dev)\n \t\t\treturn -EBUSY;\n \t\t}\n \n-\thw->use_simple_rx = 1;\n-\n \tif (vtpci_with_feature(hw, VIRTIO_F_IN_ORDER)) {\n \t\thw->use_inorder_tx = 1;\n \t\thw->use_inorder_rx = 1;\n-\t\thw->use_simple_rx = 0;\n+\t\thw->use_vec_rx = 0;\n \t}\n \n \tif (vtpci_packed_queue(hw)) {\n-\t\thw->use_simple_rx = 0;\n+\t\thw->use_vec_rx = 0;\n \t\thw->use_inorder_rx = 0;\n \t}\n \n #if defined RTE_ARCH_ARM64 || defined RTE_ARCH_ARM\n \tif (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_NEON)) {\n-\t\thw->use_simple_rx = 0;\n+\t\thw->use_vec_rx = 0;\n \t}\n #endif\n \tif (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) {\n-\t\t hw->use_simple_rx = 0;\n+\t\t hw->use_vec_rx = 0;\n \t}\n \n \tif (rx_offloads & (DEV_RX_OFFLOAD_UDP_CKSUM |\n \t\t\t   DEV_RX_OFFLOAD_TCP_CKSUM |\n \t\t\t   DEV_RX_OFFLOAD_TCP_LRO |\n \t\t\t   DEV_RX_OFFLOAD_VLAN_STRIP))\n-\t\thw->use_simple_rx = 0;\n+\t\thw->use_vec_rx = 0;\n \n \treturn 0;\n }\ndiff --git a/drivers/net/virtio/virtio_pci.h b/drivers/net/virtio/virtio_pci.h\nindex 7433d2f08..36afed313 100644\n--- a/drivers/net/virtio/virtio_pci.h\n+++ b/drivers/net/virtio/virtio_pci.h\n@@ -250,7 +250,8 @@ struct virtio_hw {\n \tuint8_t\t    vlan_strip;\n \tuint8_t\t    use_msix;\n \tuint8_t     modern;\n-\tuint8_t     use_simple_rx;\n+\tuint8_t     use_vec_rx;\n+\tuint8_t     use_vec_tx;\n \tuint8_t     use_inorder_rx;\n \tuint8_t     use_inorder_tx;\n \tuint8_t     weak_barriers;\ndiff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c\nindex 3a2dbc2e0..285af1d47 100644\n--- a/drivers/net/virtio/virtio_rxtx.c\n+++ b/drivers/net/virtio/virtio_rxtx.c\n@@ -995,7 +995,7 @@ virtio_dev_rx_queue_setup_finish(struct rte_eth_dev *dev, uint16_t queue_idx)\n \t/* Allocate blank mbufs for the each rx descriptor */\n \tnbufs = 0;\n \n-\tif (hw->use_simple_rx) {\n+\tif (hw->use_vec_rx) {\n \t\tfor (desc_idx = 0; desc_idx < vq->vq_nentries;\n \t\t     desc_idx++) {\n \t\t\tvq->vq_split.ring.avail->ring[desc_idx] = desc_idx;\n@@ -1013,7 +1013,7 @@ virtio_dev_rx_queue_setup_finish(struct rte_eth_dev *dev, uint16_t queue_idx)\n \t\t\t&rxvq->fake_mbuf;\n \t}\n \n-\tif (hw->use_simple_rx) {\n+\tif (hw->use_vec_rx) {\n \t\twhile (vq->vq_free_cnt >= RTE_VIRTIO_VPMD_RX_REARM_THRESH) {\n \t\t\tvirtio_rxq_rearm_vec(rxvq);\n \t\t\tnbufs += RTE_VIRTIO_VPMD_RX_REARM_THRESH;\ndiff --git a/drivers/net/virtio/virtio_user_ethdev.c b/drivers/net/virtio/virtio_user_ethdev.c\nindex e61af4068..ca7797cfa 100644\n--- a/drivers/net/virtio/virtio_user_ethdev.c\n+++ b/drivers/net/virtio/virtio_user_ethdev.c\n@@ -450,6 +450,8 @@ static const char *valid_args[] = {\n \tVIRTIO_USER_ARG_IN_ORDER,\n #define VIRTIO_USER_ARG_PACKED_VQ      \"packed_vq\"\n \tVIRTIO_USER_ARG_PACKED_VQ,\n+#define VIRTIO_USER_ARG_VECTORIZED     \"vectorized\"\n+\tVIRTIO_USER_ARG_VECTORIZED,\n \tNULL\n };\n \n@@ -518,7 +520,8 @@ virtio_user_eth_dev_alloc(struct rte_vdev_device *vdev)\n \t */\n \thw->use_msix = 1;\n \thw->modern   = 0;\n-\thw->use_simple_rx = 0;\n+\thw->use_vec_rx = 0;\n+\thw->use_vec_tx = 0;\n \thw->use_inorder_rx = 0;\n \thw->use_inorder_tx = 0;\n \thw->virtio_user_dev = dev;\n@@ -552,6 +555,8 @@ virtio_user_pmd_probe(struct rte_vdev_device *dev)\n \tuint64_t mrg_rxbuf = 1;\n \tuint64_t in_order = 1;\n \tuint64_t packed_vq = 0;\n+\tuint64_t vectorized = 0;\n+\n \tchar *path = NULL;\n \tchar *ifname = NULL;\n \tchar *mac_addr = NULL;\n@@ -668,6 +673,17 @@ virtio_user_pmd_probe(struct rte_vdev_device *dev)\n \t\t}\n \t}\n \n+#ifdef RTE_LIBRTE_VIRTIO_INC_VECTOR\n+\tif (rte_kvargs_count(kvlist, VIRTIO_USER_ARG_VECTORIZED) == 1) {\n+\t\tif (rte_kvargs_process(kvlist, VIRTIO_USER_ARG_VECTORIZED,\n+\t\t\t\t       &get_integer_arg, &vectorized) < 0) {\n+\t\t\tPMD_INIT_LOG(ERR, \"error to parse %s\",\n+\t\t\t\t     VIRTIO_USER_ARG_VECTORIZED);\n+\t\t\tgoto end;\n+\t\t}\n+\t}\n+#endif\n+\n \tif (queues > 1 && cq == 0) {\n \t\tPMD_INIT_LOG(ERR, \"multi-q requires ctrl-q\");\n \t\tgoto end;\n@@ -705,6 +721,7 @@ virtio_user_pmd_probe(struct rte_vdev_device *dev)\n \t}\n \n \thw = eth_dev->data->dev_private;\n+\n \tif (virtio_user_dev_init(hw->virtio_user_dev, path, queues, cq,\n \t\t\t queue_size, mac_addr, &ifname, server_mode,\n \t\t\t mrg_rxbuf, in_order, packed_vq) < 0) {\n@@ -720,6 +737,20 @@ virtio_user_pmd_probe(struct rte_vdev_device *dev)\n \t\tgoto end;\n \t}\n \n+\tif (vectorized) {\n+\t\tif (packed_vq) {\n+#if defined(CC_AVX512_SUPPORT)\n+\t\t\thw->use_vec_rx = 1;\n+\t\t\thw->use_vec_tx = 1;\n+#else\n+\t\t\tPMD_INIT_LOG(INFO,\n+\t\t\t\t\"building environment do not match packed ring vectorized requirement\");\n+#endif\n+\t\t} else {\n+\t\t\thw->use_vec_rx = 1;\n+\t\t}\n+\t}\n+\n \trte_eth_dev_probing_finish(eth_dev);\n \tret = 0;\n \n@@ -777,4 +808,5 @@ RTE_PMD_REGISTER_PARAM_STRING(net_virtio_user,\n \t\"server=<0|1> \"\n \t\"mrg_rxbuf=<0|1> \"\n \t\"in_order=<0|1> \"\n-\t\"packed_vq=<0|1>\");\n+\t\"packed_vq=<0|1>\"\n+\t\"vectorized=<0|1>\");\ndiff --git a/drivers/net/virtio/virtqueue.c b/drivers/net/virtio/virtqueue.c\nindex 0b4e3bf3e..349ff0c9d 100644\n--- a/drivers/net/virtio/virtqueue.c\n+++ b/drivers/net/virtio/virtqueue.c\n@@ -32,7 +32,7 @@ virtqueue_detach_unused(struct virtqueue *vq)\n \tend = (vq->vq_avail_idx + vq->vq_free_cnt) & (vq->vq_nentries - 1);\n \n \tfor (idx = 0; idx < vq->vq_nentries; idx++) {\n-\t\tif (hw->use_simple_rx && type == VTNET_RQ) {\n+\t\tif (hw->use_vec_rx && type == VTNET_RQ) {\n \t\t\tif (start <= end && idx >= start && idx < end)\n \t\t\t\tcontinue;\n \t\t\tif (start > end && (idx >= start || idx < end))\n@@ -97,7 +97,7 @@ virtqueue_rxvq_flush_split(struct virtqueue *vq)\n \tfor (i = 0; i < nb_used; i++) {\n \t\tused_idx = vq->vq_used_cons_idx & (vq->vq_nentries - 1);\n \t\tuep = &vq->vq_split.ring.used->ring[used_idx];\n-\t\tif (hw->use_simple_rx) {\n+\t\tif (hw->use_vec_rx) {\n \t\t\tdesc_idx = used_idx;\n \t\t\trte_pktmbuf_free(vq->sw_ring[desc_idx]);\n \t\t\tvq->vq_free_cnt++;\n@@ -121,7 +121,7 @@ virtqueue_rxvq_flush_split(struct virtqueue *vq)\n \t\tvq->vq_used_cons_idx++;\n \t}\n \n-\tif (hw->use_simple_rx) {\n+\tif (hw->use_vec_rx) {\n \t\twhile (vq->vq_free_cnt >= RTE_VIRTIO_VPMD_RX_REARM_THRESH) {\n \t\t\tvirtio_rxq_rearm_vec(rxq);\n \t\t\tif (virtqueue_kick_prepare(vq))\n",
    "prefixes": [
        "v4",
        "2/8"
    ]
}