[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 07/18] util: Extend iova_tree_foreach() to take data argument
From: |
Avihai Horon |
Subject: |
[PATCH 07/18] util: Extend iova_tree_foreach() to take data argument |
Date: |
Thu, 26 Jan 2023 20:49:37 +0200 |
From: Joao Martins <joao.m.martins@oracle.com>
Extend iova_tree_foreach() to take data argument to be passed and used
by the iterator.
While at it, fix a documentation error:
The documentation says iova_tree_foreach() returns a value even though
it is a void function.
Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
---
include/qemu/iova-tree.h | 8 +++++---
util/iova-tree.c | 18 ++++++++++++++----
2 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/include/qemu/iova-tree.h b/include/qemu/iova-tree.h
index 7bb80783ce..1332dce014 100644
--- a/include/qemu/iova-tree.h
+++ b/include/qemu/iova-tree.h
@@ -38,7 +38,7 @@ typedef struct DMAMap {
hwaddr size; /* Inclusive */
IOMMUAccessFlags perm;
} QEMU_PACKED DMAMap;
-typedef gboolean (*iova_tree_iterator)(DMAMap *map);
+typedef gboolean (*iova_tree_iterator)(DMAMap *map, gpointer data);
/**
* iova_tree_new:
@@ -129,12 +129,14 @@ const DMAMap *iova_tree_find_address(const IOVATree
*tree, hwaddr iova);
*
* @tree: the iova tree to iterate on
* @iterator: the interator for the mappings, return true to stop
+ * @data: data to be passed to the iterator
*
* Iterate over the iova tree.
*
- * Return: 1 if found any overlap, 0 if not, <0 if error.
+ * Return: None.
*/
-void iova_tree_foreach(IOVATree *tree, iova_tree_iterator iterator);
+void iova_tree_foreach(IOVATree *tree, iova_tree_iterator iterator,
+ gpointer data);
/**
* iova_tree_alloc_map:
diff --git a/util/iova-tree.c b/util/iova-tree.c
index 6141a6229b..9845427b86 100644
--- a/util/iova-tree.c
+++ b/util/iova-tree.c
@@ -42,6 +42,11 @@ typedef struct IOVATreeFindIOVAArgs {
const DMAMap *result;
} IOVATreeFindIOVAArgs;
+typedef struct IOVATreeIterator {
+ iova_tree_iterator fn;
+ gpointer data;
+} IOVATreeIterator;
+
/**
* Iterate args to the next hole
*
@@ -151,17 +156,22 @@ int iova_tree_insert(IOVATree *tree, const DMAMap *map)
static gboolean iova_tree_traverse(gpointer key, gpointer value,
gpointer data)
{
- iova_tree_iterator iterator = data;
+ IOVATreeIterator *iterator = data;
DMAMap *map = key;
g_assert(key == value);
- return iterator(map);
+ return iterator->fn(map, iterator->data);
}
-void iova_tree_foreach(IOVATree *tree, iova_tree_iterator iterator)
+void iova_tree_foreach(IOVATree *tree, iova_tree_iterator iterator,
+ gpointer data)
{
- g_tree_foreach(tree->tree, iova_tree_traverse, iterator);
+ IOVATreeIterator arg = {
+ .fn = iterator,
+ .data = data,
+ };
+ g_tree_foreach(tree->tree, iova_tree_traverse, &arg);
}
void iova_tree_remove(IOVATree *tree, DMAMap map)
--
2.26.3
- [PATCH 00/18] vfio: Add migration pre-copy support and device dirty tracking, Avihai Horon, 2023/01/26
- [PATCH 02/18] vfio/common: Fix error reporting in vfio_get_dirty_bitmap(), Avihai Horon, 2023/01/26
- [PATCH 01/18] vfio/migration: Add VFIO migration pre-copy support, Avihai Horon, 2023/01/26
- [PATCH 03/18] vfio/common: Fix wrong %m usages, Avihai Horon, 2023/01/26
- [PATCH 04/18] vfio/common: Abort migration if dirty log start/stop/sync fails, Avihai Horon, 2023/01/26
- [PATCH 07/18] util: Extend iova_tree_foreach() to take data argument,
Avihai Horon <=
- [PATCH 05/18] vfio/common: Add VFIOBitmap and (de)alloc functions, Avihai Horon, 2023/01/26
- [PATCH 08/18] vfio/common: Record DMA mapped IOVA ranges, Avihai Horon, 2023/01/26
- [PATCH 09/18] vfio/common: Add device dirty page tracking start/stop, Avihai Horon, 2023/01/26
- [PATCH 06/18] util: Add iova_tree_nnodes(), Avihai Horon, 2023/01/26
- [PATCH 17/18] vfio/migration: Query device dirty page tracking support, Avihai Horon, 2023/01/26
- [PATCH 11/18] vfio/common: Add device dirty page bitmap sync, Avihai Horon, 2023/01/26
- [PATCH 13/18] memory/iommu: Add IOMMU_ATTR_MAX_IOVA attribute, Avihai Horon, 2023/01/26