[dpdk-stable] patch 'net/virtio-user: fix status management' has been queued to stable release 19.11.4

luca.boccassi at gmail.com luca.boccassi at gmail.com
Thu Aug 6 11:53:57 CEST 2020


Hi,

FYI, your patch has been queued to stable release 19.11.4

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 08/08/20. 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.

Thanks.

Luca Boccassi

---
>From 17e196bd4b4b8296a85c5c8ab4c5d9ba5ad2658d Mon Sep 17 00:00:00 2001
From: Xiao Wang <xiao.w.wang at intel.com>
Date: Tue, 28 Jul 2020 14:52:12 +0800
Subject: [PATCH] net/virtio-user: fix status management

[ upstream commit d0131e49c7fca45f4111eedab71f6dbd73bacd61 ]

Apart from the virtio status, there should be also a network related
status for link status management, current implementation mixes up these
two statuses.

One issue caused by this mixup is when virtio-user running in server mode
and vhost as a client connects to it, a RARP packet will be generated by
virtio-user due to VIRTIO_NET_S_ANNOUNCE bit is detected in the "status"
in interrupt handler.

VIRTIO_NET_S_LINK_UP and VIRTIO_NET_S_ANNOUNCE should be managed by a
separated field. This patch adds a "net_status" field for this purpose.

Fixes: e9efa4d93821 ("net/virtio-user: add new virtual PCI driver")

Signed-off-by: Adrian Moreno <amorenoz at redhat.com>
Signed-off-by: Xiao Wang <xiao.w.wang at intel.com>
Reviewed-by: Chenbo Xia <chenbo.xia at intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin at redhat.com>
---
 drivers/net/virtio/virtio_user/virtio_user_dev.h |  1 +
 drivers/net/virtio/virtio_user_ethdev.c          | 10 +++++-----
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.h b/drivers/net/virtio/virtio_user/virtio_user_dev.h
index 3b6b6065a..8937124d9 100644
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.h
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.h
@@ -41,6 +41,7 @@ struct virtio_user_dev {
 	uint64_t	frontend_features; /* enabled frontend features */
 	uint64_t	unsupported_features; /* unsupported features mask */
 	uint8_t		status;
+	uint16_t	net_status;
 	uint16_t	port_id;
 	uint8_t		mac_addr[RTE_ETHER_ADDR_LEN];
 	char		path[PATH_MAX];
diff --git a/drivers/net/virtio/virtio_user_ethdev.c b/drivers/net/virtio/virtio_user_ethdev.c
index e2cbd2478..4a35fa1c9 100644
--- a/drivers/net/virtio/virtio_user_ethdev.c
+++ b/drivers/net/virtio/virtio_user_ethdev.c
@@ -185,7 +185,7 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
 			}
 			r = recv(dev->vhostfd, buf, 128, MSG_PEEK);
 			if (r == 0 || (r < 0 && errno != EAGAIN)) {
-				dev->status &= (~VIRTIO_NET_S_LINK_UP);
+				dev->net_status &= (~VIRTIO_NET_S_LINK_UP);
 				PMD_DRV_LOG(ERR, "virtio-user port %u is down",
 					    hw->port_id);
 
@@ -197,7 +197,7 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
 						  virtio_user_delayed_handler,
 						  (void *)hw);
 			} else {
-				dev->status |= VIRTIO_NET_S_LINK_UP;
+				dev->net_status |= VIRTIO_NET_S_LINK_UP;
 			}
 			if (fcntl(dev->vhostfd, F_SETFL,
 					flags & ~O_NONBLOCK) == -1) {
@@ -205,12 +205,12 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
 				return;
 			}
 		} else if (dev->is_server) {
-			dev->status &= (~VIRTIO_NET_S_LINK_UP);
+			dev->net_status &= (~VIRTIO_NET_S_LINK_UP);
 			if (virtio_user_server_reconnect(dev) >= 0)
-				dev->status |= VIRTIO_NET_S_LINK_UP;
+				dev->net_status |= VIRTIO_NET_S_LINK_UP;
 		}
 
