Thread (31 messages) 31 messages, 4 authors, 2011-12-07

Re: [PATCH v4 09/12] virtio: net: Add freeze, restore handlers to support S4

From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2011-12-07 11:44:22
Also in: lkml

On Wed, Dec 07, 2011 at 04:05:29PM +0530, Amit Shah wrote:
On (Wed) 07 Dec 2011 [12:28:24], Michael S. Tsirkin wrote:
quoted
On Wed, Dec 07, 2011 at 01:18:47AM +0530, Amit Shah wrote:
quoted
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 697a0fc..1378f3c 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -1151,6 +1151,38 @@ static void __devexit virtnet_remove(struct virtio_device *vdev)
 	free_netdev(vi->dev);
 }
 
+#ifdef CONFIG_PM
+static int virtnet_freeze(struct virtio_device *vdev)
+{
+	struct virtnet_info *vi = vdev->priv;
+
+	netif_device_detach(vi->dev);
+	if (netif_running(vi->dev))
+		napi_disable(&vi->napi);
+
Could refill_work still be running at this point?
Yes, it could.  So moving the cancel_delayed_work_sync() before
disabling napi would work fine?
No, because napi poll can schedule that.
Further, refill can reschedule itself.

It also looks like we have a bug in virtio net cleanup now:
cancel_delayed_work_sync is called after unregister, so
it will be calling napi API on an invalid device.
And, if it schedules itself it will run after device is gone.

I think we need some locking to fix this.
 Anything else that might similar treatment?

		Amit


-- 
MST
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help