Add a helper to fetch machine containers. Add some sanity check around. Signed-off-by: Peter Xu <pet...@redhat.com> --- include/hw/qdev-core.h | 10 ++++++++++ hw/core/qdev.c | 17 +++++++++++++++++ 2 files changed, 27 insertions(+)
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h index 5be9844412..38edfb1b54 100644 --- a/include/hw/qdev-core.h +++ b/include/hw/qdev-core.h @@ -996,6 +996,16 @@ const char *qdev_fw_name(DeviceState *dev); void qdev_assert_realized_properly(void); Object *qdev_get_machine(void); +/** + * machine_get_container: + * @name: The name of container to lookup + * + * Get a container of the machine (QOM path "/machine/XXX"). + * + * Returns: the machine container object. + */ +Object *machine_get_container(const char *name); + /** * qdev_get_human_name() - Return a human-readable name for a device * @dev: The device. Must be a valid and non-NULL pointer. diff --git a/hw/core/qdev.c b/hw/core/qdev.c index c869c47a27..6cb4fe4691 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -829,6 +829,23 @@ Object *qdev_get_machine(void) return dev; } +Object *machine_get_container(const char *name) +{ + Object *container, *machine; + + /* + * NOTE: nobody should call this _before_ machine is created. If it + * happens, it's a programming error. + */ + machine = qdev_get_machine(); + assert(machine); + + container = object_resolve_path_component(machine, name); + assert(object_dynamic_cast(container, TYPE_CONTAINER)); + + return container; +} + char *qdev_get_human_name(DeviceState *dev) { g_assert(dev != NULL); -- 2.45.0