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: > > On Wed, Dec 07, 2011 at 01:18:47AM +0530, Amit Shah wrote: > > > 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 _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization