virtio_console: free buffers after reset
authorMichael S. Tsirkin <mst@redhat.com>
Fri, 20 Apr 2018 17:24:23 +0000 (20:24 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 1 May 2018 19:58:12 +0000 (12:58 -0700)
commit6b1c41a0f7183702abb7a104c6c7e196ad69a6b3
tree6c01d61d5d950ea7deecce688ff12d858bcb22e5
parent4217a339b37dd8b0c001ec54f85ea84eab7f4feb
virtio_console: free buffers after reset

commit a7a69ec0d8e4a58be7db88d33cbfa2912807bb2b upstream.

Console driver is out of spec. The spec says:
A driver MUST NOT decrement the available idx on a live
virtqueue (ie. there is no way to “unexpose” buffers).
and it does exactly that by trying to detach unused buffers
without doing a device reset first.

Defer detaching the buffers until device unplug.

Of course this means we might get an interrupt for
a vq without an attached port now. Handle that by
discarding the consumed buffer.

Reported-by: Tiwei Bie <tiwei.bie@intel.com>
Fixes: b3258ff1d6 ("virtio: Decrement avail idx on buffer detach")
Cc: stable@vger.kernel.org
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/char/virtio_console.c