The notification can't be disabled in packed ring when
application tries to disable notification, because the
device event flags field is overwritten by an unexpected
value. This patch fixes this issue.
Fixes: b1cce26af1dc ("vhost: add notification for packed ring")
Cc: sta...@dpdk.org

Signed-off-by: Tiwei Bie <tiwei....@intel.com>
---
 lib/librte_vhost/vhost.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c
index e62f4c594..c9270bdec 100644
--- a/lib/librte_vhost/vhost.c
+++ b/lib/librte_vhost/vhost.c
@@ -667,8 +667,10 @@ vhost_enable_notify_packed(struct virtio_net *dev,
 {
        uint16_t flags;
 
-       if (!enable)
-               vq->device_event->flags = VRING_EVENT_F_DISABLE;
+       if (!enable) {
+               flags = VRING_EVENT_F_DISABLE;
+               goto out;
+       }
 
        flags = VRING_EVENT_F_ENABLE;
        if (dev->features & (1ULL << VIRTIO_RING_F_EVENT_IDX)) {
@@ -677,6 +679,7 @@ vhost_enable_notify_packed(struct virtio_net *dev,
                        vq->avail_wrap_counter << 15;
        }
 
+out:
        rte_smp_wmb();
 
        vq->device_event->flags = flags;
-- 
2.19.1

Reply via email to