On Fri, Jan 26, 2024 at 03:53:53PM -0800, Oreoluwa Babatunde wrote: > Call early_fdt_scan_reserved_mem() in place of > early_init_fdt_scan_reserved_mem() to carry out the first stage of the > reserved memory processing only. > > The early_fdt_scan_reserved_mem() function is used to scan through the > DT and mark all the reserved memory regions as reserved or nomap as > needed, as well as allocate the memory required by the > dynamically-placed > reserved memory regions. > > The second stage of the reserved memory processing is done by > fdt_init_reserved_mem(). This function is used to store the information > of the statically-placed reserved memory nodes in the reserved_mem > array as well as call the region specific initialization function on all > the stored reserved memory regions. > > The call to fdt_init_reserved_mem() is placed right after > early_fdt_scan_reserved_mem() because memblock allocated memory should > already be writable at this point. > > Signed-off-by: Oreoluwa Babatunde <quic_obabatun@xxxxxxxxxxx> > --- > arch/sh/boards/of-generic.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/arch/sh/boards/of-generic.c b/arch/sh/boards/of-generic.c > index f7f3e618e85b..7bec409f077c 100644 > --- a/arch/sh/boards/of-generic.c > +++ b/arch/sh/boards/of-generic.c > @@ -8,6 +8,7 @@ > #include <linux/of.h> > #include <linux/of_clk.h> > #include <linux/of_fdt.h> > +#include <linux/of_reserved_mem.h> > #include <linux/clocksource.h> > #include <linux/irqchip.h> > #include <asm/machvec.h> > @@ -110,7 +111,8 @@ static int noopi(void) > static void __init sh_of_mem_reserve(void) > { > early_init_fdt_reserve_self(); > - early_init_fdt_scan_reserved_mem(); > + early_fdt_scan_reserved_mem(); > + fdt_init_reserved_mem(); Looking at the sh code, there's an existing problem with the order of init. This is called from paging_init() and is done after unflattening and copying the DT. That means the kernel could freely allocate memory for the DT in a reserved region. Rob