]> git.ipfire.org Git - thirdparty/qemu.git/commit
vhost: Release memory references on cleanup
authorAlex Williamson <alex.williamson@redhat.com>
Thu, 7 Sep 2017 20:27:09 +0000 (14:27 -0600)
committerMichael Roth <mdroth@linux.vnet.ibm.com>
Fri, 15 Sep 2017 00:31:09 +0000 (19:31 -0500)
commitb24304ca131ecf0eb029ee2c39d46fd4a9ab8901
tree58b59eedd4148b166ae1cf8c1ff148f3bd49dd48
parentc6841b112e995a0635db59fe25da9a308c595b7a
vhost: Release memory references on cleanup

vhost registers a MemoryListener where it adds and removes references
to MemoryRegions as the MemoryRegionSections pass through.  The
region_add callback is invoked for each existing section when the
MemoryListener is registered, but unregistering the MemoryListener
performs no reciprocal region_del callback.  It's therefore the
owner of the MemoryListener's responsibility to cleanup any persistent
changes, such as these memory references, after unregistering.

The consequence of this bug is that if we have both a vhost device
and a vfio device, the vhost device will reference any mmap'd MMIO of
the vfio device via this MemoryListener.  If the vhost device is then
removed, those references remain outstanding.  If we then attempt to
remove the vfio device, it never gets finalized and the only way to
release the kernel file descriptors is to terminate the QEMU process.

Fixes: dfde4e6e1a86 ("memory: add ref/unref calls")
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-stable@nongnu.org # v1.6.0+
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
(cherry picked from commit ee4c112846a0f2ac4fe5601918b0a2642ac8e2ed)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
hw/virtio/vhost.c