From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 2434A2BD5 for ; Tue, 20 Nov 2018 20:15:06 +0100 (CET) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7C6BD3082E56; Tue, 20 Nov 2018 19:15:05 +0000 (UTC) Received: from ktraynor.remote.csb (unknown [10.36.118.7]) by smtp.corp.redhat.com (Postfix) with ESMTP id 46A6F600C3; Tue, 20 Nov 2018 19:15:04 +0000 (UTC) From: Kevin Traynor To: Tiwei Bie Cc: Maxime Coquelin , dpdk stable Date: Tue, 20 Nov 2018 19:12:19 +0000 Message-Id: <20181120191252.30277-29-ktraynor@redhat.com> In-Reply-To: <20181120191252.30277-1-ktraynor@redhat.com> References: <20181120191252.30277-1-ktraynor@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Tue, 20 Nov 2018 19:15:05 +0000 (UTC) Subject: [dpdk-stable] patch 'vhost: fix vhost interrupt support' has been queued to stable release 18.08.1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Nov 2018 19:15:06 -0000 Hi, FYI, your patch has been queued to stable release 18.08.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/23/18. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. If the code is different (ie: not only metadata diffs), due for example to a change in context or macro names, please double check it. Thanks. Kevin Traynor --- >>From 97b28091a42d73c92fe2c6ec354559815e005fd0 Mon Sep 17 00:00:00 2001 From: Tiwei Bie Date: Wed, 5 Sep 2018 07:55:55 +0800 Subject: [PATCH] vhost: fix vhost interrupt support [ upstream commit 77de7c781cb6dbbf11c00118946fb4e46347116f ] When VIRTIO_RING_F_EVENT_IDX is negotiated, we need to update the avail event to enable the notification. Fixes: 3f8ff12821e4 ("vhost: support interrupt mode") Signed-off-by: Tiwei Bie Reviewed-by: Maxime Coquelin --- lib/librte_vhost/Makefile | 1 + lib/librte_vhost/meson.build | 1 + lib/librte_vhost/vhost.c | 18 ++++++++++++------ lib/librte_vhost/vhost.h | 2 ++ 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/librte_vhost/Makefile b/lib/librte_vhost/Makefile index de431fbb7..531cf4832 100644 --- a/lib/librte_vhost/Makefile +++ b/lib/librte_vhost/Makefile @@ -14,4 +14,5 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -D_FILE_OFFSET_BITS=64 CFLAGS += -I vhost_user +CFLAGS += -fno-strict-aliasing LDLIBS += -lpthread diff --git a/lib/librte_vhost/meson.build b/lib/librte_vhost/meson.build index bd62e0e39..9d25b4d88 100644 --- a/lib/librte_vhost/meson.build +++ b/lib/librte_vhost/meson.build @@ -10,4 +10,5 @@ endif version = 4 allow_experimental_apis = true +cflags += '-fno-strict-aliasing' sources = files('fd_man.c', 'iotlb.c', 'socket.c', 'vdpa.c', 'vhost.c', 'vhost_user.c', diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c index 3c9be10a0..88b1781d5 100644 --- a/lib/librte_vhost/vhost.c +++ b/lib/librte_vhost/vhost.c @@ -647,10 +647,16 @@ rte_vhost_avail_entries(int vid, uint16_t queue_id) static inline void -vhost_enable_notify_split(struct vhost_virtqueue *vq, int enable) +vhost_enable_notify_split(struct virtio_net *dev, + struct vhost_virtqueue *vq, int enable) { - if (enable) - vq->used->flags &= ~VRING_USED_F_NO_NOTIFY; - else - vq->used->flags |= VRING_USED_F_NO_NOTIFY; + if (!(dev->features & (1ULL << VIRTIO_RING_F_EVENT_IDX))) { + if (enable) + vq->used->flags &= ~VRING_USED_F_NO_NOTIFY; + else + vq->used->flags |= VRING_USED_F_NO_NOTIFY; + } else { + if (enable) + vhost_avail_event(vq) = vq->last_avail_idx; + } } @@ -690,5 +696,5 @@ rte_vhost_enable_guest_notification(int vid, uint16_t queue_id, int enable) vhost_enable_notify_packed(dev, vq, enable); else - vhost_enable_notify_split(vq, enable); + vhost_enable_notify_split(dev, vq, enable); return 0; diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h index 760a09c0d..25ffd7614 100644 --- a/lib/librte_vhost/vhost.h +++ b/lib/librte_vhost/vhost.h @@ -649,4 +649,6 @@ vhost_iova_to_vva(struct virtio_net *dev, struct vhost_virtqueue *vq, } +#define vhost_avail_event(vr) \ + (*(volatile uint16_t*)&(vr)->used->ring[(vr)->size]) #define vhost_used_event(vr) \ (*(volatile uint16_t*)&(vr)->avail->ring[(vr)->size]) -- 2.19.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2018-11-20 17:53:08.164108481 +0000 +++ 0029-vhost-fix-vhost-interrupt-support.patch 2018-11-20 17:53:07.000000000 +0000 @@ -1,13 +1,14 @@ -From 77de7c781cb6dbbf11c00118946fb4e46347116f Mon Sep 17 00:00:00 2001 +From 97b28091a42d73c92fe2c6ec354559815e005fd0 Mon Sep 17 00:00:00 2001 From: Tiwei Bie Date: Wed, 5 Sep 2018 07:55:55 +0800 Subject: [PATCH] vhost: fix vhost interrupt support +[ upstream commit 77de7c781cb6dbbf11c00118946fb4e46347116f ] + When VIRTIO_RING_F_EVENT_IDX is negotiated, we need to update the avail event to enable the notification. Fixes: 3f8ff12821e4 ("vhost: support interrupt mode") -Cc: stable@dpdk.org Signed-off-by: Tiwei Bie Reviewed-by: Maxime Coquelin @@ -39,10 +40,10 @@ sources = files('fd_man.c', 'iotlb.c', 'socket.c', 'vdpa.c', 'vhost.c', 'vhost_user.c', diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c -index 91026b3e1..e62f4c594 100644 +index 3c9be10a0..88b1781d5 100644 --- a/lib/librte_vhost/vhost.c +++ b/lib/librte_vhost/vhost.c -@@ -648,10 +648,16 @@ rte_vhost_avail_entries(int vid, uint16_t queue_id) +@@ -647,10 +647,16 @@ rte_vhost_avail_entries(int vid, uint16_t queue_id) static inline void -vhost_enable_notify_split(struct vhost_virtqueue *vq, int enable) @@ -64,7 +65,7 @@ + } } -@@ -691,5 +697,5 @@ rte_vhost_enable_guest_notification(int vid, uint16_t queue_id, int enable) +@@ -690,5 +696,5 @@ rte_vhost_enable_guest_notification(int vid, uint16_t queue_id, int enable) vhost_enable_notify_packed(dev, vq, enable); else - vhost_enable_notify_split(vq, enable);