-		*(uint16_t *)dst = dev->status;
+		*(uint16_t *)dst = dev->net_status;
 	}
 
 	if (offset == offsetof(struct virtio_net_config, max_virtqueue_pairs))
-- 
2.20.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-08-06 10:53:16.928258847 +0100
+++ 0029-net-virtio-user-fix-status-management.patch	2020-08-06 10:53:15.816597718 +0100
@@ -1,8 +1,10 @@
-From d0131e49c7fca45f4111eedab71f6dbd73bacd61 Mon Sep 17 00:00:00 2001
+From 17e196bd4b4b8296a85c5c8ab4c5d9ba5ad2658d Mon Sep 17 00:00:00 2001
 From: Xiao Wang <xiao.w.wang at intel.com>
 Date: Tue, 28 Jul 2020 14:52:12 +0800
 Subject: [PATCH] net/virtio-user: fix status management
 
+[ upstream commit d0131e49c7fca45f4111eedab71f6dbd73bacd61 ]
+
 Apart from the virtio status, there should be also a network related
 status for link status management, current implementation mixes up these
 two statuses.
@@ -16,7 +18,6 @@
 separated field. This patch adds a "net_status" field for this purpose.
 
 Fixes: e9efa4d93821 ("net/virtio-user: add new virtual PCI driver")
-Cc: stable at dpdk.org
 
 Signed-off-by: Adrian Moreno <amorenoz at redhat.com>
 Signed-off-by: Xiao Wang <xiao.w.wang at intel.com>
@@ -28,22 +29,22 @@
  2 files changed, 6 insertions(+), 5 deletions(-)
 
 diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.h b/drivers/net/virtio/virtio_user/virtio_user_dev.h
-index 56e638f8a..554174e81 100644
+index 3b6b6065a..8937124d9 100644
 --- a/drivers/net/virtio/virtio_user/virtio_user_dev.h
 +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.h
-@@ -44,6 +44,7 @@ struct virtio_user_dev {
- 					    * (Vhost-user only)
- 					    */
+@@ -41,6 +41,7 @@ struct virtio_user_dev {
+ 	uint64_t	frontend_features; /* enabled frontend features */
+ 	uint64_t	unsupported_features; /* unsupported features mask */
  	uint8_t		status;
 +	uint16_t	net_status;
  	uint16_t	port_id;
  	uint8_t		mac_addr[RTE_ETHER_ADDR_LEN];
  	char		path[PATH_MAX];
 diff --git a/drivers/net/virtio/virtio_user_ethdev.c b/drivers/net/virtio/virtio_user_ethdev.c
-index e51425c4f..6003f6d50 100644
+index e2cbd2478..4a35fa1c9 100644
 --- a/drivers/net/virtio/virtio_user_ethdev.c
 +++ b/drivers/net/virtio/virtio_user_ethdev.c
-@@ -205,7 +205,7 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
+@@ -185,7 +185,7 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
  			}
  			r = recv(dev->vhostfd, buf, 128, MSG_PEEK);
  			if (r == 0 || (r < 0 && errno != EAGAIN)) {
@@ -52,7 +53,7 @@
  				PMD_DRV_LOG(ERR, "virtio-user port %u is down",
  					    hw->port_id);
  
-@@ -217,7 +217,7 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
+@@ -197,7 +197,7 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
  						  virtio_user_delayed_handler,
  						  (void *)hw);
  			} else {
@@ -61,7 +62,7 @@
  			}
  			if (fcntl(dev->vhostfd, F_SETFL,
  					flags & ~O_NONBLOCK) == -1) {
-@@ -225,12 +225,12 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
+@@ -205,12 +205,12 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
  				return;
  			}
  		} else if (dev->is_server) {


More information about the stable mailing list