diff mbox series

[2/2] MIPS: loongson64: set nid for reserved memblock region

Message ID 20240119040240.392442-3-huangpei@loongson.cn (mailing list archive)
State Superseded
Headers show
Series [1/2] MIPS: reserve exception vector space ONLY ONCE | expand

Commit Message

Huang Pei Jan. 19, 2024, 4:02 a.m. UTC
Commit 61167ad5fecd("mm: pass nid to reserve_bootmem_region()) reveals
that reserved memblock regions have no valid node id set, just set it
right since loongson64 firmware makes it clear in memory layout info.

This works around booting failure on 3A1000+ since commit 61167ad5fecd
("mm: pass nid to reserve_bootmem_region()) under
CONFIG_DEFERRED_STRUCT_PAGE_INIT.

Signed-off-by: Huang Pei <huangpei@loongson.cn>
---
 arch/mips/loongson64/init.c | 2 ++
 arch/mips/loongson64/numa.c | 2 ++
 2 files changed, 4 insertions(+)

Comments

Jiaxun Yang Jan. 19, 2024, 10:05 a.m. UTC | #1
在 2024/1/19 04:02, Huang Pei 写道:
> Commit 61167ad5fecd("mm: pass nid to reserve_bootmem_region()) reveals
> that reserved memblock regions have no valid node id set, just set it
> right since loongson64 firmware makes it clear in memory layout info.
>
> This works around booting failure on 3A1000+ since commit 61167ad5fecd
> ("mm: pass nid to reserve_bootmem_region()) under
> CONFIG_DEFERRED_STRUCT_PAGE_INIT.

This should be done at MIPS arch level I guess.

Thanks
- Jiaxun

>
> Signed-off-by: Huang Pei <huangpei@loongson.cn>
> ---
>   arch/mips/loongson64/init.c | 2 ++
>   arch/mips/loongson64/numa.c | 2 ++
>   2 files changed, 4 insertions(+)
>
> diff --git a/arch/mips/loongson64/init.c b/arch/mips/loongson64/init.c
> index f25caa6aa9d3..000ba91c0886 100644
> --- a/arch/mips/loongson64/init.c
> +++ b/arch/mips/loongson64/init.c
> @@ -103,6 +103,8 @@ void __init szmem(unsigned int node)
>   	if (loongson_sysconf.vgabios_addr)
>   		memblock_reserve(virt_to_phys((void *)loongson_sysconf.vgabios_addr),
>   				SZ_256K);
> +	/* set nid for reserved memory */
> +	memblock_set_node((u64)node << 44, (u64)(node+1) << 44, &memblock.reserved, node);
>   }
>   
>   #ifndef CONFIG_NUMA
> diff --git a/arch/mips/loongson64/numa.c b/arch/mips/loongson64/numa.c
> index 8f61e93c0c5b..6345e096c532 100644
> --- a/arch/mips/loongson64/numa.c
> +++ b/arch/mips/loongson64/numa.c
> @@ -132,6 +132,8 @@ static void __init node_mem_init(unsigned int node)
>   
>   		/* Reserve pfn range 0~node[0]->node_start_pfn */
>   		memblock_reserve(0, PAGE_SIZE * start_pfn);
> +		/* set nid for reserved memory on node 0 */
> +		memblock_set_node(0, (u64)1 << 44, &memblock.reserved, 1);
>   	}
>   }
>
Huang Pei Jan. 21, 2024, 2:14 a.m. UTC | #2
On Fri, Jan 19, 2024 at 10:05:39AM +0000, Jiaxun Yang wrote:
> 
> 
> 在 2024/1/19 04:02, Huang Pei 写道:
> > Commit 61167ad5fecd("mm: pass nid to reserve_bootmem_region()) reveals
> > that reserved memblock regions have no valid node id set, just set it
> > right since loongson64 firmware makes it clear in memory layout info.
> > 
> > This works around booting failure on 3A1000+ since commit 61167ad5fecd
> > ("mm: pass nid to reserve_bootmem_region()) under
> > CONFIG_DEFERRED_STRUCT_PAGE_INIT.
> 
> This should be done at MIPS arch level I guess.
You mean the real fix or the set nid for the reserved memblock region?

+ the real fix is [1](see old mail).

I do not think MIPS arch needs it:

+ This ONLY matters on NUMA, most of MIPS platforms is UMA.

+ MM does not care about the nid of reserved memblock region provided by 
arch/platform, nor it provide "memblock_reserved_node" like
"memblock_add_node". Loongson64 knows about nid of reserved region and the
regular distribution of physical memory bewtween nodes, that is why it can
be done by simple "memblock_set_node" and I add it.

> 
> Thanks
> - Jiaxun
> 
> > 
> > Signed-off-by: Huang Pei <huangpei@loongson.cn>
> > ---
> >   arch/mips/loongson64/init.c | 2 ++
> >   arch/mips/loongson64/numa.c | 2 ++
> >   2 files changed, 4 insertions(+)
> > 
> > diff --git a/arch/mips/loongson64/init.c b/arch/mips/loongson64/init.c
> > index f25caa6aa9d3..000ba91c0886 100644
> > --- a/arch/mips/loongson64/init.c
> > +++ b/arch/mips/loongson64/init.c
> > @@ -103,6 +103,8 @@ void __init szmem(unsigned int node)
> >   	if (loongson_sysconf.vgabios_addr)
> >   		memblock_reserve(virt_to_phys((void *)loongson_sysconf.vgabios_addr),
> >   				SZ_256K);
> > +	/* set nid for reserved memory */
> > +	memblock_set_node((u64)node << 44, (u64)(node+1) << 44, &memblock.reserved, node);
> >   }
> >   #ifndef CONFIG_NUMA
> > diff --git a/arch/mips/loongson64/numa.c b/arch/mips/loongson64/numa.c
> > index 8f61e93c0c5b..6345e096c532 100644
> > --- a/arch/mips/loongson64/numa.c
> > +++ b/arch/mips/loongson64/numa.c
> > @@ -132,6 +132,8 @@ static void __init node_mem_init(unsigned int node)
> >   		/* Reserve pfn range 0~node[0]->node_start_pfn */
> >   		memblock_reserve(0, PAGE_SIZE * start_pfn);
> > +		/* set nid for reserved memory on node 0 */
> > +		memblock_set_node(0, (u64)1 << 44, &memblock.reserved, 1);
> >   	}
> >   }
> 
> -- 
> ---
> Jiaxun Yang
Jiaxun Yang Jan. 21, 2024, 10:35 a.m. UTC | #3
在2024年1月21日一月 上午2:14,Huang Pei写道:
> On Fri, Jan 19, 2024 at 10:05:39AM +0000, Jiaxun Yang wrote:
>> 
>> 
>> 在 2024/1/19 04:02, Huang Pei 写道:
>> > Commit 61167ad5fecd("mm: pass nid to reserve_bootmem_region()) reveals
>> > that reserved memblock regions have no valid node id set, just set it
>> > right since loongson64 firmware makes it clear in memory layout info.
>> > 
>> > This works around booting failure on 3A1000+ since commit 61167ad5fecd
>> > ("mm: pass nid to reserve_bootmem_region()) under
>> > CONFIG_DEFERRED_STRUCT_PAGE_INIT.
>> 
>> This should be done at MIPS arch level I guess.
> You mean the real fix or the set nid for the reserved memblock region?

Set nid for reserved region.

>
> + the real fix is [1](see old mail).
>
> I do not think MIPS arch needs it:
>
> + This ONLY matters on NUMA, most of MIPS platforms is UMA.

There are still some NUMA capable platforms around, such as SGI-IP27.

Thanks
- Jiaxun

>
> + MM does not care about the nid of reserved memblock region provided by 
> arch/platform, nor it provide "memblock_reserved_node" like
> "memblock_add_node". Loongson64 knows about nid of reserved region and the
> regular distribution of physical memory bewtween nodes, that is why it can
> be done by simple "memblock_set_node" and I add it.
>
>> 
>> Thanks
>> - Jiaxun
>> 
>> > 
>> > Signed-off-by: Huang Pei <huangpei@loongson.cn>
>> > ---
>> >   arch/mips/loongson64/init.c | 2 ++
>> >   arch/mips/loongson64/numa.c | 2 ++
>> >   2 files changed, 4 insertions(+)
>> > 
>> > diff --git a/arch/mips/loongson64/init.c b/arch/mips/loongson64/init.c
>> > index f25caa6aa9d3..000ba91c0886 100644
>> > --- a/arch/mips/loongson64/init.c
>> > +++ b/arch/mips/loongson64/init.c
>> > @@ -103,6 +103,8 @@ void __init szmem(unsigned int node)
>> >   	if (loongson_sysconf.vgabios_addr)
>> >   		memblock_reserve(virt_to_phys((void *)loongson_sysconf.vgabios_addr),
>> >   				SZ_256K);
>> > +	/* set nid for reserved memory */
>> > +	memblock_set_node((u64)node << 44, (u64)(node+1) << 44, &memblock.reserved, node);
>> >   }
>> >   #ifndef CONFIG_NUMA
>> > diff --git a/arch/mips/loongson64/numa.c b/arch/mips/loongson64/numa.c
>> > index 8f61e93c0c5b..6345e096c532 100644
>> > --- a/arch/mips/loongson64/numa.c
>> > +++ b/arch/mips/loongson64/numa.c
>> > @@ -132,6 +132,8 @@ static void __init node_mem_init(unsigned int node)
>> >   		/* Reserve pfn range 0~node[0]->node_start_pfn */
>> >   		memblock_reserve(0, PAGE_SIZE * start_pfn);
>> > +		/* set nid for reserved memory on node 0 */
>> > +		memblock_set_node(0, (u64)1 << 44, &memblock.reserved, 1);
>> >   	}
>> >   }
>> 
>> -- 
>> ---
>> Jiaxun Yang
diff mbox series

