[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 3/5] qom: object_child_foreach_recursive_type()
From: |
David Hildenbrand |
Subject: |
Re: [PATCH v2 3/5] qom: object_child_foreach_recursive_type() |
Date: |
Thu, 28 Oct 2021 09:06:29 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.1.0 |
On 28.10.21 06:31, Peter Xu wrote:
> Add this sister helper besides object_child_foreach_recursive() to loop over
> child objects only if the object can be casted to a specific type.
>
> Suggested-by: Michael S. Tsirkin <mst@redhat.com>
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
> include/qom/object.h | 20 ++++++++++++++++++++
> qom/object.c | 27 +++++++++++++++++++++++++++
> 2 files changed, 47 insertions(+)
>
> diff --git a/include/qom/object.h b/include/qom/object.h
> index faae0d841f..355277db40 100644
> --- a/include/qom/object.h
> +++ b/include/qom/object.h
> @@ -1926,6 +1926,26 @@ int object_child_foreach(Object *obj, int (*fn)(Object
> *child, void *opaque),
> int object_child_foreach_recursive(Object *obj,
> int (*fn)(Object *child, void *opaque),
> void *opaque);
> +
> +/**
> + * object_child_foreach_recursive_type:
> + * @obj: the object whose children will be navigated
> + * @type: the typename string to scan
> + * @fn: the iterator function to be called
> + * @opaque: an opaque value that will be passed to the iterator
> + *
> + * This is a special version of object_child_foreach_recursive() so that we
> + * only call the fn() if the child can be casted to the @typename specified.
> + * Please refer to the comments above object_child_foreach_recursive() for
> + * more details.
> + *
> + * Returns: The last value returned by @fn, or 0 if there is no child.
> + */
> +int object_child_foreach_recursive_type(Object *obj,
> + const char *typename,
> + int (*fn)(Object *child, void
> *opaque),
> + void *opaque);
> +
> /**
> * container_get:
> * @root: root of the #path, e.g., object_get_root()
> diff --git a/qom/object.c b/qom/object.c
> index 6be710bc40..d25ca09b1d 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -1134,6 +1134,33 @@ int object_child_foreach_recursive(Object *obj,
> return do_object_child_foreach(obj, fn, opaque, true);
> }
>
> +typedef struct {
> + const char *typename;
> + int (*fn)(Object *child, void *opaque);
> + void *opaque;
> +} ObjectTypeArgs;
> +
> +static int object_child_hook(Object *child, void *opaque)
> +{
> + ObjectTypeArgs *args = opaque;
> +
> + if (object_dynamic_cast(child, args->typename)) {
> + return args->fn(child, args->opaque);
> + }
> +
> + return 0;
> +}
> +
> +int object_child_foreach_recursive_type(Object *obj,
> + const char *typename,
> + int (*fn)(Object *child, void
> *opaque),
> + void *opaque)
> +{
> + ObjectTypeArgs args = { .typename = typename, .fn = fn, .opaque = opaque
> };
> +
> + return object_child_foreach_recursive(obj, object_child_hook, &args);
> +}
> +
> static void object_class_get_list_tramp(ObjectClass *klass, void *opaque)
> {
> GSList **list = opaque;
>
Reviewed-by: David Hildenbrand <david@redhat.com>
--
Thanks,
David / dhildenb
- [PATCH v2 0/5] pci/iommu: Fail early if vfio-pci detected before vIOMMU, Peter Xu, 2021/10/28
- [PATCH v2 1/5] pci: Define pci_bus_dev_fn/pci_bus_fn/pci_bus_ret_fn, Peter Xu, 2021/10/28
- [PATCH v2 2/5] pci: Export pci_for_each_device_under_bus*(), Peter Xu, 2021/10/28
- [PATCH v2 3/5] qom: object_child_foreach_recursive_type(), Peter Xu, 2021/10/28
- Re: [PATCH v2 3/5] qom: object_child_foreach_recursive_type(),
David Hildenbrand <=
- [PATCH v2 4/5] pci: Add pci_for_each_root_bus(), Peter Xu, 2021/10/28
- [PATCH v2 5/5] pc/q35: Add pre-plug hook for x86-iommu, Peter Xu, 2021/10/28