mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-05-02 18:17:50 -04:00
xen/netfront: stop tx queues during live migration
The tx queues are not stopped during the live migration. As a result, the
ndo_start_xmit() may access netfront_info->queues which is freed by
talk_to_netback()->xennet_destroy_queues().
This patch is to netif_device_detach() at the beginning of xen-netfront
resuming, and netif_device_attach() at the end of resuming.
CPU A CPU B
talk_to_netback()
-> if (info->queues)
xennet_destroy_queues(info);
to free netfront_info->queues
xennet_start_xmit()
to access netfront_info->queues
-> err = xennet_create_queues(info, &num_queues);
The idea is borrowed from virtio-net.
Cc: Joe Jin <joe.jin@oracle.com>
Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
0c57eeecc5
commit
042b2046d0
@@ -1730,6 +1730,10 @@ static int netfront_resume(struct xenbus_device *dev)
|
||||
|
||||
dev_dbg(&dev->dev, "%s\n", dev->nodename);
|
||||
|
||||
netif_tx_lock_bh(info->netdev);
|
||||
netif_device_detach(info->netdev);
|
||||
netif_tx_unlock_bh(info->netdev);
|
||||
|
||||
xennet_disconnect_backend(info);
|
||||
return 0;
|
||||
}
|
||||
@@ -2349,6 +2353,10 @@ static int xennet_connect(struct net_device *dev)
|
||||
* domain a kick because we've probably just requeued some
|
||||
* packets.
|
||||
*/
|
||||
netif_tx_lock_bh(np->netdev);
|
||||
netif_device_attach(np->netdev);
|
||||
netif_tx_unlock_bh(np->netdev);
|
||||
|
||||
netif_carrier_on(np->netdev);
|
||||
for (j = 0; j < num_queues; ++j) {
|
||||
queue = &np->queues[j];
|
||||
|
||||
Reference in New Issue
Block a user