Hi all, On Thu, 15 Apr 2021 19:44:17 +1000 Stephen Rothwell wrote: > > Today's linux-next merge of the akpm-current tree got a conflict in: > > arch/powerpc/kernel/module.c > > between commit: > > 2ec13df16704 ("powerpc/modules: Load modules closer to kernel text") > > from the powerpc tree and commit: > > 4930ba789f8d ("powerpc/64s/radix: enable huge vmalloc mappings") > > from the akpm-current tree. > > I fixed it up (I think - see below) and can carry the fix as > necessary. This is now fixed as far as linux-next is concerned, but any > non trivial conflicts should be mentioned to your upstream maintainer > when your tree is submitted for merging. You may also want to consider > cooperating with the maintainer of the conflicting tree to minimise any > particularly complex conflicts. > > -- > Cheers, > Stephen Rothwell > > diff --cc arch/powerpc/kernel/module.c > index fab84024650c,cdb2d88c54e7..000000000000 > --- a/arch/powerpc/kernel/module.c > +++ b/arch/powerpc/kernel/module.c > @@@ -88,29 -88,26 +89,42 @@@ int module_finalize(const Elf_Ehdr *hdr > return 0; > } > > - #ifdef MODULES_VADDR > -void *module_alloc(unsigned long size) > +static __always_inline void * > +__module_alloc(unsigned long size, unsigned long start, unsigned long end) > { > - unsigned long start = VMALLOC_START; > - unsigned long end = VMALLOC_END; > - > -#ifdef MODULES_VADDR > - BUILD_BUG_ON(TASK_SIZE > MODULES_VADDR); > - start = MODULES_VADDR; > - end = MODULES_END; > -#endif > - > + /* > + * Don't do huge page allocations for modules yet until more testing > + * is done. STRICT_MODULE_RWX may require extra work to support this > + * too. > + */ > + > return __vmalloc_node_range(size, 1, start, end, GFP_KERNEL, > - PAGE_KERNEL_EXEC, VM_FLUSH_RESET_PERMS, NUMA_NO_NODE, > + PAGE_KERNEL_EXEC, > + VM_NO_HUGE_VMAP | VM_FLUSH_RESET_PERMS, > + NUMA_NO_NODE, > __builtin_return_address(0)); > } > + > ++ > +void *module_alloc(unsigned long size) > +{ > ++ unsigned long start = VMALLOC_START; > ++ unsigned long end = VMALLOC_END; > + unsigned long limit = (unsigned long)_etext - SZ_32M; > + void *ptr = NULL; > + > ++#ifdef MODULES_VADDR > + BUILD_BUG_ON(TASK_SIZE > MODULES_VADDR); > ++ start = MODULES_VADDR; > ++ end = MODULES_END; > + > + /* First try within 32M limit from _etext to avoid branch trampolines */ > + if (MODULES_VADDR < PAGE_OFFSET && MODULES_END > limit) > - ptr = __module_alloc(size, limit, MODULES_END); > ++ ptr = __module_alloc(size, limit, end); > + > + if (!ptr) > - ptr = __module_alloc(size, MODULES_VADDR, MODULES_END); > ++#endif > ++ ptr = __module_alloc(size, start, end); > + > + return ptr; > +} > - #endif Unfortunately, it also needs this: From: Stephen Rothwell Date: Thu, 15 Apr 2021 19:53:58 +1000 Subject: [PATCH] merge fix up for powerpc merge fix Signed-off-by: Stephen Rothwell --- arch/powerpc/kernel/module.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/powerpc/kernel/module.c b/arch/powerpc/kernel/module.c index d8ab1ad2eb05..c060f99afd4d 100644 --- a/arch/powerpc/kernel/module.c +++ b/arch/powerpc/kernel/module.c @@ -110,7 +110,9 @@ void *module_alloc(unsigned long size) { unsigned long start = VMALLOC_START; unsigned long end = VMALLOC_END; +#ifdef MODULES_VADDR unsigned long limit = (unsigned long)_etext - SZ_32M; +#endif void *ptr = NULL; #ifdef MODULES_VADDR -- 2.30.2 -- Cheers, Stephen Rothwell