[dpdk-stable] patch 'vhost: fix NUMA reallocation with multi-queue' has been queued to stable release 20.11.3

luca.boccassi at gmail.com luca.boccassi at gmail.com
Mon Jul 12 15:04:49 CEST 2021


Hi,

FYI, your patch has been queued to stable release 20.11.3

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 07/14/21. 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. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable

This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/aa1a815db57c92b6de275df1237463da5bc44fab

Thanks.

Luca Boccassi

---
>From aa1a815db57c92b6de275df1237463da5bc44fab Mon Sep 17 00:00:00 2001
From: Maxime Coquelin <maxime.coquelin at redhat.com>
Date: Tue, 29 Jun 2021 18:11:30 +0200
Subject: [PATCH] vhost: fix NUMA reallocation with multi-queue

[ upstream commit 6305dfeff4c4644f1091a5e270cdbf989f48e15e ]

Since the Vhost-user device initialization has been reworked,
enabling the application to start using the device as soon as
the first queue pair is ready, NUMA reallocation no more
happened on queue pairs other than the first one since
numa_realloc() was returning early if the device was running.

This patch fixes this issue by reallocating the device metadata
only if the device is running. For the virtqueues, a vring state
change notification is sent to notify the application of its
disablement. Since the callback is supposed to be blocking, it
is safe to reallocate it afterwards.

Fixes: d0fcc38f5fa4 ("vhost: improve device readiness notifications")

Signed-off-by: Maxime Coquelin <maxime.coquelin at redhat.com>
Reviewed-by: Chenbo Xia <chenbo.xia at intel.com>
---
 lib/librte_vhost/vhost_user.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
index fcb78ad4ea..61ed221395 100644
--- a/lib/librte_vhost/vhost_user.c
+++ b/lib/librte_vhost/vhost_user.c
@@ -489,12 +489,16 @@ numa_realloc(struct virtio_net *dev, int index)
 	struct batch_copy_elem *new_batch_copy_elems;
 	int ret;
 
-	if (dev->flags & VIRTIO_DEV_RUNNING)
-		return dev;
-
 	old_dev = dev;
 	vq = old_vq = dev->virtqueue[index];
 
+	/*
+	 * If VQ is ready, it is too late to reallocate, it certainly already
+	 * happened anyway on VHOST_USER_SET_VRING_ADRR.
+	 */
+	if (vq->ready)
+		return dev;
+
 	ret = get_mempolicy(&newnode, NULL, 0, old_vq->desc,
 			    MPOL_F_NODE | MPOL_F_ADDR);
 
@@ -549,6 +553,9 @@ numa_realloc(struct virtio_net *dev, int index)
 		rte_free(old_vq);
 	}
 
+	if (dev->flags & VIRTIO_DEV_RUNNING)
+		goto out;
+
 	/* check if we need to reallocate dev */
 	ret = get_mempolicy(&oldnode, NULL, 0, old_dev,
 			    MPOL_F_NODE | MPOL_F_ADDR);
-- 
2.30.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2021-07-12 13:41:39.472468789 +0100
+++ 0054-vhost-fix-NUMA-reallocation-with-multi-queue.patch	2021-07-12 13:41:36.442121611 +0100
@@ -1 +1 @@
-From 6305dfeff4c4644f1091a5e270cdbf989f48e15e Mon Sep 17 00:00:00 2001
+From aa1a815db57c92b6de275df1237463da5bc44fab Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 6305dfeff4c4644f1091a5e270cdbf989f48e15e ]
+
@@ -19 +20,0 @@
-Cc: stable at dpdk.org
@@ -24 +25 @@
- lib/vhost/vhost_user.c | 13 ++++++++++---
+ lib/librte_vhost/vhost_user.c | 13 ++++++++++---
@@ -27,5 +28,5 @@
-diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c
-index 82adf80fe5..51b96a0716 100644
---- a/lib/vhost/vhost_user.c
-+++ b/lib/vhost/vhost_user.c
-@@ -488,12 +488,16 @@ numa_realloc(struct virtio_net *dev, int index)
+diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
+index fcb78ad4ea..61ed221395 100644
+--- a/lib/librte_vhost/vhost_user.c
++++ b/lib/librte_vhost/vhost_user.c
+@@ -489,12 +489,16 @@ numa_realloc(struct virtio_net *dev, int index)
@@ -51 +52 @@
-@@ -558,6 +562,9 @@ numa_realloc(struct virtio_net *dev, int index)
+@@ -549,6 +553,9 @@ numa_realloc(struct virtio_net *dev, int index)


More information about the stable mailing list