* [dpdk-stable] [PATCH v3 1/3] net/virtio: add missing barrier before reading the flags [not found] ` <CGME20190109145027eucas1p2437215de0df4c691eb84d4e84bfc71e5@eucas1p2.samsung.com> @ 2019-01-09 14:50 ` Ilya Maximets 2019-01-10 14:31 ` Maxime Coquelin 0 siblings, 1 reply; 2+ messages in thread From: Ilya Maximets @ 2019-01-09 14:50 UTC (permalink / raw) To: dev, Maxime Coquelin, Michael S . Tsirkin, Xiao Wang Cc: Tiwei Bie, Zhihong Wang, jfreimann, Jason Wang, xiaolong.ye, alejandro.lucero, Ilya Maximets, stable Reading the used->flags could be reordered with avail->idx update. vhost in kernel disables notifications for the time of packets receiving, like this: 1. disable notify 2. process packets 3. enable notify 4. has more packets ? goto 1 In case of reordering, virtio driver could read the flags on step 2 while notifications disabled and update avail->idx after the step 4, i.e. vhost will exit the loop on step 4 with notifications enabled, but virtio will not notify. Fixes: c1f86306a026 ("virtio: add new driver") CC: stable@dpdk.org Reported-by: Shahaf Shuler <shahafs@mellanox.com> Signed-off-by: Ilya Maximets <i.maximets@samsung.com> --- drivers/net/virtio/virtqueue.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h index d8ae5cdec..dffa03669 100644 --- a/drivers/net/virtio/virtqueue.h +++ b/drivers/net/virtio/virtqueue.h @@ -415,6 +415,11 @@ vq_update_avail_ring(struct virtqueue *vq, uint16_t desc_idx) static inline int virtqueue_kick_prepare(struct virtqueue *vq) { + /* + * Ensure updated avail->idx is visible to vhost before reading + * the used->flags. + */ + virtio_mb(); return !(vq->vq_ring.used->flags & VRING_USED_F_NO_NOTIFY); } @@ -423,6 +428,9 @@ virtqueue_kick_prepare_packed(struct virtqueue *vq) { uint16_t flags; + /* + * Ensure updated data is visible to vhost before reading the flags. + */ virtio_mb(); flags = vq->ring_packed.device_event->desc_event_flags; -- 2.17.1 ^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [dpdk-stable] [PATCH v3 1/3] net/virtio: add missing barrier before reading the flags 2019-01-09 14:50 ` [dpdk-stable] [PATCH v3 1/3] net/virtio: add missing barrier before reading the flags Ilya Maximets @ 2019-01-10 14:31 ` Maxime Coquelin 0 siblings, 0 replies; 2+ messages in thread From: Maxime Coquelin @ 2019-01-10 14:31 UTC (permalink / raw) To: Ilya Maximets, dev, Michael S . Tsirkin, Xiao Wang Cc: Tiwei Bie, Zhihong Wang, jfreimann, Jason Wang, xiaolong.ye, alejandro.lucero, stable On 1/9/19 3:50 PM, Ilya Maximets wrote: > Reading the used->flags could be reordered with avail->idx update. > vhost in kernel disables notifications for the time of packets > receiving, like this: > > 1. disable notify > 2. process packets > 3. enable notify > 4. has more packets ? goto 1 > > In case of reordering, virtio driver could read the flags on > step 2 while notifications disabled and update avail->idx after > the step 4, i.e. vhost will exit the loop on step 4 with > notifications enabled, but virtio will not notify. > > Fixes: c1f86306a026 ("virtio: add new driver") > CC: stable@dpdk.org > > Reported-by: Shahaf Shuler <shahafs@mellanox.com> > Signed-off-by: Ilya Maximets <i.maximets@samsung.com> > --- > drivers/net/virtio/virtqueue.h | 8 ++++++++ > 1 file changed, 8 insertions(+) > Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com> Thanks, Maxime ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-01-10 14:31 UTC | newest] Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20181226163712.31596-1-i.maximets@samsung.com> [not found] ` <20190109145015.3010-1-i.maximets@samsung.com> [not found] ` <CGME20190109145027eucas1p2437215de0df4c691eb84d4e84bfc71e5@eucas1p2.samsung.com> 2019-01-09 14:50 ` [dpdk-stable] [PATCH v3 1/3] net/virtio: add missing barrier before reading the flags Ilya Maximets 2019-01-10 14:31 ` Maxime Coquelin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).