On 09/15/2011 09:25 AM, Gleb Natapov wrote:
On Thu, Sep 15, 2011 at 04:14:45PM +0200, Paolo Bonzini wrote:
On 09/15/2011 03:57 PM, Anthony Liguori wrote:
void generate_tree(Device *node)
{
if (IS_PCI_BUS(node)) {
for (i = 0; i< 32; i++) {
generate_tree(lookup_device(get_property(node, "slot[%d]", i)));
}
} else if (IS_ISA_BUS(node)) {
....
} else {
// leaf node, generate path segment
}
}
There are certainly ways to walk the graph generically (by coloring or
following the composition paths) but that won't give you the desired
ordering.
It seems easier to go backwards from the target device.
That what we do in qdev.
Each device most likely will have a canonical parent link, and
together they will give the OF path.
Yeah, this canonical parent link should be marked somehow.
There is no canonical parent link. A device may have multiple (more or less
equivalent) parents.
What should be treated as the "canonical" link depends on what you're trying to
do. In the case of OF, you want to treat the bus as a parent. If a device
happens to sit on multiple buses, I'm not really sure what you do.
Regards,
Anthony Liguori
--
Gleb.