qemu/hw/virtio
Stefan Hajnoczi 4b7f91ed02 virtio: zero vq->inuse in virtio_reset()
vq->inuse must be zeroed upon device reset like most other virtqueue
fields.

In theory, virtio_reset() just needs assert(vq->inuse == 0) since
devices must clean up in-flight requests during reset (requests cannot
not be leaked!).

In practice, it is difficult to achieve vq->inuse == 0 across reset
because balloon, blk, 9p, etc implement various different strategies for
cleaning up requests.  Most devices call g_free(elem) directly without
telling virtio.c that the VirtQueueElement is cleaned up.  Therefore
vq->inuse is not decremented during reset.

This patch zeroes vq->inuse and trusts that devices are not leaking
VirtQueueElements across reset.

I will send a follow-up series that refactors request life-cycle across
all devices and converts vq->inuse = 0 into assert(vq->inuse == 0) but
this more invasive approach is not appropriate for stable trees.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Cc: qemu-stable <qemu-stable@nongnu.org>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Ladi Prosek <lprosek@redhat.com>
2016-09-09 20:58:34 +03:00
..
Makefile.objs vring: remove 2016-02-25 13:14:19 +02:00
trace-events trace-events: fix first line comment in trace-events 2016-08-12 10:36:01 +01:00
vhost-backend.c Use #include "..." for our own headers, <...> for others 2016-07-12 16:19:16 +02:00
vhost-user.c Revert "vhost-user: Attempt to fix a race with set_mem_table." 2016-08-15 15:12:21 +01:00
vhost.c vhost: do not update last avail idx on get_vring_base() failure 2016-07-29 05:47:17 +03:00
virtio-balloon.c virtio-balloon: Wrap in vmstate 2016-07-21 20:44:20 +03:00
virtio-bus.c virtio: Tell the user what went wrong when event_notifier_init failed 2016-09-09 20:58:34 +03:00
virtio-mmio.c virtio-mmio: format transport base address in BusClass.get_dev_path 2016-07-14 16:51:36 +01:00
virtio-pci.c virtio-pci: reduce modern_mem_bar size 2016-09-09 20:58:34 +03:00
virtio-pci.h virtio-pci: reduce modern_mem_bar size 2016-09-09 20:58:34 +03:00
virtio-rng.c virtio-rng: Wrap in vmstate 2016-07-21 20:44:20 +03:00
virtio.c virtio: zero vq->inuse in virtio_reset() 2016-09-09 20:58:34 +03:00