Message ID | 91781d982e1b89ab4fc7f1f378433eaa0e44b15a.1647671808.git.chenfeiyang@loongson.cn (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | MIPS: Fix build error for loongson64 and sgi-ip27 | expand |
Hi, Feiyang On 2022/3/19 下午3:11, Feiyang Chen wrote: > Modify __node_data to node_data to fix the build error when CONFIG_NUMA=y: > > mips64el-unknown-linux-gnu-ld: mm/page_alloc.o: in function `free_area_init': > (.init.text+0x1714): undefined reference to `node_data' > mips64el-unknown-linux-gnu-ld: (.init.text+0x1730): undefined reference to `node_data' 1. This issue was introduced by the patch "mm, memory_hotplug: make arch_alloc_nodedata independent on CONFIG_MEMORY_HOTPLUG". The patch has not yet been synced to the mips-next branch. https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=9039a226f22047ba6b066128318d5be8ef794273 2. The build error should not modify mips but should modifythe include/linux/memory_hotplug.h file, which will use "NODE_DATA" instead of "node_data". 3. If "__node_data" is changed to "node_data" in mips, it will cause problems with the crash tool. Thanks, Youling. > > BTW, modify __node_distances and __node_cpumask to follow the same style. > > Signed-off-by: Feiyang Chen <chenfeiyang@loongson.cn> > --- > .../mips/include/asm/mach-loongson64/mmzone.h | 4 ++-- > .../include/asm/mach-loongson64/topology.h | 8 +++---- > arch/mips/loongson64/numa.c | 22 +++++++++---------- > 3 files changed, 17 insertions(+), 17 deletions(-) > > diff --git a/arch/mips/include/asm/mach-loongson64/mmzone.h b/arch/mips/include/asm/mach-loongson64/mmzone.h > index ebb1deaa77b9..14e2b860ad65 100644 > --- a/arch/mips/include/asm/mach-loongson64/mmzone.h > +++ b/arch/mips/include/asm/mach-loongson64/mmzone.h > @@ -14,9 +14,9 @@ > #define pa_to_nid(addr) (((addr) & 0xf00000000000) >> NODE_ADDRSPACE_SHIFT) > #define nid_to_addrbase(nid) ((unsigned long)(nid) << NODE_ADDRSPACE_SHIFT) > > -extern struct pglist_data *__node_data[]; > +extern struct pglist_data *node_data[]; > > -#define NODE_DATA(n) (__node_data[n]) > +#define NODE_DATA(n) (node_data[n]) > > extern void setup_zero_pages(void); > extern void __init prom_init_numa_memory(void); > diff --git a/arch/mips/include/asm/mach-loongson64/topology.h b/arch/mips/include/asm/mach-loongson64/topology.h > index 3414a1fd1783..dc71eaf9c819 100644 > --- a/arch/mips/include/asm/mach-loongson64/topology.h > +++ b/arch/mips/include/asm/mach-loongson64/topology.h > @@ -6,17 +6,17 @@ > > #define cpu_to_node(cpu) (cpu_logical_map(cpu) >> 2) > > -extern cpumask_t __node_cpumask[]; > -#define cpumask_of_node(node) (&__node_cpumask[node]) > +extern cpumask_t node_cpumask[]; > +#define cpumask_of_node(node) (&node_cpumask[node]) > > struct pci_bus; > extern int pcibus_to_node(struct pci_bus *); > > #define cpumask_of_pcibus(bus) (cpu_online_mask) > > -extern unsigned char __node_distances[MAX_NUMNODES][MAX_NUMNODES]; > +extern unsigned char node_distances[MAX_NUMNODES][MAX_NUMNODES]; > > -#define node_distance(from, to) (__node_distances[(from)][(to)]) > +#define node_distance(from, to) (node_distances[(from)][(to)]) > > #endif > > diff --git a/arch/mips/loongson64/numa.c b/arch/mips/loongson64/numa.c > index e8e3e48c5333..9c1bf29c1aae 100644 > --- a/arch/mips/loongson64/numa.c > +++ b/arch/mips/loongson64/numa.c > @@ -27,13 +27,13 @@ > #include <boot_param.h> > #include <loongson.h> > > -unsigned char __node_distances[MAX_NUMNODES][MAX_NUMNODES]; > -EXPORT_SYMBOL(__node_distances); > -struct pglist_data *__node_data[MAX_NUMNODES]; > -EXPORT_SYMBOL(__node_data); > +unsigned char node_distances[MAX_NUMNODES][MAX_NUMNODES]; > +EXPORT_SYMBOL(node_distances); > +struct pglist_data *node_data[MAX_NUMNODES]; > +EXPORT_SYMBOL(node_data); > > -cpumask_t __node_cpumask[MAX_NUMNODES]; > -EXPORT_SYMBOL(__node_cpumask); > +cpumask_t node_cpumask[MAX_NUMNODES]; > +EXPORT_SYMBOL(node_cpumask); > > static void cpu_node_probe(void) > { > @@ -71,11 +71,11 @@ static void __init init_topology_matrix(void) > > for (row = 0; row < MAX_NUMNODES; row++) > for (col = 0; col < MAX_NUMNODES; col++) > - __node_distances[row][col] = -1; > + node_distances[row][col] = -1; > > for_each_online_node(row) { > for_each_online_node(col) { > - __node_distances[row][col] = > + node_distances[row][col] = > compute_node_distance(row, col); > } > } > @@ -107,7 +107,7 @@ static void __init node_mem_init(unsigned int node) > tnid = early_pfn_to_nid(nd_pa >> PAGE_SHIFT); > if (tnid != node) > pr_info("NODE_DATA(%d) on node %d\n", node, tnid); > - __node_data[node] = nd; > + node_data[node] = nd; > NODE_DATA(node)->node_start_pfn = start_pfn; > NODE_DATA(node)->node_spanned_pages = end_pfn - start_pfn; > > @@ -146,7 +146,7 @@ static __init void prom_meminit(void) > if (node_online(node)) { > szmem(node); > node_mem_init(node); > - cpumask_clear(&__node_cpumask[node]); > + cpumask_clear(&node_cpumask[node]); > } > } > max_low_pfn = PHYS_PFN(memblock_end_of_DRAM()); > @@ -159,7 +159,7 @@ static __init void prom_meminit(void) > if (loongson_sysconf.reserved_cpus_mask & (1<<cpu)) > continue; > > - cpumask_set_cpu(active_cpu, &__node_cpumask[node]); > + cpumask_set_cpu(active_cpu, &node_cpumask[node]); > pr_info("NUMA: set cpumask cpu %d on node %d\n", active_cpu, node); > > active_cpu++;
On Sat, 19 Mar 2022 at 16:03, Youling Tang <tangyouling@loongson.cn> wrote: > > Hi, Feiyang > On 2022/3/19 下午3:11, Feiyang Chen wrote: > > Modify __node_data to node_data to fix the build error when CONFIG_NUMA=y: > > > > mips64el-unknown-linux-gnu-ld: mm/page_alloc.o: in function `free_area_init': > > (.init.text+0x1714): undefined reference to `node_data' > > mips64el-unknown-linux-gnu-ld: (.init.text+0x1730): undefined reference to `node_data' > 1. This issue was introduced by the patch "mm, memory_hotplug: make > arch_alloc_nodedata independent on CONFIG_MEMORY_HOTPLUG". The patch > has not yet been synced to the mips-next branch. > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=9039a226f22047ba6b066128318d5be8ef794273 > > 2. The build error should not modify mips but should modifythe > include/linux/memory_hotplug.h file, which will use "NODE_DATA" > instead of "node_data". Hi, Youling, The comment in include/linux/memory_hotplug.h says: /* * For supporting node-hotadd, we have to allocate a new pgdat. * * If an arch has generic style NODE_DATA(), * node_data[nid] = kzalloc() works well. But it depends on the architecture. * * In general, generic_alloc_nodedata() is used. * */ I don't think it's a good idea to modify "node_data" to "NODE_DATA". > > 3. If "__node_data" is changed to "node_data" in mips, it will cause > problems with the crash tool. How about selecting HAVE_ARCH_NODEDATA_EXTENSION and overloading functions as sgi-ip27 in Patch 2? Thanks, Feiyang > > Thanks, > Youling. > > > > BTW, modify __node_distances and __node_cpumask to follow the same style. > > > > Signed-off-by: Feiyang Chen <chenfeiyang@loongson.cn> > > --- > > .../mips/include/asm/mach-loongson64/mmzone.h | 4 ++-- > > .../include/asm/mach-loongson64/topology.h | 8 +++---- > > arch/mips/loongson64/numa.c | 22 +++++++++---------- > > 3 files changed, 17 insertions(+), 17 deletions(-) > > > > diff --git a/arch/mips/include/asm/mach-loongson64/mmzone.h b/arch/mips/include/asm/mach-loongson64/mmzone.h > > index ebb1deaa77b9..14e2b860ad65 100644 > > --- a/arch/mips/include/asm/mach-loongson64/mmzone.h > > +++ b/arch/mips/include/asm/mach-loongson64/mmzone.h > > @@ -14,9 +14,9 @@ > > #define pa_to_nid(addr) (((addr) & 0xf00000000000) >> NODE_ADDRSPACE_SHIFT) > > #define nid_to_addrbase(nid) ((unsigned long)(nid) << NODE_ADDRSPACE_SHIFT) > > > > -extern struct pglist_data *__node_data[]; > > +extern struct pglist_data *node_data[]; > > > > -#define NODE_DATA(n) (__node_data[n]) > > +#define NODE_DATA(n) (node_data[n]) > > > > extern void setup_zero_pages(void); > > extern void __init prom_init_numa_memory(void); > > diff --git a/arch/mips/include/asm/mach-loongson64/topology.h b/arch/mips/include/asm/mach-loongson64/topology.h > > index 3414a1fd1783..dc71eaf9c819 100644 > > --- a/arch/mips/include/asm/mach-loongson64/topology.h > > +++ b/arch/mips/include/asm/mach-loongson64/topology.h > > @@ -6,17 +6,17 @@ > > > > #define cpu_to_node(cpu) (cpu_logical_map(cpu) >> 2) > > > > -extern cpumask_t __node_cpumask[]; > > -#define cpumask_of_node(node) (&__node_cpumask[node]) > > +extern cpumask_t node_cpumask[]; > > +#define cpumask_of_node(node) (&node_cpumask[node]) > > > > struct pci_bus; > > extern int pcibus_to_node(struct pci_bus *); > > > > #define cpumask_of_pcibus(bus) (cpu_online_mask) > > > > -extern unsigned char __node_distances[MAX_NUMNODES][MAX_NUMNODES]; > > +extern unsigned char node_distances[MAX_NUMNODES][MAX_NUMNODES]; > > > > -#define node_distance(from, to) (__node_distances[(from)][(to)]) > > +#define node_distance(from, to) (node_distances[(from)][(to)]) > > > > #endif > > > > diff --git a/arch/mips/loongson64/numa.c b/arch/mips/loongson64/numa.c > > index e8e3e48c5333..9c1bf29c1aae 100644 > > --- a/arch/mips/loongson64/numa.c > > +++ b/arch/mips/loongson64/numa.c > > @@ -27,13 +27,13 @@ > > #include <boot_param.h> > > #include <loongson.h> > > > > -unsigned char __node_distances[MAX_NUMNODES][MAX_NUMNODES]; > > -EXPORT_SYMBOL(__node_distances); > > -struct pglist_data *__node_data[MAX_NUMNODES]; > > -EXPORT_SYMBOL(__node_data); > > +unsigned char node_distances[MAX_NUMNODES][MAX_NUMNODES]; > > +EXPORT_SYMBOL(node_distances); > > +struct pglist_data *node_data[MAX_NUMNODES]; > > +EXPORT_SYMBOL(node_data); > > > > -cpumask_t __node_cpumask[MAX_NUMNODES]; > > -EXPORT_SYMBOL(__node_cpumask); > > +cpumask_t node_cpumask[MAX_NUMNODES]; > > +EXPORT_SYMBOL(node_cpumask); > > > > static void cpu_node_probe(void) > > { > > @@ -71,11 +71,11 @@ static void __init init_topology_matrix(void) > > > > for (row = 0; row < MAX_NUMNODES; row++) > > for (col = 0; col < MAX_NUMNODES; col++) > > - __node_distances[row][col] = -1; > > + node_distances[row][col] = -1; > > > > for_each_online_node(row) { > > for_each_online_node(col) { > > - __node_distances[row][col] = > > + node_distances[row][col] = > > compute_node_distance(row, col); > > } > > } > > @@ -107,7 +107,7 @@ static void __init node_mem_init(unsigned int node) > > tnid = early_pfn_to_nid(nd_pa >> PAGE_SHIFT); > > if (tnid != node) > > pr_info("NODE_DATA(%d) on node %d\n", node, tnid); > > - __node_data[node] = nd; > > + node_data[node] = nd; > > NODE_DATA(node)->node_start_pfn = start_pfn; > > NODE_DATA(node)->node_spanned_pages = end_pfn - start_pfn; > > > > @@ -146,7 +146,7 @@ static __init void prom_meminit(void) > > if (node_online(node)) { > > szmem(node); > > node_mem_init(node); > > - cpumask_clear(&__node_cpumask[node]); > > + cpumask_clear(&node_cpumask[node]); > > } > > } > > max_low_pfn = PHYS_PFN(memblock_end_of_DRAM()); > > @@ -159,7 +159,7 @@ static __init void prom_meminit(void) > > if (loongson_sysconf.reserved_cpus_mask & (1<<cpu)) > > continue; > > > > - cpumask_set_cpu(active_cpu, &__node_cpumask[node]); > > + cpumask_set_cpu(active_cpu, &node_cpumask[node]); > > pr_info("NUMA: set cpumask cpu %d on node %d\n", active_cpu, node); > > > > active_cpu++; >
diff --git a/arch/mips/include/asm/mach-loongson64/mmzone.h b/arch/mips/include/asm/mach-loongson64/mmzone.h index ebb1deaa77b9..14e2b860ad65 100644 --- a/arch/mips/include/asm/mach-loongson64/mmzone.h +++ b/arch/mips/include/asm/mach-loongson64/mmzone.h @@ -14,9 +14,9 @@ #define pa_to_nid(addr) (((addr) & 0xf00000000000) >> NODE_ADDRSPACE_SHIFT) #define nid_to_addrbase(nid) ((unsigned long)(nid) << NODE_ADDRSPACE_SHIFT) -extern struct pglist_data *__node_data[]; +extern struct pglist_data *node_data[]; -#define NODE_DATA(n) (__node_data[n]) +#define NODE_DATA(n) (node_data[n]) extern void setup_zero_pages(void); extern void __init prom_init_numa_memory(void); diff --git a/arch/mips/include/asm/mach-loongson64/topology.h b/arch/mips/include/asm/mach-loongson64/topology.h index 3414a1fd1783..dc71eaf9c819 100644 --- a/arch/mips/include/asm/mach-loongson64/topology.h +++ b/arch/mips/include/asm/mach-loongson64/topology.h @@ -6,17 +6,17 @@ #define cpu_to_node(cpu) (cpu_logical_map(cpu) >> 2) -extern cpumask_t __node_cpumask[]; -#define cpumask_of_node(node) (&__node_cpumask[node]) +extern cpumask_t node_cpumask[]; +#define cpumask_of_node(node) (&node_cpumask[node]) struct pci_bus; extern int pcibus_to_node(struct pci_bus *); #define cpumask_of_pcibus(bus) (cpu_online_mask) -extern unsigned char __node_distances[MAX_NUMNODES][MAX_NUMNODES]; +extern unsigned char node_distances[MAX_NUMNODES][MAX_NUMNODES]; -#define node_distance(from, to) (__node_distances[(from)][(to)]) +#define node_distance(from, to) (node_distances[(from)][(to)]) #endif diff --git a/arch/mips/loongson64/numa.c b/arch/mips/loongson64/numa.c index e8e3e48c5333..9c1bf29c1aae 100644 --- a/arch/mips/loongson64/numa.c +++ b/arch/mips/loongson64/numa.c @@ -27,13 +27,13 @@ #include <boot_param.h> #include <loongson.h> -unsigned char __node_distances[MAX_NUMNODES][MAX_NUMNODES]; -EXPORT_SYMBOL(__node_distances); -struct pglist_data *__node_data[MAX_NUMNODES]; -EXPORT_SYMBOL(__node_data); +unsigned char node_distances[MAX_NUMNODES][MAX_NUMNODES]; +EXPORT_SYMBOL(node_distances); +struct pglist_data *node_data[MAX_NUMNODES]; +EXPORT_SYMBOL(node_data); -cpumask_t __node_cpumask[MAX_NUMNODES]; -EXPORT_SYMBOL(__node_cpumask); +cpumask_t node_cpumask[MAX_NUMNODES]; +EXPORT_SYMBOL(node_cpumask); static void cpu_node_probe(void) { @@ -71,11 +71,11 @@ static void __init init_topology_matrix(void) for (row = 0; row < MAX_NUMNODES; row++) for (col = 0; col < MAX_NUMNODES; col++) - __node_distances[row][col] = -1; + node_distances[row][col] = -1; for_each_online_node(row) { for_each_online_node(col) { - __node_distances[row][col] = + node_distances[row][col] = compute_node_distance(row, col); } } @@ -107,7 +107,7 @@ static void __init node_mem_init(unsigned int node) tnid = early_pfn_to_nid(nd_pa >> PAGE_SHIFT); if (tnid != node) pr_info("NODE_DATA(%d) on node %d\n", node, tnid); - __node_data[node] = nd; + node_data[node] = nd; NODE_DATA(node)->node_start_pfn = start_pfn; NODE_DATA(node)->node_spanned_pages = end_pfn - start_pfn; @@ -146,7 +146,7 @@ static __init void prom_meminit(void) if (node_online(node)) { szmem(node); node_mem_init(node); - cpumask_clear(&__node_cpumask[node]); + cpumask_clear(&node_cpumask[node]); } } max_low_pfn = PHYS_PFN(memblock_end_of_DRAM()); @@ -159,7 +159,7 @@ static __init void prom_meminit(void) if (loongson_sysconf.reserved_cpus_mask & (1<<cpu)) continue; - cpumask_set_cpu(active_cpu, &__node_cpumask[node]); + cpumask_set_cpu(active_cpu, &node_cpumask[node]); pr_info("NUMA: set cpumask cpu %d on node %d\n", active_cpu, node); active_cpu++;
Modify __node_data to node_data to fix the build error when CONFIG_NUMA=y: mips64el-unknown-linux-gnu-ld: mm/page_alloc.o: in function `free_area_init': (.init.text+0x1714): undefined reference to `node_data' mips64el-unknown-linux-gnu-ld: (.init.text+0x1730): undefined reference to `node_data' BTW, modify __node_distances and __node_cpumask to follow the same style. Signed-off-by: Feiyang Chen <chenfeiyang@loongson.cn> --- .../mips/include/asm/mach-loongson64/mmzone.h | 4 ++-- .../include/asm/mach-loongson64/topology.h | 8 +++---- arch/mips/loongson64/numa.c | 22 +++++++++---------- 3 files changed, 17 insertions(+), 17 deletions(-)