On Thu, Sep 15, 2011 at 10:28:52AM -0500, Anthony Liguori wrote: > 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. > Yes, "canonical" is a link to a bus. Can you give an example of a device that sits on multiple buses?
-- Gleb.