diff options
| author | Stefan Hajnoczi | 2016-09-19 15:28:03 +0200 |
|---|---|---|
| committer | Michael S. Tsirkin | 2016-10-10 00:16:58 +0200 |
| commit | 2640d2a5ff08978d67bd87518d05d6b499488c9a (patch) | |
| tree | 88a07dc902c862587b0576bb7ebf0b9df12929a7 /include | |
| parent | tests: acpi tables expected blobs update (diff) | |
| download | qemu-2640d2a5ff08978d67bd87518d05d6b499488c9a.tar.gz qemu-2640d2a5ff08978d67bd87518d05d6b499488c9a.tar.xz qemu-2640d2a5ff08978d67bd87518d05d6b499488c9a.zip | |
virtio: add virtio_detach_element()
During device reset or similar situations a VirtQueueElement needs to be
freed without pushing it onto the used ring or rewinding the virtqueue.
Extract a new function to do this.
Later patches add virtio_detach_element() calls to existing device so
that scatter-gather lists are unmapped and vq->inuse goes back to zero
during device reset. Currently some devices don't bother and simply
call g_free(elem) which is not a clean way to throw away a
VirtQueueElement.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Acked-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Ladi Prosek <lprosek@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/hw/virtio/virtio.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index 888c8debe6..e25ec4f0b5 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -155,6 +155,8 @@ void *virtqueue_alloc_element(size_t sz, unsigned out_num, unsigned in_num); void virtqueue_push(VirtQueue *vq, const VirtQueueElement *elem, unsigned int len); void virtqueue_flush(VirtQueue *vq, unsigned int count); +void virtqueue_detach_element(VirtQueue *vq, const VirtQueueElement *elem, + unsigned int len); void virtqueue_discard(VirtQueue *vq, const VirtQueueElement *elem, unsigned int len); bool virtqueue_rewind(VirtQueue *vq, unsigned int num); |
