On Fri, Nov 09, 2018 at 10:54:26AM +0800, 陈华才 wrote: > Hi, > > It seems the patch below can solve many problems after switched to NO_BOOTMEM, because the memory allocation behavior is more similar as before. Yes, this should work. Still, simplifying the max_low_pfn evaluation has it's value regardless. > diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c > index 070234b..7a449d9 100644 > --- a/arch/mips/kernel/setup.c > +++ b/arch/mips/kernel/setup.c > @@ -839,6 +839,7 @@ static void __init arch_mem_init(char **cmdline_p) > > /* call board setup routine */ > plat_mem_setup(); > + memblock_set_bottom_up(true); > > /* > * Make sure all kernel memory is in the maps. The "UP" and > diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c > index 0f852e1..15e103c 100644 > --- a/arch/mips/kernel/traps.c > +++ b/arch/mips/kernel/traps.c > @@ -2260,10 +2260,8 @@ void __init trap_init(void) > unsigned long size = 0x200 + VECTORSPACING*64; > phys_addr_t ebase_pa; > > - memblock_set_bottom_up(true); > ebase = (unsigned long) > memblock_alloc_from(size, 1 << fls(size), 0); > - memblock_set_bottom_up(false); > > /* > * Try to ensure ebase resides in KSeg0 if possible. > @@ -2307,6 +2305,7 @@ void __init trap_init(void) > if (board_ebase_setup) > board_ebase_setup(); > per_cpu_trap_init(true); > + memblock_set_bottom_up(false); > > /* > * Copy the generic exception handlers to their final destination. > > > ------------------ Original ------------------ > From: "Mike Rapoport"<rppt@xxxxxxxxxxxxx>; > Date: Fri, Nov 9, 2018 02:01 AM > To: "Thomas Bogendoerfer"<tbogendoerfer@xxxxxxx>; > Cc: "Ralf Baechle"<ralf@xxxxxxxxxxxxxx>; "Paul Burton"<paul.burton@xxxxxxxx>; "James Hogan"<jhogan@xxxxxxxxxx>; "Huacai Chen"<chenhc@xxxxxxxxxx>; "linux-mips"<linux-mips@xxxxxxxxxxxxxx>; "linux-kernel"<linux-kernel@xxxxxxxxxxxxxxx>; "rppt"<rppt@xxxxxxxxxxxxxxxxxx>; > Subject: Re: [[PATCH]] mips: Fix switch to NO_BOOTMEM for SGI-IP27/loongons3 NUMA > > > > On November 8, 2018 6:52:17 PM GMT+02:00, Thomas Bogendoerfer <tbogendoerfer@xxxxxxx> wrote: > >On Thu, 8 Nov 2018 18:18:23 +0200 > >Mike Rapoport <rppt@xxxxxxxxxxxxx> wrote: > > > >> On Thu, Nov 08, 2018 at 03:44:28PM +0100, Thomas Bogendoerfer wrote: > >> > Commit bcec54bf3118 ("mips: switch to NO_BOOTMEM") broke SGI-IP27 > >> > and NUMA enabled loongson3 by doing memblock_set_current_limit() > >> > before max_low_pfn has been evaluated. Both platforms need to do > >the > >> > memblock_set_current_limit() in platform specific code. For > >> > consistency the call to memblock_set_current_limit() is moved > >> > to the common bootmem_init(), where max_low_pfn is calculated > >> > for non NUMA enabled platforms. > >> [..] > >> > >> As for SGI-IP27, the initialization of max_low_pfn as late as in > >> paging_init() seems to be broken because it's value is used in > >> arch_mem_init() and in finalize_initrd() anyway. > > > >well, the patch is tested on real hardware and the first caller of > >a memblock_alloc* function is in a function called by > >free_area_init_nodes(). > > Then, apparently, I've missed something else. > The Onyx2 I worked on is dead for a couple of years now ;-) > > >> AFAIU, both platforms set max_low_pfn to last available pfn, so it > >seems we > >> can simply do > >> > >> max_low_pfn = PFN_PHYS(memblock_end_of_DRAM()) > >> > > Should have been PHYS_PFN, sorry. > > >> in the prom_meminit() function for both platforms and drop the loop > >> evaluating max_low_pfn in paging_init(). > > > >sounds like a better plan. I'll prepare a new patch. > > > >Thomas. > > -- > Sent from my Android device with K-9 Mail. Please excuse my brevity. -- Sincerely yours, Mike.