On Fri, Sep 25, 2020 at 12:32:26PM +0100, Jonathan Cameron wrote: > I don't think we can. This is doing the same operation as > is done for memoryless cpu nodes in the init_cpu_to_node() call above > so it would make little sense from a code flow point of view, even if > it were possible. However it isn't possible as far as I can see. > > It is called after init_cpu_to_node() because... > * A GI node may also be a CPU node and / or a Memory Node, but we only > have to do anything extra if it has neither of these. > Easiest way to do that is use the same logic init_cpu_to_node() > does and rely on ordering wrt to the other two types of nodes that > have already been handled. We could have could just call it at the > end of init_cpu_to_node() but I'd not be happy doing so without renaming > that function and then we'd end up with a horrible name like > init_cpu_to_node_and_gi() as they are rather different things. > > It needs to happen before use is made of the node_data which is allocated > in init_gi_nodes() / init_memoryless_node() / alloc_node_data() Let's put the gist of this requirement in the comment above init_gi_nodes() for future reference. ... > It might be possible to allocate the zonelists for this special case later > in the boot flow, but it seems like we would be adding a lot of complexity > to avoid a single function call. Nah, probably not worth the hassle. > How about this? > > +/* > + * A node may exist which has one or more Generic Initiators but no > + * CPUs and no memory. > + * When this function is called, any nodes containing either memory > + * and/or CPUs will already be online and there is no need to do > + * anything extra, even if they also contain one or more Generic > + * Initiators. > + */ Yes, along with the above gist. Thx! -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette