diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2013-05-06 10:46:11 +0200 |
|---|---|---|
| committer | Paolo Bonzini <pbonzini@redhat.com> | 2013-07-04 17:42:45 +0200 |
| commit | dfde4e6e1a868f60033ece0590b1f75e6c57fa16 (patch) | |
| tree | a84c1cddd96c6dc60fd7a5d35949b4fcaf9a32ed /hw/misc/vfio.c | |
| parent | 3ce10901ca8da9142dcdcde198fda1a4c290934c (diff) | |
| download | focaccia-qemu-dfde4e6e1a868f60033ece0590b1f75e6c57fa16.tar.gz focaccia-qemu-dfde4e6e1a868f60033ece0590b1f75e6c57fa16.zip | |
memory: add ref/unref calls
Add ref/unref calls at the following places: - places where memory regions are stashed by a listener and used outside the BQL (including in Xen or KVM). - memory_region_find callsites - creation of aliases and containers (only the aliased/contained region gets a reference to avoid loops) - around calls to del_subregion/add_subregion, where the region could disappear after the first call Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'hw/misc/vfio.c')
| -rw-r--r-- | hw/misc/vfio.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c index e2e957d6f6..675bbfc97a 100644 --- a/hw/misc/vfio.c +++ b/hw/misc/vfio.c @@ -1969,6 +1969,7 @@ static void vfio_listener_region_add(MemoryListener *listener, DPRINTF("region_add %"HWADDR_PRIx" - %"HWADDR_PRIx" [%p]\n", iova, end - 1, vaddr); + memory_region_ref(section->mr); ret = vfio_dma_map(container, iova, end - iova, vaddr, section->readonly); if (ret) { error_report("vfio_dma_map(%p, 0x%"HWADDR_PRIx", " @@ -2010,6 +2011,7 @@ static void vfio_listener_region_del(MemoryListener *listener, iova, end - 1); ret = vfio_dma_unmap(container, iova, end - iova); + memory_region_unref(section->mr); if (ret) { error_report("vfio_dma_unmap(%p, 0x%"HWADDR_PRIx", " "0x%"HWADDR_PRIx") = %d (%m)", |