diff mbox series

[1/2] powerpc/mm/book3s64: Fix build error with SPARSEMEM disabled

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

Commit Message

Aneesh Kumar K V Aug. 28, 2023, 7:46 a.m. UTC
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(-)

Comments

Aneesh Kumar K V Aug. 28, 2023, 7:47 a.m. UTC | #1
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);
>  		/*
Michael Ellerman Aug. 31, 2023, 4:02 a.m. UTC | #2
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 mbox series

Patch

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);
 		/*