On 16.06.2014 [17:53:49 +1000], Alexey Kardashevskiy wrote: > Current QEMU does not support memoryless NUMA nodes. > This prepares SPAPR for that. > > This moves 2 calls of spapr_populate_memory_node() into > the existing loop which handles nodes other than than > the first one. > > Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru> > --- > hw/ppc/spapr.c | 31 +++++++++++-------------------- > 1 file changed, 11 insertions(+), 20 deletions(-) > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index cb3a10a..666b676 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -689,28 +689,13 @@ static void spapr_populate_memory_node(void *fdt, int > nodeid, hwaddr start, > > static int spapr_populate_memory(sPAPREnvironment *spapr, void *fdt) > { > - hwaddr node0_size, mem_start, node_size; > + hwaddr mem_start, node_size; > int i; > > - /* memory node(s) */ > - if (nb_numa_nodes > 1 && node_mem[0] < ram_size) { > - node0_size = node_mem[0]; > - } else { > - node0_size = ram_size; > - } > - > - /* RMA */ > - spapr_populate_memory_node(fdt, 0, 0, spapr->rma_size); > - > - /* RAM: Node 0 */ > - if (node0_size > spapr->rma_size) { > - spapr_populate_memory_node(fdt, 0, spapr->rma_size, > - node0_size - spapr->rma_size); > - } > - > - /* RAM: Node 1 and beyond */ > - mem_start = node0_size; > - for (i = 1; i < nb_numa_nodes; i++) { > + for (i = 0, mem_start = 0; i < nb_numa_nodes; ++i) { > + if (!node_mem[i]) { > + continue; > + }
Doesn't this skip memoryless nodes? What actually puts the memoryless node in the device-tree? And if you were to put them in, wouldn't spapr_populate_memory_node() fail because we'd be creating two nodes with memory@XXX where XXX is the same (starting address) for both? Thanks, Nish