[dpdk-dev] [PATCH] vhost: flush used->idx update before reading avail->flags
Linhaifeng
haifeng.lin at huawei.com
Fri Apr 24 03:01:15 CEST 2015
On 2015/4/23 0:33, Huawei Xie wrote:
> update of used->idx and read of avail->flags could be reordered.
> memory fence should be used to ensure the order, otherwise guest could see a stale used->idx value after it toggles the interrupt suppression flag.
>
> Signed-off-by: Huawei Xie <huawei.xie at intel.com>
> ---
> lib/librte_vhost/vhost_rxtx.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/lib/librte_vhost/vhost_rxtx.c b/lib/librte_vhost/vhost_rxtx.c
> index 510ffe8..6afba35 100644
> --- a/lib/librte_vhost/vhost_rxtx.c
> +++ b/lib/librte_vhost/vhost_rxtx.c
> @@ -178,6 +178,9 @@ virtio_dev_rx(struct virtio_net *dev, uint16_t queue_id,
> *(volatile uint16_t *)&vq->used->idx += count;
> vq->last_used_idx = res_end_idx;
>
> + /* flush used->idx update before we read avail->flags. */
> + rte_mb();
> +
> /* Kick the guest if necessary. */
> if (!(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT))
> eventfd_write((int)vq->callfd, 1);
>
If not add memory fence what would happen? Packets loss or interrupt loss?How to test it ?
More information about the dev
mailing list