Messages in this thread | | | Subject | Re: linux-next: manual merge of the akpm-current tree with the powerpc tree | From | Christophe Leroy <> | Date | Thu, 15 Apr 2021 12:08:32 +0200 |
| |
Le 15/04/2021 à 12:07, Christophe Leroy a écrit : > > > Le 15/04/2021 à 11:58, Stephen Rothwell a écrit : >> Hi all, >> >> On Thu, 15 Apr 2021 19:44:17 +1000 Stephen Rothwell <sfr@canb.auug.org.au> 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; > > The #endif should be here. > > >>> + >>> + /* First try within 32M limit from _etext to avoid branch trampolines */ >>> + if (MODULES_VADDR < PAGE_OFFSET && MODULES_END > limit)
Should also use start and end here instead of MODULES_VADDR and MODULES_END
>>> - 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: > > Before the #endif is too far. > >> >> From: Stephen Rothwell <sfr@canb.auug.org.au> >> Date: Thu, 15 Apr 2021 19:53:58 +1000 >> Subject: [PATCH] merge fix up for powerpc merge fix >> >> Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au> >> --- >> 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 >>
| |