mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 22:26:55 +00:00
powerpc/mm/book3s64: Fix build error with SPARSEMEM disabled
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: 4d15721177
("powerpc/mm: Cleanup memory block size probing")
Signed-off-by: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202308251532.k9PpWEAD-lkp@intel.com/
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230828074658.59553-1-aneesh.kumar@linux.ibm.com
This commit is contained in:
parent
c37b6908f7
commit
f1424755db
1 changed files with 15 additions and 4 deletions
|
@ -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);
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue