Re: [PATCH v3 02/26] MIPS: sgi-ip27: make NODE_DATA() the same as on all other architectures

Jonathan Cameron <[email protected]>
Newsgroups gmane.linux.kernel.cross-arch,gmane.linux.kernel,gmane.linux.drivers.devicetree,gmane.linux.acpi.devel,gmane.linux.ports.arm.kernel,gmane.linux.documentation,gmane.linux.ports.mips,gmane.linux.kernel.mm,gmane.linux.ports.riscv,gmane.linux.ports.sh.devel,gmane.linux.ports.ppc64.devel,gmane.linux.ports.sparc
Organization Huawei Technologies Research and Development (UK) Ltd.
Message-ID <[email protected]>
On Thu,  1 Aug 2024 09:08:02 +0300
Mike Rapoport <[email protected]> wrote:

> From: "Mike Rapoport (Microsoft)" <[email protected]>
> 
> sgi-ip27 is the only system that defines NODE_DATA() differently than
> the rest of NUMA machines.
> 
> Add node_data array of struct pglist pointers that will point to
> __node_data[node]->pglist and redefine NODE_DATA() to use node_data
> array.
> 
> This will allow pulling declaration of node_data to the generic mm code
> in the next commit.
> 
> Signed-off-by: Mike Rapoport (Microsoft) <[email protected]>
After staring for a while at the use made of the other part
of the __node_data I think what you have in this an the next
two patches is fine.

I'm far from convinced it was correct before though as
arch_refresh_node_data() called on offline nodes in free_area_init()
would have replaced __node_data with an allocation of
size pg_data_t but the hub_data(), visible below, is after that.
Maybe hub_data() as never called for offline nodes, but
I couldn't establish that.

After these patches the arch_refresh_node_data() generic
version will only be replacing the pointer in node_data
leaving the hub_data where it was in the first place and
thus is fine.

So with that in mind (and it could be completely wrong ;)

Reviewed-by: Jonathan Cameron <[email protected]>



> ---
>  arch/mips/include/asm/mach-ip27/mmzone.h | 5 ++++-
>  arch/mips/sgi-ip27/ip27-memory.c         | 5 ++++-
>  2 files changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/mips/include/asm/mach-ip27/mmzone.h b/arch/mips/include/asm/mach-ip27/mmzone.h
> index 08c36e50a860..629c3f290203 100644
> --- a/arch/mips/include/asm/mach-ip27/mmzone.h
> +++ b/arch/mips/include/asm/mach-ip27/mmzone.h
> @@ -22,7 +22,10 @@ struct node_data {
>  
>  extern struct node_data *__node_data[];
>  
> -#define NODE_DATA(n)		(&__node_data[(n)]->pglist)
>  #define hub_data(n)		(&__node_data[(n)]->hub)
>  
> +extern struct pglist_data *node_data[];
> +
> +#define NODE_DATA(nid)		(node_data[nid])
> +
>  #endif /* _ASM_MACH_MMZONE_H */
> diff --git a/arch/mips/sgi-ip27/ip27-memory.c b/arch/mips/sgi-ip27/ip27-memory.c
> index b8ca94cfb4fe..c30ef6958b97 100644
> --- a/arch/mips/sgi-ip27/ip27-memory.c
> +++ b/arch/mips/sgi-ip27/ip27-memory.c
> @@ -34,8 +34,10 @@
>  #define SLOT_PFNSHIFT		(SLOT_SHIFT - PAGE_SHIFT)
>  #define PFN_NASIDSHFT		(NASID_SHFT - PAGE_SHIFT)
>  
> -struct node_data *__node_data[MAX_NUMNODES];
> +struct pglist_data *node_data[MAX_NUMNODES];
> +EXPORT_SYMBOL(node_data);
>  
> +struct node_data *__node_data[MAX_NUMNODES];
>  EXPORT_SYMBOL(__node_data);
>  
>  static u64 gen_region_mask(void)
> @@ -361,6 +363,7 @@ static void __init node_mem_init(nasid_t node)
>  	 */
>  	__node_data[node] = __va(slot_freepfn << PAGE_SHIFT);
>  	memset(__node_data[node], 0, PAGE_SIZE);
> +	node_data[node] = &__node_data[node]->pglist;
>  
>  	NODE_DATA(node)->node_start_pfn = start_pfn;
>  	NODE_DATA(node)->node_spanned_pages = end_pfn - start_pfn;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.