[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 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.

> This way we could have a simple node blacklist based on the compatible
> node all in a single function.



_______________________________________________
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®.