Hello,
I'd like to use bootmem to reserve large chunks of RAM (at a particular physical
address; for Au1200 MAE, CIM and framebuffer, and later Au1300 OpenGL block)
but it seems that it can't be done: Doing __alloc_bootmem() in
plat_mem_setup() is
too early, while an arch_initcall() is too late because by then the
slab allocator is
already up and handing out random addresses and/or refusing allocations larger
than a few MBytes.
Is there another callback I could use which would allow me to use bootmem (short
of abusing plat_smp_setup)?
Would a separate callback like this be an acceptable solution?
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c
@@ -487,6 +487,10 @@ static void __init arch_mem_init(char **cmdline_p)
}
bootmem_init();
+
+ if (plat_bootmem_init)
+ plat_bootmem_init();
+
sparse_init();
paging_init();
}
Thanks,
Manuel Lauss