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
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