On Fri, 12 May 2023 07:57:33 PDT (-0700), bjorn@xxxxxxxxxx wrote:
From: Björn Töpel <bjorn@xxxxxxxxxxxx> Add a parameter to the direct map setup function, so it can be used in arch_add_memory() later. Signed-off-by: Björn Töpel <bjorn@xxxxxxxxxxxx> --- arch/riscv/mm/init.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index e974ff6ef036..aea8ccb3f4ae 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -1247,18 +1247,19 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa) pt_ops_set_fixmap(); } -static void __init create_linear_mapping_range(phys_addr_t start, - phys_addr_t end) +static void __meminit create_linear_mapping_range(phys_addr_t start, phys_addr_t end, + struct mhp_params *params)
Sorry if I missed a v2, but it looks like this fails to build under CONFIG_MEMORY_HOTPLUG=n (as struct mhp_params isn't defined) -- unless I screwed up some merge conflict, but doesn't look like it here.
I'm getting CC arch/riscv/mm/init.o arch/riscv/mm/init.c:1252:58: warning: ‘struct mhp_params’ declared inside parameter list will not be visible outside of this definition or declaration 1252 | struct mhp_params *params) | ^~~~~~~~~~ arch/riscv/mm/init.c: In function ‘create_linear_mapping_range’: arch/riscv/mm/init.c:1261:42: error: invalid use of undefined type ‘struct mhp_params’ 1261 | pgprot = params ? params->pgprot : pgprot_from_va(va); | ^~ make[3]: *** [scripts/Makefile.build:252: arch/riscv/mm/init.o] Error 1 make[2]: *** [scripts/Makefile.build:494: arch/riscv/mm] Error 2 make[1]: *** [scripts/Makefile.build:494: arch/riscv] Error 2 make: *** [Makefile:2026: .] Error 2 patchwork is saying something similar <https://gist.github.com/conor-pwbot/9ed9a564e63d824aed1786050ee06558>.
{ phys_addr_t pa; uintptr_t va, map_size; for (pa = start; pa < end; pa += map_size) { + pgprot_t pgprot; + va = (uintptr_t)__va(pa); + pgprot = params ? params->pgprot : pgprot_from_va(va); map_size = best_map_size(pa, end - pa); - - create_pgd_mapping(swapper_pg_dir, va, pa, map_size, - pgprot_from_va(va)); + create_pgd_mapping(swapper_pg_dir, va, pa, map_size, pgprot); } } @@ -1288,13 +1289,12 @@ static void __init create_linear_mapping_page_table(void) if (end >= __pa(PAGE_OFFSET) + memory_limit) end = __pa(PAGE_OFFSET) + memory_limit; - create_linear_mapping_range(start, end); + create_linear_mapping_range(start, end, NULL); } #ifdef CONFIG_STRICT_KERNEL_RWX - create_linear_mapping_range(ktext_start, ktext_start + ktext_size); - create_linear_mapping_range(krodata_start, - krodata_start + krodata_size); + create_linear_mapping_range(ktext_start, ktext_start + ktext_size, NULL); + create_linear_mapping_range(krodata_start, krodata_start + krodata_size, NULL); memblock_clear_nomap(ktext_start, ktext_size); memblock_clear_nomap(krodata_start, krodata_size);