get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 49547,
    "url": "http://patches.dpdk.org/api/patches/49547/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20190109145015.3010-4-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": "<20190109145015.3010-4-i.maximets@samsung.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190109145015.3010-4-i.maximets@samsung.com",
    "date": "2019-01-09T14:50:15",
    "name": "[v3,3/3] net/virtio: add platform memory ordering feature support",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "79ea47b8ffbf0b4ec55c917fbbf8f07a56ed6ec2",
    "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/20190109145015.3010-4-i.maximets@samsung.com/mbox/",
    "series": [
        {
            "id": 3071,
            "url": "http://patches.dpdk.org/api/series/3071/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=3071",
            "date": "2019-01-09T14:50:12",
            "name": "Missing barriers and VIRTIO_F_ORDER_PLATFORM.",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/3071/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/49547/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/49547/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 0B5E51B569;\n\tWed,  9 Jan 2019 15:50:43 +0100 (CET)",
            "from mailout1.w1.samsung.com (mailout1.w1.samsung.com\n\t[210.118.77.11]) by dpdk.org (Postfix) with ESMTP id 442B61B565\n\tfor <dev@dpdk.org>; Wed,  9 Jan 2019 15:50:42 +0100 (CET)",
            "from eucas1p1.samsung.com (unknown [182.198.249.206])\n\tby mailout1.w1.samsung.com (KnoxPortal) with ESMTP id\n\t20190109145041euoutp01c8fe119991192bda058851f091fcfcf2~4NaH9W5uM2918329183euoutp01j\n\tfor <dev@dpdk.org>; Wed,  9 Jan 2019 14:50:41 +0000 (GMT)",
            "from eusmges1new.samsung.com (unknown [203.254.199.242]) by\n\teucas1p2.samsung.com (KnoxPortal) with ESMTP id\n\t20190109145041eucas1p28cef453c6e7c1c655b05df349c86d395~4NaHi6zbc1647416474eucas1p2r;\n\tWed,  9 Jan 2019 14:50:41 +0000 (GMT)",
            "from eucas1p1.samsung.com ( [182.198.249.206]) by\n\teusmges1new.samsung.com (EUCPMTA) with SMTP id 79.E4.04441.14A063C5;\n\tWed,  9 Jan 2019 14:50:41 +0000 (GMT)",
            "from eusmtrp1.samsung.com (unknown [182.198.249.138]) by\n\teucas1p2.samsung.com (KnoxPortal) with ESMTPA id\n\t20190109145040eucas1p2d9afc678ef94986544bde07b77373e6f~4NaGpsRnM1558115581eucas1p2f;\n\tWed,  9 Jan 2019 14:50:40 +0000 (GMT)",
            "from eusmgms1.samsung.com (unknown [182.198.249.179]) by\n\teusmtrp1.samsung.com (KnoxPortal) with ESMTP id\n\t20190109145040eusmtrp193c0189ff1443d3f5063055462822d70~4NaGoqUty0367503675eusmtrp1T;\n\tWed,  9 Jan 2019 14:50:40 +0000 (GMT)",
            "from eusmtip2.samsung.com ( [203.254.199.222]) by\n\teusmgms1.samsung.com (EUCPMTA) with SMTP id C7.80.04284.04A063C5;\n\tWed,  9 Jan 2019 14:50:40 +0000 (GMT)",
            "from imaximets.rnd.samsung.ru (unknown [106.109.129.180]) by\n\teusmtip2.samsung.com (KnoxPortal) with ESMTPA id\n\t20190109145039eusmtip2fb844cd1422a9a2005db441224876aa7~4NaF3NDIz2072420724eusmtip2w;\n\tWed,  9 Jan 2019 14:50:39 +0000 (GMT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com\n\t20190109145041euoutp01c8fe119991192bda058851f091fcfcf2~4NaH9W5uM2918329183euoutp01j",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;\n\ts=mail20170921; t=1547045441;\n\tbh=7xkdEKZ707TSlD+fabHzHNqdANBfHzireDOwEOjBkKQ=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=Rfk7kYcBnPbpC1jHH/JpkwaYja/H9CwEd0iFDTCI+VB16HZkmoMf4zv9jvzes4Ut3\n\toKbrVt1NDilWXX42hXxI6HL2gvQzn+bJQEroHxP8WkHTWMqKZ7+QLtY28coKb63KHN\n\tEAyY5rpDpPiypnoz9jXpdPXP+5GeazHDv7qLjOrE=",
        "X-AuditID": "cbfec7f2-5e3ff70000001159-82-5c360a41f950",
        "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": "Wed,  9 Jan 2019 17:50:15 +0300",
        "Message-Id": "<20190109145015.3010-4-i.maximets@samsung.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20190109145015.3010-1-i.maximets@samsung.com>",
        "X-Brightmail-Tracker": [
            "H4sIAAAAAAAAA+NgFprEKsWRmVeSWpSXmKPExsWy7djPc7qOXGYxBkv/s1ic+7SMyeLdp+1M\n\tFlfaf7JbLLv0mcni3JqlLBbHOvewWPz/9YrVYmvDfyaL/c8Ps1v8eWNqsfniJCYHbo9fC5ay\n\teize85LJY3r3Q2aP9/uusnn0bVnFGMAaxWWTkpqTWZZapG+XwJXx5tZZxoI/1hU9U/vZGxg3\n\tGHYxcnJICJhIXLtyhq2LkYtDSGAFo8SZzb3sEM4XRonfN+6xQDifGSWOTJnGCtNy5OwRqMRy\n\tRonjPT+h+n8wSkxf+osdpIpNQEfi1OojjCAJEYFuRolXTz+DVTELPGeUePHlHliVsECQxIfv\n\tM1lAbBYBVYl1F64wgdi8AlYST1afYILYJy+xesMBZhCbU8BaYtmrGWCDJAQms0s0z9jJDFHk\n\tItHZuxuqQVji1fEt7BC2jMTpyT0sEHa9xP2Wl4wQzR1Atx76B9VgL7Hl9TmgBg6g8zQl1u/S\n\thwg7Suy/PZcNJCwhwCdx460gSJgZyJy0bTozRJhXoqNNCKJaReL3weVQ10hJ3Hz3GeoCD4mt\n\tLdOhgXqAUWLRurfsExjlZyEsW8DIuIpRPLW0ODc9tdgwL7Vcrzgxt7g0L10vOT93EyMwpZz+\n\td/zTDsavl5IOMQpwMCrx8Cb8M40RYk0sK67MPcQowcGsJMKrfsckRog3JbGyKrUoP76oNCe1\n\t+BCjNAeLkjhvNcODaCGB9MSS1OzU1ILUIpgsEwenVAOjcreO9dM+M9NvVdKZn24fyt+dv3P1\n\thD+Rn1efd/Hr+LeHRbfjYtiXR0s5ThYm8sjZxF5tOad9Ndq3xMf7cH5G2acwva05u61Mbptl\n\tS0lOab988OLOi37mc+Ue2z8MDFr37dKFfa16LPt1WhjWVP8/uvH6cRarhVEiHxyemLGL5Evl\n\t+HGqpC1TYinOSDTUYi4qTgQAzINaISUDAAA=",
            "H4sIAAAAAAAAA+NgFvrELMWRmVeSWpSXmKPExsVy+t/xe7oOXGYxBu+7xSzOfVrGZPHu03Ym\n\tiyvtP9ktll36zGRxbs1SFotjnXtYLP7/esVqsbXhP5PF/ueH2S3+vDG12HxxEpMDt8evBUtZ\n\tPRbvecnkMb37IbPH+31X2Tz6tqxiDGCN0rMpyi8tSVXIyC8usVWKNrQw0jO0tNAzMrHUMzQ2\n\tj7UyMlXSt7NJSc3JLEst0rdL0Mt4c+ssY8Ef64qeqf3sDYwbDLsYOTkkBEwkjpw9wtLFyMUh\n\tJLCUUaJtUwcLREJK4sevC6wQtrDEn2tdbCC2kMA3RomO94wgNpuAjsSp1UcYQZpFBPoZJXZf\n\tv8kM4jALvGWU6Jt0gx2kSlggQOLTiUlg3SwCqhLrLlxhArF5Bawknqw+wQSxQV5i9YYDzCA2\n\tp4C1xLJXM6C25Ugc+rKVfQIj3wJGhlWMIqmlxbnpucWGesWJucWleel6yfm5mxiB4b3t2M/N\n\tOxgvbQw+xCjAwajEw5vwzzRGiDWxrLgy9xCjBAezkgiv+h2TGCHelMTKqtSi/Pii0pzU4kOM\n\tpkBHTWSWEk3OB8ZeXkm8oamhuYWlobmxubGZhZI473mDyighgfTEktTs1NSC1CKYPiYOTqkG\n\tRt9Hvq+OZBy4a+v5O+Qh45JPngtDGi75zG5YOnPO44pXZxduW979Q1qEL02l8ivrOxfDnTMm\n\t8laxs04u/3EgNnhz/7GjZd1O33sPqLjJHvGaKHOy6GZ2krOgzhKBAsVLT3hEPScc+TZtO+cb\n\t4fV/PbL+vj8yi2uJySVZ0/0ngs6lsmRPvXu7+osSS3FGoqEWc1FxIgDzIE3nhQIAAA=="
        ],
        "X-CMS-MailID": "20190109145040eucas1p2d9afc678ef94986544bde07b77373e6f",
        "X-Msg-Generator": "CA",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "X-RootMTR": "20190109145040eucas1p2d9afc678ef94986544bde07b77373e6f",
        "X-EPHeader": "CA",
        "CMS-TYPE": "201P",
        "X-CMS-RootMailID": "20190109145040eucas1p2d9afc678ef94986544bde07b77373e6f",
        "References": "<20181226163712.31596-1-i.maximets@samsung.com>\n\t<20190109145015.3010-1-i.maximets@samsung.com>\n\t<CGME20190109145040eucas1p2d9afc678ef94986544bde07b77373e6f@eucas1p2.samsung.com>",
        "Subject": "[dpdk-dev] [PATCH v3 3/3] net/virtio: add platform memory ordering\n\tfeature support",
        "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 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   | 16 ++++++------\n drivers/net/virtio/virtqueue.h     | 41 ++++++++++++++++++++++++------\n 5 files changed, 52 insertions(+), 17 deletions(-)",
    "diff": "diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c\nindex 446c338fc..6d461180c 100644\n--- a/drivers/net/virtio/virtio_ethdev.c\n+++ b/drivers/net/virtio/virtio_ethdev.c\n@@ -1613,6 +1613,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 f8d8a56ab..b8aab7da4 100644\n--- a/drivers/net/virtio/virtio_ethdev.h\n+++ b/drivers/net/virtio/virtio_ethdev.h\n@@ -35,7 +35,8 @@\n \t 1ULL << VIRTIO_F_VERSION_1       |\t\\\n \t 1ULL << VIRTIO_F_IN_ORDER        |\t\\\n \t 1ULL << VIRTIO_F_RING_PACKED\t  |\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 b22b62dad..38a0261da 100644\n--- a/drivers/net/virtio/virtio_pci.h\n+++ b/drivers/net/virtio/virtio_pci.h\n@@ -129,6 +129,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@@ -241,6 +247,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 2309b71d6..ebb86ef70 100644\n--- a/drivers/net/virtio/virtio_rxtx.c\n+++ b/drivers/net/virtio/virtio_rxtx.c\n@@ -1152,7 +1152,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@@ -1361,7 +1361,7 @@ virtio_recv_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@@ -1549,7 +1549,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@@ -1940,7 +1940,7 @@ virtio_xmit_pkts_packed(void *tx_queue, struct rte_mbuf **tx_pkts,\n \n \t\t/* Positive value indicates it need free vring descriptors */\n \t\tif (unlikely(need > 0)) {\n-\t\t\tvirtio_rmb();\n+\t\t\tvirtio_rmb(hw->weak_barriers);\n \t\t\tneed = RTE_MIN(need, (int)nb_pkts);\n \t\t\tvirtio_xmit_cleanup_packed(vq, need);\n \t\t\tneed = slots - vq->vq_free_cnt;\n@@ -1988,7 +1988,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@@ -2030,7 +2030,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@@ -2086,7 +2086,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@@ -2134,7 +2134,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 53aeac238..123bec34f 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@@ -325,7 +350,7 @@ virtqueue_enable_intr_packed(struct virtqueue *vq)\n \n \n \tif (vq->event_flags_shadow == RING_EVENT_FLAGS_DISABLE) {\n-\t\tvirtio_wmb();\n+\t\tvirtio_wmb(vq->hw->weak_barriers);\n \t\tvq->event_flags_shadow = RING_EVENT_FLAGS_ENABLE;\n \t\t*event_flags = vq->event_flags_shadow;\n \t}\n@@ -391,7 +416,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@@ -419,7 +444,7 @@ virtqueue_kick_prepare(struct virtqueue *vq)\n \t * Ensure updated avail->idx is visible to vhost before reading\n \t * the used->flags.\n \t */\n-\tvirtio_mb();\n+\tvirtio_mb(vq->hw->weak_barriers);\n \treturn !(vq->vq_ring.used->flags & VRING_USED_F_NO_NOTIFY);\n }\n \n@@ -431,7 +456,7 @@ virtqueue_kick_prepare_packed(struct virtqueue *vq)\n \t/*\n \t * Ensure updated data is visible to vhost before reading the flags.\n \t */\n-\tvirtio_mb();\n+\tvirtio_mb(vq->hw->weak_barriers);\n \tflags = vq->ring_packed.device_event->desc_event_flags;\n \n \treturn flags != RING_EVENT_FLAGS_DISABLE;\n",
    "prefixes": [
        "v3",
        "3/3"
    ]
}