Spec requires a device reset during cleanup, so do it and avoid warn in virtio core. Signed-off-by: Jason Wang <jasowang at redhat.com> --- drivers/virtio/virtio_input.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/virtio/virtio_input.c b/drivers/virtio/virtio_input.c index 60e2a16..6222f9b 100644 --- a/drivers/virtio/virtio_input.c +++ b/drivers/virtio/virtio_input.c @@ -320,6 +320,7 @@ static void virtinput_remove(struct virtio_device *vdev) spin_unlock_irqrestore(&vi->lock, flags); input_unregister_device(vi->idev); + vdev->config->reset(vdev); vdev->config->del_vqs(vdev); kfree(vi); } -- 2.1.4
On Wed, Aug 05, 2015 at 03:20:18PM +0800, Jason Wang wrote:> Spec requires a device reset during cleanup, so do it and avoid warn > in virtio core. > > Signed-off-by: Jason Wang <jasowang at redhat.com>OK but now that I look at this driver, that's not enough. Need to also detach and free unused buffers, otherwise we leak memory in evt and sts queues.> --- > drivers/virtio/virtio_input.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/virtio/virtio_input.c b/drivers/virtio/virtio_input.c > index 60e2a16..6222f9b 100644 > --- a/drivers/virtio/virtio_input.c > +++ b/drivers/virtio/virtio_input.c > @@ -320,6 +320,7 @@ static void virtinput_remove(struct virtio_device *vdev) > spin_unlock_irqrestore(&vi->lock, flags); > > input_unregister_device(vi->idev); > + vdev->config->reset(vdev); > vdev->config->del_vqs(vdev); > kfree(vi); > } > -- > 2.1.4
On 08/05/2015 03:56 PM, Michael S. Tsirkin wrote:> On Wed, Aug 05, 2015 at 03:20:18PM +0800, Jason Wang wrote: >> > Spec requires a device reset during cleanup, so do it and avoid warn >> > in virtio core. >> > >> > Signed-off-by: Jason Wang <jasowang at redhat.com> > OK but now that I look at this driver, that's not enough. > > Need to also detach and free unused buffers, otherwise > we leak memory in evt and sts queues.Probably only sts. For evt queue, all buffer it used was an array embedded in virtio_input structure (vi->evts[])