diff options
author | Eugenio Pérez <eperezma@redhat.com> | 2022-03-14 18:34:49 +0100 |
---|---|---|
committer | Jason Wang <jasowang@redhat.com> | 2022-03-15 13:57:44 +0800 |
commit | 193d17be0b84cce87db4426622cd4e6b827cae2a (patch) | |
tree | 1b834015c8ef48efd5dcc5a11de3010d70e6011e /include | |
parent | 9376bde894e444ebe2d2ec236569b6e55faa4765 (diff) | |
download | qemu-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.h | 20 |
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 |