Currently, qdev_get_machine() has a slightly misuse of container_get(), as the helper says "get a container" but in reality the goal is to get the machine object.
Note that it _may_ get a container (at "/machine") in our current unit test of test-qdev-global-props.c, but it's probably unexpected and worked by accident.. Switch to an explicit object_resolve_path_component(), with a side benefit that qdev_get_machine() can happen a lot, and we don't need to split the string ("/machine") every time. This also paves way for making the helper container_get() never try to return a non-container at all. Signed-off-by: Peter Xu <pet...@redhat.com> --- hw/core/qdev.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/core/qdev.c b/hw/core/qdev.c index eff297e584..e828088c58 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -825,7 +825,13 @@ Object *qdev_get_machine(void) static Object *dev; if (dev == NULL) { - dev = container_get(object_get_root(), "/machine"); + /* + * NOTE: when the machine is not yet created, this helper will + * also keep the cached object untouched and return NULL. The next + * invoke of the helper will try to look for the machine again. + * It'll only cache the pointer when it's found the first time. + */ + dev = object_resolve_path_component(object_get_root(), "machine"); } return dev; -- 2.45.0