From: "Michael S. Tsirkin" <mst@redhat.com>
To: Maxime Coquelin <maxime.coquelin@redhat.com>
Cc: dev@dpdk.org, i.maximets@samsung.com, tiwei.bie@intel.com,
zhihong.wang@intel.com, jasowang@redhat.com, stable@dpdk.org
Subject: Re: [PATCH v2 1/4] vhost: enforce avail index and desc read ordering
Date: Wed, 19 Dec 2018 10:47:00 -0500 [thread overview]
Message-ID: <20181219104410-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20181219082113.24455-2-maxime.coquelin@redhat.com>
On Wed, Dec 19, 2018 at 09:21:10AM +0100, Maxime Coquelin wrote:
> A read barrier is required to ensure the ordering between
> available index and the descriptor reads is enforced.
>
> 1. read avail_head = avail->idx
> 2. read cur_idx = last_avail_idx
> if (cur_idx != avail_head) {
> 3. read idx = avail->ring[cur_idx]
> 4. read desc[idx]
> }
>
> There is a control dependency between step 1 and steps 3 & 4,
> 3 could be speculatively executed before 1, which could result
> in 'idx' to not being updated yet.
>
> Fixes: 4796ad63ba1f ("examples/vhost: import userspace vhost application")
> Cc: stable@dpdk.org
>
> Reported-by: Jason Wang <jasowang@redhat.com>
> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
> Acked-by: Ilya Maximets <i.maximets@samsung.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
BTW Ilya do you see a performance degradation from RMBs with these patches?
> ---
> lib/librte_vhost/virtio_net.c | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c
> index 8c657a101..7f37bbbed 100644
> --- a/lib/librte_vhost/virtio_net.c
> +++ b/lib/librte_vhost/virtio_net.c
> @@ -752,6 +752,12 @@ virtio_dev_rx_split(struct virtio_net *dev, struct vhost_virtqueue *vq,
> rte_prefetch0(&vq->avail->ring[vq->last_avail_idx & (vq->size - 1)]);
> avail_head = *((volatile uint16_t *)&vq->avail->idx);
>
> + /*
> + * The ordering between avail index and
> + * desc reads needs to be enforced.
> + */
> + rte_smp_rmb();
> +
I'd guess you want to put the RMB before the prefetch. No?
Otherwise I think you are either stalling until that completes
or discard the prefetch ...
> for (pkt_idx = 0; pkt_idx < count; pkt_idx++) {
> uint32_t pkt_len = pkts[pkt_idx]->pkt_len + dev->vhost_hlen;
> uint16_t nr_vec = 0;
> @@ -1334,6 +1340,12 @@ virtio_dev_tx_split(struct virtio_net *dev, struct vhost_virtqueue *vq,
> if (free_entries == 0)
> return 0;
>
> + /*
> + * The ordering between avail index and
> + * desc reads needs to be enforced.
> + */
> + rte_smp_rmb();
> +
> VHOST_LOG_DEBUG(VHOST_DATA, "(%d) %s\n", dev->vid, __func__);
>
> count = RTE_MIN(count, MAX_PKT_BURST);
> --
> 2.17.2
next prev parent reply other threads:[~2018-12-19 15:47 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-19 8:21 [PATCH v2 0/4] vhost: add missing barriers, move prefetching Maxime Coquelin
2018-12-19 8:21 ` [PATCH v2 1/4] vhost: enforce avail index and desc read ordering Maxime Coquelin
2018-12-19 15:47 ` Michael S. Tsirkin [this message]
2018-12-19 15:50 ` Maxime Coquelin
2018-12-19 8:21 ` [PATCH v2 2/4] vhost: enforce desc flags and content " Maxime Coquelin
2018-12-19 8:21 ` [PATCH v2 3/4] vhost: prefetch descriptor after the read barrier Maxime Coquelin
2018-12-19 8:21 ` [PATCH v2 4/4] vhost: remove useless prefetch for packed ring descriptor Maxime Coquelin
2018-12-19 15:49 ` Michael S. Tsirkin
2018-12-19 15:50 ` [PATCH v2 0/4] vhost: add missing barriers, move prefetching Michael S. Tsirkin
2018-12-19 16:28 ` Ilya Maximets
2018-12-20 4:39 ` Tiwei Bie
2018-12-20 18:19 ` Maxime Coquelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181219104410-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=dev@dpdk.org \
--cc=i.maximets@samsung.com \
--cc=jasowang@redhat.com \
--cc=maxime.coquelin@redhat.com \
--cc=stable@dpdk.org \
--cc=tiwei.bie@intel.com \
--cc=zhihong.wang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.