On Thu, 9 Jul 2026, Markus Armbruster wrote:
A QOM object must be the child of exactly one parent.  This defines the
QOM composition tree.  The link from parent to child is a property of
the parent, and therefore has a name that is unique within its parent.
An object's canonical QOM path is these names on the path from root to
object in the QOM composition tree separated by '/'.

For devices:

* If a device is plugged in with -device / device_add, and it has an ID,
 we make it a child of /machine/peripheral/ with name ID.  If it
 doesn't have an ID, we make it a child of /machine/peripheral-anon/
 with name device[N], where N counts up from zero.  The canonical QOM
 path /machine/peripheral/ID is stable.  The canonical QOM path
 /machine/peripheral-anon/device[N] isn't: it depends on the number of
 devices already there.

* If a device is part of another device, it should be its child.  The
 child's canonical QOM path is the parent's plus '/CHILD-NAME'.  Stable
 as long as the parent's path and the child name are.

* "Should" because we have a lot of code that fails to pick the parent.
 When such a device gets realized, we make it a child of
 /machine/unattached/ orphanage with name device[N], where N counts up
 from zero.  The canonical QOM path /machine/unattached/device[N]
 depends on the number of children already in the orphanage, which
 makes it unstable.

 Letting code get away with not picking a parent was a mistake.  I
 guess it "saved" us some thinking about what's part of what when
 converting existing devices to QOM.  In other words, it enabled sloppy
 hardware modeling.  We've been "saving" thinking ever since.

 I want /machine/unattached/ to be empty.  If an onboard device isn't
 part of another device, put it into /machine/ with a sensible name.

The last time this came up I've asked a few questions but did not get an answer:

1. What's the use of the QOM composition tree? I never needed it and apart from being able to admire it in info qom-tree I don't know if it's used for anything. For a long time I did not even know about info qom-tree because I only needed info qtree and info mtree and rarely if ever need to look at the qom-tree. If it has no real use I'm happy to not think about it.

2. What is a QOM parent? There were proposals to parent devices to their bus if they have any, that's what qtree shows anyway. If it's something else it should be better defined somewhere.

Without getting answers for these questions I don't think I'm able to fix the machines I maintain.

Regards,
BALATON Zoltan

Reply via email to