[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 9/9] xen: strip /chosen/modules/module@<N>/* from dom0 device tree



On Mon, 2012-12-10 at 13:10 +0000, Stefano Stabellini wrote:
> On Mon, 10 Dec 2012, Ian Campbell wrote:
> > On Fri, 2012-12-07 at 17:35 +0000, Stefano Stabellini wrote:
> > > On Thu, 6 Dec 2012, Ian Campbell wrote:
> > > > These nodes are used by Xen to find the initial modules.
> > > > 
> > > > Only drop the "xen,multiboot-module" compatible nodes in case someone
> > > > else has a similar idea.
> > > > 
> > > > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> > > > ---
> > > > v4 - /chosen/modules/modules@N not /chosen/module@N
> > > > v3 - use a helper to filter out DT elements which are not for dom0.
> > > >      Better than an ad-hoc break in the middle of a loop.
> > > > ---
> > > >  xen/arch/arm/domain_build.c |   40 
> > > > ++++++++++++++++++++++++++++++++++++++--
> > > >  1 files changed, 38 insertions(+), 2 deletions(-)
> > > > 
> > > > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> > > > index 7a964f7..27e02e4 100644
> > > > --- a/xen/arch/arm/domain_build.c
> > > > +++ b/xen/arch/arm/domain_build.c
> > > > @@ -172,6 +172,40 @@ static int write_properties(struct domain *d, 
> > > > struct kernel_info *kinfo,
> > > >      return prop;
> > > >  }
> > > >  
> > > > +/* Returns the next node in fdt (starting from offset) which should be
> > > > + * passed through to dom0.
> > > > + */
> > > > +static int fdt_next_dom0_node(const void *fdt, int node,
> > > > +                              int *depth_out,
> > > > +                              int parents[DEVICE_TREE_MAX_DEPTH])
> > > > +{
> > > > +    int depth = *depth_out;
> > > > +
> > > > +    while ( (node = fdt_next_node(fdt, node, &depth)) &&
> > > > +            node >= 0 && depth >= 0 )
> > > > +    {
> > > > +        if ( depth >= DEVICE_TREE_MAX_DEPTH )
> > > > +            break;
> > > > +
> > > > +        parents[depth] = node;
> > > > +
> > > > +        /* Skip /chosen/modules/module@<N>/ and all subnodes */
> > > > +        if ( depth >= 3 &&
> > > > +             device_tree_node_matches(fdt, parents[1], "chosen") &&
> > > > +             device_tree_node_matches(fdt, parents[2], "modules") &&
> > > > +             device_tree_node_matches(fdt, parents[3], "module") &&
> > > > +             fdt_node_check_compatible(fdt, parents[3],
> > > > +                                       "xen,multiboot-module" ) == 0 )
> > > > +            continue;
> > > > +
> > > > +        /* We've arrived at a node which dom0 is interested in. */
> > > > +        break;
> > > > +    }
> > > > +
> > > > +    *depth_out = depth;
> > > > +    return node;
> > > > +}
> > > 
> > > Can't we just skip the node if it is compatible with
> > > "xen,multiboot-module", no matter where it lives?  This should simplify
> > > this function greatly and you wouldn't need the parents parameter
> > > anymore.
> > 
> > As well as my previous query about the meaning of the tree structure I
> > think that even if we could get away with this in this particular case
> > we are going to need this sort of infrastructure once we start doing
> > proper filtering of dom0 vs xen nodes in the tree.
> 
> Maybe. However in that case we could just have a generic
> filter_device_tree_nodes function that takes an array of strings
> (compatible string? device tree paths? I would go for both in a struct,
> but the former would probably suffice), and filter the DT based on
> those. That would be very useful in the long run. This is very ad-hoc
> for the /chosen/modules/module@<N> path.

This function is precisely a filtering function as you are suggesting.
The only difference is that it does the filtering in code instead of
using a string/struct. There is nothing ad-hoc about it it just happens
that the only user right now is the module@N stuff.

I think you'd find that the code to filter based on a struct containing
a path would be more complicated and be a superset of this function,
since you would have to check the path against the same sort of parent
array.

Ian.


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.