get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 48886,
    "url": "http://patches.dpdk.org/api/patches/48886/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20181214153812.3878-1-i.maximets@samsung.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<20181214153812.3878-1-i.maximets@samsung.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20181214153812.3878-1-i.maximets@samsung.com",
    "date": "2018-12-14T15:38:12",
    "name": "net/virtio: add platform memory ordering feature support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "d1762ecb9c0d097bdaf4ff2d5d5eb2925fd94461",
    "submitter": {
        "id": 323,
        "url": "http://patches.dpdk.org/api/people/323/?format=api",
        "name": "Ilya Maximets",
        "email": "i.maximets@samsung.com"
    },
    "delegate": {
        "id": 2642,
        "url": "http://patches.dpdk.org/api/users/2642/?format=api",
        "username": "mcoquelin",
        "first_name": "Maxime",
        "last_name": "Coquelin",
        "email": "maxime.coquelin@redhat.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20181214153812.3878-1-i.maximets@samsung.com/mbox/",
    "series": [
        {
            "id": 2786,
            "url": "http://patches.dpdk.org/api/series/2786/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=2786",
            "date": "2018-12-14T15:38:12",
            "name": "net/virtio: add platform memory ordering feature support",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/2786/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/48886/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/48886/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 B59A21B5F1;\n\tFri, 14 Dec 2018 16:38:21 +0100 (CET)",
            "from mailout2.w1.samsung.com (mailout2.w1.samsung.com\n\t[210.118.77.12]) by dpdk.org (Postfix) with ESMTP id 23E651B591\n\tfor <dev@dpdk.org>; Fri, 14 Dec 2018 16:38:19 +0100 (CET)",
            "from eucas1p2.samsung.com (unknown [182.198.249.207])\n\tby mailout2.w1.samsung.com (KnoxPortal) with ESMTP id\n\t20181214153819euoutp02b48b6ad011416ebc978f9f7e8a0bcfcb~wPSR9ZUyO1976319763euoutp02R\n\tfor <dev@dpdk.org>; Fri, 14 Dec 2018 15:38:19 +0000 (GMT)",
            "from eusmges2new.samsung.com (unknown [203.254.199.244]) by\n\teucas1p2.samsung.com (KnoxPortal) with ESMTP id\n\t20181214153818eucas1p2cbee1ebc0908f1ce31972a54428bf734~wPSRhhcr63176331763eucas1p22;\n\tFri, 14 Dec 2018 15:38:18 +0000 (GMT)",
            "from eucas1p2.samsung.com ( [182.198.249.207]) by\n\teusmges2new.samsung.com (EUCPMTA) with SMTP id 2A.C6.04294.A6EC31C5;\n\tFri, 14 Dec 2018 15:38:18 +0000 (GMT)",
            "from eusmtrp1.samsung.com (unknown [182.198.249.138]) by\n\teucas1p1.samsung.com (KnoxPortal) with ESMTPA id\n\t20181214153817eucas1p19a41cdd791879252e1f3a5d77c427845~wPSQ0B7gs0231502315eucas1p1s;\n\tFri, 14 Dec 2018 15:38:17 +0000 (GMT)",
            "from eusmgms2.samsung.com (unknown [182.198.249.180]) by\n\teusmtrp1.samsung.com (KnoxPortal) with ESMTP id\n\t20181214153817eusmtrp16d16d12ae45bde545b4b01ea39b9e162~wPSQlSL-12683526835eusmtrp1B;\n\tFri, 14 Dec 2018 15:38:17 +0000 (GMT)",
            "from eusmtip1.samsung.com ( [203.254.199.221]) by\n\teusmgms2.samsung.com (EUCPMTA) with SMTP id AF.69.04128.96EC31C5;\n\tFri, 14 Dec 2018 15:38:17 +0000 (GMT)",
            "from imaximets.rnd.samsung.ru (unknown [106.109.129.180]) by\n\teusmtip1.samsung.com (KnoxPortal) with ESMTPA id\n\t20181214153816eusmtip1cb20bde00933486ff5dfeadd98b7c1d3~wPSP381dr2727827278eusmtip16;\n\tFri, 14 Dec 2018 15:38:16 +0000 (GMT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com\n\t20181214153819euoutp02b48b6ad011416ebc978f9f7e8a0bcfcb~wPSR9ZUyO1976319763euoutp02R",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;\n\ts=mail20170921; t=1544801899;\n\tbh=1bAVMWf08ht+tcJ8FPitdMgYhsZdc40dx9mkqGgl9U0=;\n\th=From:To:Cc:Subject:Date:References:From;\n\tb=dPxO7sB+35Rha9P2GgDff0MFxVnzVXkZCQTxlXTNTj5uqMbOzq5fK/qFs3KpTT1g1\n\t4CCxY3IjJPINVma9p2osAggu5JCku0gqOjuoJA59aoyztngFuT03B8Apw72YvOYyn0\n\tfHXO/+O//csmWz+8UKusSBiWnnMPs1jpvxztPLVI=",
        "X-AuditID": "cbfec7f4-84fff700000010c6-81-5c13ce6aa2dc",
        "From": "Ilya Maximets <i.maximets@samsung.com>",
        "To": "dev@dpdk.org, Maxime Coquelin <maxime.coquelin@redhat.com>, \"Michael S .\n\tTsirkin\" <mst@redhat.com>, Xiao Wang <xiao.w.wang@intel.com>",
        "Cc": "Tiwei Bie <tiwei.bie@intel.com>, Zhihong Wang <zhihong.wang@intel.com>, \n\tjfreimann@redhat.com, Jason Wang <jasowang@redhat.com>,\n\txiaolong.ye@intel.com, alejandro.lucero@netronome.com, Ilya Maximets\n\t<i.maximets@samsung.com>",
        "Date": "Fri, 14 Dec 2018 18:38:12 +0300",
        "Message-Id": "<20181214153812.3878-1-i.maximets@samsung.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "X-Brightmail-Tracker": [
            "H4sIAAAAAAAAA+NgFmphleLIzCtJLcpLzFFi42LZduzned2sc8IxBktmilqc+7SMyeLdp+1M\n\tFlfaf7JbLLv0mcni3JqlLBbHOvewWPz/9YrVYmvDfyaL/c8Ps1v8eWNqsfniJCYHbo9fC5ay\n\teize85LJY3r3Q2aP9/uusnn0bVnFGMAaxWWTkpqTWZZapG+XwJVxbk8/c8Ex04p52/qYGxj7\n\tdLoYOTkkBEwkvvS+YOxi5OIQEljBKPF7WSsbSEJI4AujxPJzDhCJz4wSPdN2sMB0PH22hBki\n\tsZxR4sWWKSwQzg9GibXrusHa2QR0JE6tPgI2V0Sgm1Hi1dPPbCAOs8BzoJYv99hBqoQFPCV+\n\tPboGZrMIqEo8/d8AZvMKWEl8WD6bEWKfvMTqDQfA9kkIfGaTWHzgGztEwkWid9U3qKOEJV4d\n\t3wIVl5E4PbkHKl4vcb/lJSNEcwejxPRD/5ggEvYSW16fA2rgADpJU2L9Ln2IsKPEv9PXWEDC\n\tEgJ8EjfeCoKEmYHMSdumM0OEeSU62oQgqlUkfh9czgxhS0ncfPcZ6gIPiZsbNjBCwjFWYlPD\n\tAuYJjHKzEHYtYGRcxSieWlqcm55abJSXWq5XnJhbXJqXrpecn7uJEZg2Tv87/mUH464/SYcY\n\tBTgYlXh4MyYJxQixJpYVV+YeYpTgYFYS4Q1rFY4R4k1JrKxKLcqPLyrNSS0+xCjNwaIkzlvN\n\t8CBaSCA9sSQ1OzW1ILUIJsvEwSnVwNj2UudAzIQTqQrNkamTXnFMPtzAxj5Pr+bWHvsIrrjg\n\tmVGByy2e55cu/DZl/qM30ssn9N9yLFnD2v4o4p0Ua+u82OvuC7Pmb7PU25VTyRj8PSomRUzk\n\tCltWsFV/5d50CZkTZotMVjUaZ/9wPd2jXDhp5fZepeeNgovnP2WKz6qSDw89XiHnrcRSnJFo\n\tqMVcVJwIAHZ6meUXAwAA",
            "H4sIAAAAAAAAA+NgFrrNLMWRmVeSWpSXmKPExsVy+t/xu7qZ54RjDPauUrY492kZk8W7T9uZ\n\tLK60/2S3WHbpM5PFuTVLWSyOde5hsfj/6xWrxdaG/0wW+58fZrf488bUYvPFSUwO3B6/Fixl\n\t9Vi85yWTx/Tuh8we7/ddZfPo27KKMYA1Ss+mKL+0JFUhI7+4xFYp2tDCSM/Q0kLPyMRSz9DY\n\tPNbKyFRJ384mJTUnsyy1SN8uQS/j3J5+5oJjphXztvUxNzD26XQxcnJICJhIPH22hLmLkYtD\n\tSGApo0TP6pesEAkpiR+/LkDZwhJ/rnWxQRR9Y5T4f72LHSTBJqAjcWr1EUaQhIhAP6PE7us3\n\twUYxC7xllOibdAOsSljAU+LXo2tgNouAqsTT/w1gNq+AlcSH5bMZIVbIS6zecIB5AiPPAkaG\n\tVYwiqaXFuem5xUZ6xYm5xaV56XrJ+bmbGIEBu+3Yzy07GLveBR9iFOBgVOLhPTBFKEaINbGs\n\tuDL3EKMEB7OSCG9Yq3CMEG9KYmVValF+fFFpTmrxIUZToOUTmaVEk/OB0ZRXEm9oamhuYWlo\n\tbmxubGahJM573qAySkggPbEkNTs1tSC1CKaPiYNTqoFRIKCTsVDQqWeO5qpd9VvEeg1PBEUH\n\tM+TYGR6aHbXmz2OpRylNAfv99pq23zCO+LRV5ktgqgTTPNZtTRe5rsa6JBZ0LGfvcFsftE5p\n\tY8C/M59mzorQcJa0vKsdURPmuvrE9ZIOvxdpkv/viUSlHDNxubpc0uJh/FyrHa/WFuaf5TXf\n\tZJ6esEiJpTgj0VCLuag4EQCYPXOWbgIAAA=="
        ],
        "X-CMS-MailID": "20181214153817eucas1p19a41cdd791879252e1f3a5d77c427845",
        "X-Msg-Generator": "CA",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "X-RootMTR": "20181214153817eucas1p19a41cdd791879252e1f3a5d77c427845",
        "X-EPHeader": "CA",
        "CMS-TYPE": "201P",
        "X-CMS-RootMailID": "20181214153817eucas1p19a41cdd791879252e1f3a5d77c427845",
        "References": "<CGME20181214153817eucas1p19a41cdd791879252e1f3a5d77c427845@eucas1p1.samsung.com>",
        "Subject": "[dpdk-dev] [PATCH] net/virtio: add platform memory ordering feature\n\tsupport",
        "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\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "VIRTIO_F_ORDER_PLATFORM is required to use proper memory barriers\nin case of HW vhost implementations like vDPA.\n\nDMA barriers (rte_cio_*) are sufficent for that purpose.\n\nPreviously known as VIRTIO_F_IO_BARRIER.\n\nSigned-off-by: Ilya Maximets <i.maximets@samsung.com>\n---\n\nBased on \"[RFC] net/virtio: use real barriers for vDPA\".\n\nRFC --> PATCH:\n  * Dropped vendor-specific hack to determine if we need real barriers.\n  * Added VIRTIO_F_ORDER_PLATFORM feature definition and checking.\n\nNote: Patch to change the name of the feature from VIRTIO_F_IO_BARRIER\n      to VIRTIO_F_ORDER_PLATFORM is not merged yet:\n      https://www.mail-archive.com/virtio-dev@lists.oasis-open.org/msg04114.html\n\n drivers/net/virtio/virtio_ethdev.c |  2 ++\n drivers/net/virtio/virtio_ethdev.h |  3 ++-\n drivers/net/virtio/virtio_pci.h    |  7 ++++++\n drivers/net/virtio/virtio_rxtx.c   | 14 ++++++------\n drivers/net/virtio/virtqueue.h     | 35 +++++++++++++++++++++++++-----\n 5 files changed, 48 insertions(+), 13 deletions(-)",
    "diff": "diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c\nindex cb2b2e0bf..5ae7a9650 100644\n--- a/drivers/net/virtio/virtio_ethdev.c\n+++ b/drivers/net/virtio/virtio_ethdev.c\n@@ -1474,6 +1474,8 @@ virtio_init_device(struct rte_eth_dev *eth_dev, uint64_t req_features)\n \tif (virtio_negotiate_features(hw, req_features) < 0)\n \t\treturn -1;\n \n+\thw->weak_barriers = !vtpci_with_feature(hw, VIRTIO_F_ORDER_PLATFORM);\n+\n \tif (!hw->virtio_user_dev) {\n \t\tpci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);\n \t\trte_eth_copy_pci_info(eth_dev, pci_dev);\ndiff --git a/drivers/net/virtio/virtio_ethdev.h b/drivers/net/virtio/virtio_ethdev.h\nindex e0f80e5a4..c098e5ac0 100644\n--- a/drivers/net/virtio/virtio_ethdev.h\n+++ b/drivers/net/virtio/virtio_ethdev.h\n@@ -34,7 +34,8 @@\n \t 1u << VIRTIO_RING_F_INDIRECT_DESC |    \\\n \t 1ULL << VIRTIO_F_VERSION_1       |\t\\\n \t 1ULL << VIRTIO_F_IN_ORDER        |\t\\\n-\t 1ULL << VIRTIO_F_IOMMU_PLATFORM)\n+\t 1ULL << VIRTIO_F_IOMMU_PLATFORM  |\t\\\n+\t 1ULL << VIRTIO_F_ORDER_PLATFORM)\n \n #define VIRTIO_PMD_SUPPORTED_GUEST_FEATURES\t\\\n \t(VIRTIO_PMD_DEFAULT_GUEST_FEATURES |\t\\\ndiff --git a/drivers/net/virtio/virtio_pci.h b/drivers/net/virtio/virtio_pci.h\nindex e961a58ca..e2f096185 100644\n--- a/drivers/net/virtio/virtio_pci.h\n+++ b/drivers/net/virtio/virtio_pci.h\n@@ -128,6 +128,12 @@ struct virtnet_ctl;\n  */\n #define VIRTIO_F_IN_ORDER 35\n \n+/*\n+ * This feature indicates that memory accesses by the driver and the device\n+ * are ordered in a way described by the platform.\n+ */\n+#define VIRTIO_F_ORDER_PLATFORM 36\n+\n /* The Guest publishes the used index for which it expects an interrupt\n  * at the end of the avail ring. Host should ignore the avail->flags field. */\n /* The Host publishes the avail index for which it expects a kick\n@@ -240,6 +246,7 @@ struct virtio_hw {\n \tuint8_t     use_simple_rx;\n \tuint8_t     use_inorder_rx;\n \tuint8_t     use_inorder_tx;\n+\tuint8_t     weak_barriers;\n \tbool        has_tx_offload;\n \tbool        has_rx_offload;\n \tuint16_t    port_id;\ndiff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c\nindex cb8f89f18..66195bf47 100644\n--- a/drivers/net/virtio/virtio_rxtx.c\n+++ b/drivers/net/virtio/virtio_rxtx.c\n@@ -906,7 +906,7 @@ virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)\n \n \tnb_used = VIRTQUEUE_NUSED(vq);\n \n-\tvirtio_rmb();\n+\tvirtio_rmb(hw->weak_barriers);\n \n \tnum = likely(nb_used <= nb_pkts) ? nb_used : nb_pkts;\n \tif (unlikely(num > VIRTIO_MBUF_BURST_SZ))\n@@ -1017,7 +1017,7 @@ virtio_recv_mergeable_pkts_inorder(void *rx_queue,\n \tnb_used = RTE_MIN(nb_used, nb_pkts);\n \tnb_used = RTE_MIN(nb_used, VIRTIO_MBUF_BURST_SZ);\n \n-\tvirtio_rmb();\n+\tvirtio_rmb(hw->weak_barriers);\n \n \tPMD_RX_LOG(DEBUG, \"used:%d\", nb_used);\n \n@@ -1202,7 +1202,7 @@ virtio_recv_mergeable_pkts(void *rx_queue,\n \n \tnb_used = VIRTQUEUE_NUSED(vq);\n \n-\tvirtio_rmb();\n+\tvirtio_rmb(hw->weak_barriers);\n \n \tPMD_RX_LOG(DEBUG, \"used:%d\", nb_used);\n \n@@ -1365,7 +1365,7 @@ virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)\n \tPMD_TX_LOG(DEBUG, \"%d packets to xmit\", nb_pkts);\n \tnb_used = VIRTQUEUE_NUSED(vq);\n \n-\tvirtio_rmb();\n+\tvirtio_rmb(hw->weak_barriers);\n \tif (likely(nb_used > vq->vq_nentries - vq->vq_free_thresh))\n \t\tvirtio_xmit_cleanup(vq, nb_used);\n \n@@ -1407,7 +1407,7 @@ virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)\n \t\t/* Positive value indicates it need free vring descriptors */\n \t\tif (unlikely(need > 0)) {\n \t\t\tnb_used = VIRTQUEUE_NUSED(vq);\n-\t\t\tvirtio_rmb();\n+\t\t\tvirtio_rmb(hw->weak_barriers);\n \t\t\tneed = RTE_MIN(need, (int)nb_used);\n \n \t\t\tvirtio_xmit_cleanup(vq, need);\n@@ -1463,7 +1463,7 @@ virtio_xmit_pkts_inorder(void *tx_queue,\n \tPMD_TX_LOG(DEBUG, \"%d packets to xmit\", nb_pkts);\n \tnb_used = VIRTQUEUE_NUSED(vq);\n \n-\tvirtio_rmb();\n+\tvirtio_rmb(hw->weak_barriers);\n \tif (likely(nb_used > vq->vq_nentries - vq->vq_free_thresh))\n \t\tvirtio_xmit_cleanup_inorder(vq, nb_used);\n \n@@ -1511,7 +1511,7 @@ virtio_xmit_pkts_inorder(void *tx_queue,\n \t\tneed = slots - vq->vq_free_cnt;\n \t\tif (unlikely(need > 0)) {\n \t\t\tnb_used = VIRTQUEUE_NUSED(vq);\n-\t\t\tvirtio_rmb();\n+\t\t\tvirtio_rmb(hw->weak_barriers);\n \t\t\tneed = RTE_MIN(need, (int)nb_used);\n \n \t\t\tvirtio_xmit_cleanup_inorder(vq, need);\ndiff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h\nindex 26518ed98..6b9055a1f 100644\n--- a/drivers/net/virtio/virtqueue.h\n+++ b/drivers/net/virtio/virtqueue.h\n@@ -19,15 +19,40 @@\n struct rte_mbuf;\n \n /*\n- * Per virtio_config.h in Linux.\n+ * Per virtio_ring.h in Linux.\n  *     For virtio_pci on SMP, we don't need to order with respect to MMIO\n  *     accesses through relaxed memory I/O windows, so smp_mb() et al are\n  *     sufficient.\n  *\n+ *     For using virtio to talk to real devices (eg. vDPA) we do need real\n+ *     barriers.\n  */\n-#define virtio_mb()\trte_smp_mb()\n-#define virtio_rmb()\trte_smp_rmb()\n-#define virtio_wmb()\trte_smp_wmb()\n+static inline void\n+virtio_mb(uint8_t weak_barriers)\n+{\n+\tif (weak_barriers)\n+\t\trte_smp_mb();\n+\telse\n+\t\trte_mb();\n+}\n+\n+static inline void\n+virtio_rmb(uint8_t weak_barriers)\n+{\n+\tif (weak_barriers)\n+\t\trte_smp_rmb();\n+\telse\n+\t\trte_cio_rmb();\n+}\n+\n+static inline void\n+virtio_wmb(uint8_t weak_barriers)\n+{\n+\tif (weak_barriers)\n+\t\trte_smp_wmb();\n+\telse\n+\t\trte_cio_wmb();\n+}\n \n #ifdef RTE_PMD_PACKET_PREFETCH\n #define rte_packet_prefetch(p)  rte_prefetch1(p)\n@@ -312,7 +337,7 @@ void vq_ring_free_inorder(struct virtqueue *vq, uint16_t desc_idx,\n static inline void\n vq_update_avail_idx(struct virtqueue *vq)\n {\n-\tvirtio_wmb();\n+\tvirtio_wmb(vq->hw->weak_barriers);\n \tvq->vq_ring.avail->idx = vq->vq_avail_idx;\n }\n \n",
    "prefixes": []
}