[PATCH] net: xen-netback: correctly restart Tx after a VM restore/migrate

Subsystems: networking drivers, the rest, xen network backend driver

STALE5491d

3 messages, 3 authors, 2011-10-03 · open the first message on its own page

[PATCH] net: xen-netback: correctly restart Tx after a VM restore/migrate

From: David Vrabel <hidden>
Date: 2011-09-30 16:37:51

If a VM is saved and restored (or migrated) the netback driver will no
longer process any Tx packets from the frontend.  xenvif_up() does not
schedule the processing of any pending Tx requests from the front end
because the carrier is off.  Without this initial kick the frontend
just adds Tx requests to the ring without raising an event (until the
ring is full).

This was caused by 47103041e91794acdbc6165da0ae288d844c820b (net:
xen-netback: convert to hw_features) which reordered the calls to
xenvif_up() and netif_carrier_on() in xenvif_connect().

Signed-off-by: David Vrabel <redacted>
Cc: Ian Campbell <redacted>
---
 drivers/net/xen-netback/interface.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
index 0ca86f9..1825629 100644
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
@@ -327,12 +327,12 @@ int xenvif_connect(struct xenvif *vif, unsigned long tx_ring_ref,
 	xenvif_get(vif);
 
 	rtnl_lock();
-	if (netif_running(vif->dev))
-		xenvif_up(vif);
 	if (!vif->can_sg && vif->dev->mtu > ETH_DATA_LEN)
 		dev_set_mtu(vif->dev, ETH_DATA_LEN);
 	netdev_update_features(vif->dev);
 	netif_carrier_on(vif->dev);
+	if (netif_running(vif->dev))
+		xenvif_up(vif);
 	rtnl_unlock();
 
 	return 0;
-- 
1.7.2.5

Re: [PATCH] net: xen-netback: correctly restart Tx after a VM restore/migrate

From: Ian Campbell <hidden>
Date: 2011-09-30 16:45:05

On Fri, 2011-09-30 at 17:37 +0100, David Vrabel wrote:
If a VM is saved and restored (or migrated) the netback driver will no
longer process any Tx packets from the frontend.  xenvif_up() does not
schedule the processing of any pending Tx requests from the front end
because the carrier is off.  Without this initial kick the frontend
just adds Tx requests to the ring without raising an event (until the
ring is full).

This was caused by 47103041e91794acdbc6165da0ae288d844c820b (net:
xen-netback: convert to hw_features) which reordered the calls to
xenvif_up() and netif_carrier_on() in xenvif_connect().
Ah, so the bit of that patch which moved "netif_carrier_on(vif->dev);"
should have actually moved the entire block
 	netif_carrier_on(vif->dev);
	if (netif_running(vif->dev))
		xenvif_up(vif);

Since it it is logically a single thing. Make sense. Thanks!
Signed-off-by: David Vrabel <redacted>
Acked-by: Ian Campbell <redacted>

Ian.
quoted hunk
---
 drivers/net/xen-netback/interface.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
index 0ca86f9..1825629 100644
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
@@ -327,12 +327,12 @@ int xenvif_connect(struct xenvif *vif, unsigned long tx_ring_ref,
 	xenvif_get(vif);
 
 	rtnl_lock();
-	if (netif_running(vif->dev))
-		xenvif_up(vif);
 	if (!vif->can_sg && vif->dev->mtu > ETH_DATA_LEN)
 		dev_set_mtu(vif->dev, ETH_DATA_LEN);
 	netdev_update_features(vif->dev);
 	netif_carrier_on(vif->dev);
+	if (netif_running(vif->dev))
+		xenvif_up(vif);
 	rtnl_unlock();
 
 	return 0;

Re: [PATCH] net: xen-netback: correctly restart Tx after a VM restore/migrate

From: David Miller <davem@davemloft.net>
Date: 2011-10-03 18:16:15

From: Ian Campbell <redacted>
Date: Fri, 30 Sep 2011 17:45:05 +0100
On Fri, 2011-09-30 at 17:37 +0100, David Vrabel wrote:
quoted
If a VM is saved and restored (or migrated) the netback driver will no
longer process any Tx packets from the frontend.  xenvif_up() does not
schedule the processing of any pending Tx requests from the front end
because the carrier is off.  Without this initial kick the frontend
just adds Tx requests to the ring without raising an event (until the
ring is full).

This was caused by 47103041e91794acdbc6165da0ae288d844c820b (net:
xen-netback: convert to hw_features) which reordered the calls to
xenvif_up() and netif_carrier_on() in xenvif_connect().
Ah, so the bit of that patch which moved "netif_carrier_on(vif->dev);"
should have actually moved the entire block
 	netif_carrier_on(vif->dev);
	if (netif_running(vif->dev))
		xenvif_up(vif);

Since it it is logically a single thing. Make sense. Thanks!
quoted
Signed-off-by: David Vrabel <redacted>
Acked-by: Ian Campbell <redacted>
Applied, thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help