Skip to content

Commit 574af67

Browse files
AkeKoomsin-IGELgregkh
authored andcommitted
virtio_net: avoid using netif_tx_disable() for serializing tx routine
[ Upstream commit 05c998b ] Commit 713a98d ("virtio-net: serialize tx routine during reset") introduces netif_tx_disable() after netif_device_detach() in order to avoid use-after-free of tx queues. However, there are two issues. 1) Its operation is redundant with netif_device_detach() in case the interface is running. 2) In case of the interface is not running before suspending and resuming, the tx does not get resumed by netif_device_attach(). This results in losing network connectivity. It is better to use netif_tx_lock_bh()/netif_tx_unlock_bh() instead for serializing tx routine during reset. This also preserves the symmetry of netif_device_detach() and netif_device_attach(). Fixes commit 713a98d ("virtio-net: serialize tx routine during reset") Signed-off-by: Ake Koomsin <ake@igel.co.jp> Acked-by: Jason Wang <jasowang@redhat.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent b522f27 commit 574af67

1 file changed

Lines changed: 4 additions & 1 deletion

File tree

drivers/net/virtio_net.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1872,8 +1872,9 @@ static void virtnet_freeze_down(struct virtio_device *vdev)
18721872
/* Make sure no work handler is accessing the device */
18731873
flush_work(&vi->config_work);
18741874

1875+
netif_tx_lock_bh(vi->dev);
18751876
netif_device_detach(vi->dev);
1876-
netif_tx_disable(vi->dev);
1877+
netif_tx_unlock_bh(vi->dev);
18771878
cancel_delayed_work_sync(&vi->refill);
18781879

18791880
if (netif_running(vi->dev)) {
@@ -1909,7 +1910,9 @@ static int virtnet_restore_up(struct virtio_device *vdev)
19091910
}
19101911
}
19111912

1913+
netif_tx_lock_bh(vi->dev);
19121914
netif_device_attach(vi->dev);
1915+
netif_tx_unlock_bh(vi->dev);
19131916
return err;
19141917
}
19151918

0 commit comments

Comments
 (0)