patch 'net/virtio-user: fix socket non-blocking mode' has been queued to stable release 21.11.2

luca.boccassi at gmail.com luca.boccassi at gmail.com
Wed Jul 6 22:34:46 CEST 2022


Hi,

FYI, your patch has been queued to stable release 21.11.2

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/08/22. 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/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/19457a68eab5f145a21844c1edcf559a69dc7540

Thanks.

Luca Boccassi

---
>From 19457a68eab5f145a21844c1edcf559a69dc7540 Mon Sep 17 00:00:00 2001
From: Yuan Wang <yuanx.wang at intel.com>
Date: Fri, 17 Jun 2022 10:42:29 +0800
Subject: [PATCH] net/virtio-user: fix socket non-blocking mode

[ upstream commit 41f9a1757ffc010cc3debaad9a56af8ad88d0c6d ]

The virtio-user initialization requires unix socket to receive backend
messages in block mode. However, vhost_user_update_link_state() sets
the same socket to nonblocking via fcntl, which affects all threads.
Enabling the rxq interrupt can causes both of these behaviors to occur
concurrently, with the result that the initialization may fail
because no messages are received in nonblocking socket.

Thread 1:
virtio_init_device()
--> virtio_user_start_device()
	--> vhost_user_set_memory_table()
		--> vhost_user_check_reply_ack()

Thread 2:
virtio_interrupt_handler()
--> vhost_user_update_link_state()

Fix that by replacing O_NONBLOCK with the recv per-call option
MSG_DONTWAIT.

Fixes: ef53b6030039 ("net/virtio-user: support LSC")

Signed-off-by: Yuan Wang <yuanx.wang at intel.com>
Acked-by: Stephen Hemminger <stephen at networkplumber.org>
Reviewed-by: Chenbo Xia <chenbo.xia at intel.com>
---
 drivers/net/virtio/virtio_user/vhost_user.c | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/drivers/net/virtio/virtio_user/vhost_user.c b/drivers/net/virtio/virtio_user/vhost_user.c
index 0a39393c45..77820bf967 100644
--- a/drivers/net/virtio/virtio_user/vhost_user.c
+++ b/drivers/net/virtio/virtio_user/vhost_user.c
@@ -942,15 +942,8 @@ vhost_user_update_link_state(struct virtio_user_dev *dev)
 
 	if (data->vhostfd >= 0) {
 		int r;
-		int flags;
 
-		flags = fcntl(data->vhostfd, F_GETFL);
-		if (fcntl(data->vhostfd, F_SETFL, flags | O_NONBLOCK) == -1) {
-			PMD_DRV_LOG(ERR, "error setting O_NONBLOCK flag");
-			return -1;
-		}
-
-		r = recv(data->vhostfd, buf, 128, MSG_PEEK);
+		r = recv(data->vhostfd, buf, 128, MSG_PEEK | MSG_DONTWAIT);
 		if (r == 0 || (r < 0 && errno != EAGAIN)) {
 			dev->net_status &= (~VIRTIO_NET_S_LINK_UP);
 			PMD_DRV_LOG(ERR, "virtio-user port %u is down", dev->hw.port_id);
@@ -965,12 +958,6 @@ vhost_user_update_link_state(struct virtio_user_dev *dev)
 		} else {
 			dev->net_status |= VIRTIO_NET_S_LINK_UP;
 		}
-
-		if (fcntl(data->vhostfd, F_SETFL,
-					flags & ~O_NONBLOCK) == -1) {
-			PMD_DRV_LOG(ERR, "error clearing O_NONBLOCK flag");
-			return -1;
-		}
 	} else if (dev->is_server) {
 		dev->net_status &= (~VIRTIO_NET_S_LINK_UP);
 		if (virtio_user_dev_server_reconnect(dev) >= 0)
-- 
2.34.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2022-07-06 21:07:53.952055233 +0100
+++ 0011-net-virtio-user-fix-socket-non-blocking-mode.patch	2022-07-06 21:07:53.539518631 +0100
@@ -1 +1 @@
-From 41f9a1757ffc010cc3debaad9a56af8ad88d0c6d Mon Sep 17 00:00:00 2001
+From 19457a68eab5f145a21844c1edcf559a69dc7540 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 41f9a1757ffc010cc3debaad9a56af8ad88d0c6d ]
+
@@ -27 +28,0 @@
-Cc: stable at dpdk.org
@@ -37 +38 @@
-index 7d1749114d..198bd63d3c 100644
+index 0a39393c45..77820bf967 100644
@@ -40 +41 @@
-@@ -940,15 +940,8 @@ vhost_user_update_link_state(struct virtio_user_dev *dev)
+@@ -942,15 +942,8 @@ vhost_user_update_link_state(struct virtio_user_dev *dev)
@@ -57 +58 @@
-@@ -963,12 +956,6 @@ vhost_user_update_link_state(struct virtio_user_dev *dev)
+@@ -965,12 +958,6 @@ vhost_user_update_link_state(struct virtio_user_dev *dev)


More information about the stable mailing list