On 04.11.2013, at 11:55, Benjamin Herrenschmidt <b...@kernel.crashing.org> wrote:
> On Mon, 2013-11-04 at 11:44 +0100, Alexander Graf wrote: >> On 01.11.2013, at 11:21, Alexey Kardashevskiy <a...@ozlabs.ru> wrote: >> >>> SLOF gets really confused if RTAS/device-tree and everything else >>> what SLOF can use is not in the very first block of the very first >>> memory node. >>> >>> This makes sure that the RMA area is where SLOF expects it to be. >>> >>> Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org> >>> Cc: Nikunj A Dadhania <nik...@linux.vnet.ibm.com> >>> Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru> >>> --- >>> hw/ppc/spapr.c | 8 +++++++- >>> 1 file changed, 7 insertions(+), 1 deletion(-) >>> >>> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c >>> index 09dc635..09a5d94 100644 >>> --- a/hw/ppc/spapr.c >>> +++ b/hw/ppc/spapr.c >>> @@ -1113,7 +1113,7 @@ static void ppc_spapr_init(QEMUMachineInitArgs *args) >>> int i; >>> MemoryRegion *sysmem = get_system_memory(); >>> MemoryRegion *ram = g_new(MemoryRegion, 1); >>> - hwaddr rma_alloc_size; >>> + hwaddr rma_alloc_size, node0_size; >>> uint32_t initrd_base = 0; >>> long kernel_size = 0, initrd_size = 0; >>> long load_limit, rtas_limit, fw_size; >>> @@ -1154,6 +1154,12 @@ static void ppc_spapr_init(QEMUMachineInitArgs *args) >>> spapr->rma_size = MIN(spapr->rma_size, 0x10000000); >>> } >>> } >>> + /* >>> + * SLOF gets confused if RMA resides not in the first block >>> + * of the first memory node so let's fix it. >>> + */ >>> + node0_size = (nb_numa_nodes > 1) ? node_mem[0] : ram_size; >>> + spapr->rma_size = MIN(spapr->rma_size, node0_size); >> >> So if I create a NUMA node of 4MB that will be my RMA? That sounds pretty >> broken, especially on 970. >> >> Why does SLOF have any issues with NUMA memory nodes? It can just ignore >> them, no? > > Because the only way SLOF knows about the RMA is by using the first > "reg" entry of the first memory node and that's *all* SLOF knows about. > > If we start putting things like the DT, SLOF itself, etc... outside of > that region, it will crash. > > So we "constrain" things to the rma that way. > > Creating 4M nodes makes no sense anyway So why don't we just use the "limit VRMA to 256MB" code always and error out of node0 is smaller? I don't think SLOF can run with less than 256MB anyway. Alex