aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEugenio Pérez <eperezma@redhat.com>2022-03-14 18:34:49 +0100
committerJason Wang <jasowang@redhat.com>2022-03-15 13:57:44 +0800
commit193d17be0b84cce87db4426622cd4e6b827cae2a (patch)
tree1b834015c8ef48efd5dcc5a11de3010d70e6011e /include
parent9376bde894e444ebe2d2ec236569b6e55faa4765 (diff)
downloadqemu-193d17be0b84cce87db4426622cd4e6b827cae2a.zip
qemu-193d17be0b84cce87db4426622cd4e6b827cae2a.tar.gz
qemu-193d17be0b84cce87db4426622cd4e6b827cae2a.tar.bz2
util: add iova_tree_find_iova
This function does the reverse operation of iova_tree_find: To look for a mapping that match a translated address so we can do the reverse. This have linear complexity instead of logarithmic, but it supports overlapping HVA. Future developments could reduce it. Signed-off-by: Eugenio Pérez <eperezma@redhat.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'include')
-rw-r--r--include/qemu/iova-tree.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/include/qemu/iova-tree.h b/include/qemu/iova-tree.h
index d066400..c938fb0 100644
--- a/include/qemu/iova-tree.h
+++ b/include/qemu/iova-tree.h
@@ -83,7 +83,7 @@ int iova_tree_remove(IOVATree *tree, const DMAMap *map);
* @tree: the iova tree to search from
* @map: the mapping to search
*
- * Search for a mapping in the iova tree that overlaps with the
+ * Search for a mapping in the iova tree that iova overlaps with the
* mapping range specified. Only the first found mapping will be
* returned.
*
@@ -96,6 +96,24 @@ int iova_tree_remove(IOVATree *tree, const DMAMap *map);
const DMAMap *iova_tree_find(const IOVATree *tree, const DMAMap *map);
/**
+ * iova_tree_find_iova:
+ *
+ * @tree: the iova tree to search from
+ * @map: the mapping to search
+ *
+ * Search for a mapping in the iova tree that translated_addr overlaps with the
+ * mapping range specified. Only the first found mapping will be
+ * returned.
+ *
+ * Return: DMAMap pointer if found, or NULL if not found. Note that
+ * the returned DMAMap pointer is maintained internally. User should
+ * only read the content but never modify or free the content. Also,
+ * user is responsible to make sure the pointer is valid (say, no
+ * concurrent deletion in progress).
+ */
+const DMAMap *iova_tree_find_iova(const IOVATree *tree, const DMAMap *map);
+
+/**
* iova_tree_find_address:
*
* @tree: the iova tree to search from