Message ID | 20230828074658.59553-1-aneesh.kumar@linux.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Commit | f1424755db913c5971686537381588261cdfd1ee |
Headers | show |
Series | [1/2] powerpc/mm/book3s64: Fix build error with SPARSEMEM disabled | expand |
On 8/28/23 1:16 PM, Aneesh Kumar K.V wrote: > With CONFIG_SPARSEMEM disabled the below kernel build error is observed. > > arch/powerpc/mm/init_64.c:477:38: error: use of undeclared identifier 'SECTION_SIZE_BITS' > > CONFIG_MEMORY_HOTPLUG depends on CONFIG_SPARSEMEM and it is more clear > to describe the code dependency in terms of MEMORY_HOTPLUG. Outside > memory hotplug the kernel uses memory_block_size for kernel directmap. > Instead of depending on SECTION_SIZE_BITS to compute the direct map > page size, add a new #define which defaults to 16M(same as existing > SECTION_SIZE) > Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202308251532.k9PpWEAD-lkp@intel.com/ > Fixes: 4d15721177d5 ("powerpc/mm: Cleanup memory block size probing") > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> > --- > arch/powerpc/mm/init_64.c | 19 +++++++++++++++---- > 1 file changed, 15 insertions(+), 4 deletions(-) > > diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c > index fcda46c2b8df..e3d7379ef480 100644 > --- a/arch/powerpc/mm/init_64.c > +++ b/arch/powerpc/mm/init_64.c > @@ -472,12 +472,23 @@ static int __init dt_scan_mmu_pid_width(unsigned long node, > return 1; > } > > +/* > + * Outside hotplug the kernel uses this value to map the kernel direct map > + * with radix. To be compatible with older kernels, let's keep this value > + * as 16M which is also SECTION_SIZE with SPARSEMEM. We can ideally map > + * things with 1GB size in the case where we don't support hotplug. > + */ > +#ifndef CONFIG_MEMORY_HOTPLUG > +#define DEFAULT_MEMORY_BLOCK_SIZE SZ_16M > +#else > +#define DEFAULT_MEMORY_BLOCK_SIZE MIN_MEMORY_BLOCK_SIZE > +#endif > + > static void update_memory_block_size(unsigned long *block_size, unsigned long mem_size) > { > - unsigned long section_size = 1UL << SECTION_SIZE_BITS; > - > - for (; *block_size > section_size; *block_size >>= 2) { > + unsigned long min_memory_block_size = DEFAULT_MEMORY_BLOCK_SIZE; > > + for (; *block_size > min_memory_block_size; *block_size >>= 2) { > if ((mem_size & *block_size) == 0) > break; > } > @@ -507,7 +518,7 @@ static int __init probe_memory_block_size(unsigned long node, const char *uname, > /* > * Nothing in the device tree > */ > - *block_size = MIN_MEMORY_BLOCK_SIZE; > + *block_size = DEFAULT_MEMORY_BLOCK_SIZE; > else > *block_size = of_read_number(prop, dt_root_size_cells); > /*
On Mon, 28 Aug 2023 13:16:57 +0530, Aneesh Kumar K.V wrote: > With CONFIG_SPARSEMEM disabled the below kernel build error is observed. > > arch/powerpc/mm/init_64.c:477:38: error: use of undeclared identifier 'SECTION_SIZE_BITS' > > CONFIG_MEMORY_HOTPLUG depends on CONFIG_SPARSEMEM and it is more clear > to describe the code dependency in terms of MEMORY_HOTPLUG. Outside > memory hotplug the kernel uses memory_block_size for kernel directmap. > Instead of depending on SECTION_SIZE_BITS to compute the direct map > page size, add a new #define which defaults to 16M(same as existing > SECTION_SIZE) > > [...] Applied to powerpc/next. [1/2] powerpc/mm/book3s64: Fix build error with SPARSEMEM disabled https://git.kernel.org/powerpc/c/f1424755db913c5971686537381588261cdfd1ee [2/2] powerpc/mm/book3s64: Use 256M as the upper limit with coherent device memory attached https://git.kernel.org/powerpc/c/4c33bf147249ebbf3dded016996a8a24c5737254 cheers
diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c index fcda46c2b8df..e3d7379ef480 100644 --- a/arch/powerpc/mm/init_64.c +++ b/arch/powerpc/mm/init_64.c @@ -472,12 +472,23 @@ static int __init dt_scan_mmu_pid_width(unsigned long node, return 1; } +/* + * Outside hotplug the kernel uses this value to map the kernel direct map + * with radix. To be compatible with older kernels, let's keep this value + * as 16M which is also SECTION_SIZE with SPARSEMEM. We can ideally map + * things with 1GB size in the case where we don't support hotplug. + */ +#ifndef CONFIG_MEMORY_HOTPLUG +#define DEFAULT_MEMORY_BLOCK_SIZE SZ_16M +#else +#define DEFAULT_MEMORY_BLOCK_SIZE MIN_MEMORY_BLOCK_SIZE +#endif + static void update_memory_block_size(unsigned long *block_size, unsigned long mem_size) { - unsigned long section_size = 1UL << SECTION_SIZE_BITS; - - for (; *block_size > section_size; *block_size >>= 2) { + unsigned long min_memory_block_size = DEFAULT_MEMORY_BLOCK_SIZE; + for (; *block_size > min_memory_block_size; *block_size >>= 2) { if ((mem_size & *block_size) == 0) break; } @@ -507,7 +518,7 @@ static int __init probe_memory_block_size(unsigned long node, const char *uname, /* * Nothing in the device tree */ - *block_size = MIN_MEMORY_BLOCK_SIZE; + *block_size = DEFAULT_MEMORY_BLOCK_SIZE; else *block_size = of_read_number(prop, dt_root_size_cells); /*
With CONFIG_SPARSEMEM disabled the below kernel build error is observed. arch/powerpc/mm/init_64.c:477:38: error: use of undeclared identifier 'SECTION_SIZE_BITS' CONFIG_MEMORY_HOTPLUG depends on CONFIG_SPARSEMEM and it is more clear to describe the code dependency in terms of MEMORY_HOTPLUG. Outside memory hotplug the kernel uses memory_block_size for kernel directmap. Instead of depending on SECTION_SIZE_BITS to compute the direct map page size, add a new #define which defaults to 16M(same as existing SECTION_SIZE) Fixes: 4d15721177d5 ("powerpc/mm: Cleanup memory block size probing") Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> --- arch/powerpc/mm/init_64.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-)