The guest may have overlapped memory regions, where different GPA leads to the same HVA. This causes a problem when overlapped regions (different GPA but same translated HVA) exists in the tree, as looking them by HVA will return them twice.
To solve this, track GPA in the DMA entry that acs as unique identifiers to the maps. When the map needs to be removed, iova tree is able to find the right one. Users that does not go to this extra layer of indirection can use the iova tree as usual, with id = 0. This was found by Si-Wei Liu <si-wei....@oracle.com>, but I'm having a hard time to reproduce the issue. This has been tested only without overlapping maps. If it works with overlapping maps, it will be intergrated in the main series. Comments are welcome. Thanks! Eugenio Pérez (2): iova_tree: add an id member to DMAMap vdpa: identify aliased maps in iova_tree hw/virtio/vhost-vdpa.c | 2 ++ include/qemu/iova-tree.h | 5 +++-- util/iova-tree.c | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) -- 2.44.0