Patch

diff --git a/arch/mips/loongson64/init.c b/arch/mips/loongson64/init.c
index f25caa6aa9d3..000ba91c0886 100644
--- a/arch/mips/loongson64/init.c
+++ b/arch/mips/loongson64/init.c
@@ -103,6 +103,8 @@  void __init szmem(unsigned int node)
 	if (loongson_sysconf.vgabios_addr)
 		memblock_reserve(virt_to_phys((void *)loongson_sysconf.vgabios_addr),
 				SZ_256K);
+	/* set nid for reserved memory */
+	memblock_set_node((u64)node << 44, (u64)(node+1) << 44, &memblock.reserved, node);
 }
 
 #ifndef CONFIG_NUMA
diff --git a/arch/mips/loongson64/numa.c b/arch/mips/loongson64/numa.c
index 8f61e93c0c5b..6345e096c532 100644
--- a/arch/mips/loongson64/numa.c
+++ b/arch/mips/loongson64/numa.c
@@ -132,6 +132,8 @@  static void __init node_mem_init(unsigned int node)
 
 		/* Reserve pfn range 0~node[0]->node_start_pfn */
 		memblock_reserve(0, PAGE_SIZE * start_pfn);
+		/* set nid for reserved memory on node 0 */
+		memblock_set_node(0, (u64)1 << 44, &memblock.reserved, 1);
 	}
 }