Re: [PATCH v2] sh: Call paging_init() earlier in the init sequence

From: Oreoluwa Babatunde
Date: Mon Apr 29 2024 - 12:29:10 EST



On 4/29/2024 2:03 AM, John Paul Adrian Glaubitz wrote:
> Hi Oreoluwa,
>
> On Tue, 2024-04-23 at 16:31 -0700, Oreoluwa Babatunde wrote:
>> The unflatten_device_tree() function contains a call to
>> memblock_alloc(). This is a problem because this allocation is done
>> before any of the reserved memory is set aside in paging_init().
>> This means that there is a possibility for memblock to allocate from
>> any of the memory regions that are supposed to be set aside as reserved.
>>
>> Hence, move the call to paging_init() to be earlier in the init
>> sequence so that the reserved memory regions are set aside before any
>> allocations are done using memblock.
>>
>> Reviewed-by: Rob Herring <robh@xxxxxxxxxx>
>> Signed-off-by: Oreoluwa Babatunde <quic_obabatun@xxxxxxxxxxx>
>> ---
>> v2:
>> - Added Rob Herrings Reviewed-by.
>> - cc Andrew Morton to assist with merging this for sh architecture.
>> Similar change made for loongarch and openrisc in v1 have already
>> been merged.
> Could you link the changes for references so I can have a look?
Hi John,

Here are links to the corresponding changes on Loongarch and Openrisc.

- Loongarch:
https://lore.kernel.org/all/20240218151403.2206980-1-chenhuacai@xxxxxxxxxxx/

- Openrisc:
https://lore.kernel.org/all/1707524971-146908-3-git-send-email-quic_obabatun@xxxxxxxxxxx/


Thank you!
Oreoluwa
>
>> v1:
>> https://lore.kernel.org/all/1707524971-146908-4-git-send-email-quic_obabatun@xxxxxxxxxxx/
>>
>> arch/sh/kernel/setup.c | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c
>> index 620e5cf8ae1e..98c8473e130d 100644
>> --- a/arch/sh/kernel/setup.c
>> +++ b/arch/sh/kernel/setup.c
>> @@ -322,6 +322,8 @@ void __init setup_arch(char **cmdline_p)
>> /* Let earlyprintk output early console messages */
>> sh_early_platform_driver_probe("earlyprintk", 1, 1);
>>
>> + paging_init();
>> +
>> #ifdef CONFIG_OF_EARLY_FLATTREE
>> #ifdef CONFIG_USE_BUILTIN_DTB
>> unflatten_and_copy_device_tree();
>> @@ -330,8 +332,6 @@ void __init setup_arch(char **cmdline_p)
>> #endif
>> #endif
>>
>> - paging_init();
>> -
>> /* Perform the machine specific initialisation */
>> if (likely(sh_mv.mv_setup))
>> sh_mv.mv_setup(cmdline_p);
> Reviewed-by: John Paul Adrian Glaubitz <glaubitz@xxxxxxxxxxxxxxxxxxx>
>
> Adrian
>