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:07:01 +0200 |
| |
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) >> - 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 >
| |