Message ID | 20210804013724.514468-1-jniethe5@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | powerpc: Always inline radix_enabled() to fix build failure | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/github-powerpc_ppctests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_selftests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_clang | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_sparse | success | Successfully ran 4 jobs. |
snowpatch_ozlabs/github-powerpc_kernel_qemu | success | Successfully ran 25 jobs. |
Le 04/08/2021 à 03:37, Jordan Niethe a écrit : > This is the same as commit acdad8fb4a15 ("powerpc: Force inlining of > mmu_has_feature to fix build failure") but for radix_enabled(). The > config in the linked bugzilla causes the following build failure: > > LD .tmp_vmlinux.kallsyms1 > powerpc64-linux-ld: arch/powerpc/mm/pgtable.o: in function `.__ptep_set_access_flags': > pgtable.c:(.text+0x17c): undefined reference to `.radix__ptep_set_access_flags' > > This is due to radix_enabled() not being inlined. See extract from building with -Winline: > > In file included from arch/powerpc/include/asm/lppaca.h:46, > from arch/powerpc/include/asm/paca.h:17, > from arch/powerpc/include/asm/current.h:13, > from include/linux/thread_info.h:23, > from include/asm-generic/preempt.h:5, > from ./arch/powerpc/include/generated/asm/preempt.h:1, > from include/linux/preempt.h:78, > from include/linux/spinlock.h:51, > from include/linux/mmzone.h:8, > from include/linux/gfp.h:6, > from arch/powerpc/mm/pgtable.c:21: > arch/powerpc/include/asm/book3s/64/pgtable.h: In function '__ptep_set_access_flags': > arch/powerpc/include/asm/mmu.h:327:20: error: inlining failed in call to 'radix_enabled': call is unlikely and code size would grow [-Werror=inline] > > The code relies on constant folding of MMU_FTRS_POSSIBLE at buildtime > and elimination of non possible parts of code at compile time. For this > to work radix_enabled() must be inlined so make it __always_inline. Thanks for looking at that. I also got a few notifications of that problem by kernel test robot but I didn't look at it yet. https://lkml.org/lkml/2021/7/31/257 https://lkml.org/lkml/2021/7/25/271 > > Link: https://bugzilla.kernel.org/show_bug.cgi?id=213803 > Reported-by: Erhard F. <erhard_f@mailbox.org> > Suggested-by: Michael Ellerman <mpe@ellerman.id.au> > Signed-off-by: Jordan Niethe <jniethe5@gmail.com> > --- > arch/powerpc/include/asm/mmu.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/powerpc/include/asm/mmu.h b/arch/powerpc/include/asm/mmu.h > index 27016b98ecb2..8abe8e42e045 100644 > --- a/arch/powerpc/include/asm/mmu.h > +++ b/arch/powerpc/include/asm/mmu.h > @@ -324,7 +324,7 @@ static inline void assert_pte_locked(struct mm_struct *mm, unsigned long addr) > } > #endif /* !CONFIG_DEBUG_VM */ > > -static inline bool radix_enabled(void) > +static __always_inline bool radix_enabled(void) > { > return mmu_has_feature(MMU_FTR_TYPE_RADIX); > } >
On Wed, 4 Aug 2021 11:37:24 +1000 Jordan Niethe <jniethe5@gmail.com> wrote: > This is the same as commit acdad8fb4a15 ("powerpc: Force inlining of > mmu_has_feature to fix build failure") but for radix_enabled(). The > config in the linked bugzilla causes the following build failure: > [...] > The code relies on constant folding of MMU_FTRS_POSSIBLE at buildtime > and elimination of non possible parts of code at compile time. For this > to work radix_enabled() must be inlined so make it __always_inline. > > Link: https://bugzilla.kernel.org/show_bug.cgi?id=213803 > Reported-by: Erhard F. <erhard_f@mailbox.org> > Suggested-by: Michael Ellerman <mpe@ellerman.id.au> > Signed-off-by: Jordan Niethe <jniethe5@gmail.com> > --- > arch/powerpc/include/asm/mmu.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/powerpc/include/asm/mmu.h b/arch/powerpc/include/asm/mmu.h > index 27016b98ecb2..8abe8e42e045 100644 > --- a/arch/powerpc/include/asm/mmu.h > +++ b/arch/powerpc/include/asm/mmu.h > @@ -324,7 +324,7 @@ static inline void assert_pte_locked(struct mm_struct *mm, unsigned long addr) > } > #endif /* !CONFIG_DEBUG_VM */ > > -static inline bool radix_enabled(void) > +static __always_inline bool radix_enabled(void) > { > return mmu_has_feature(MMU_FTR_TYPE_RADIX); > } > -- > 2.25.1 Thanks Jordan! Your patch works well and my kernel build completes. Tested on v5.14-rc4. Only getting some warnings now: [...] CHK include/generated/autoksyms.h GEN .version CHK include/generated/compile.h LD vmlinux.o MODPOST vmlinux.symvers MODINFO modules.builtin.modinfo GEN modules.builtin LD .tmp_vmlinux.kallsyms1 ld: warning: creating DT_TEXTREL in a PIE KSYMS .tmp_vmlinux.kallsyms1.S AS .tmp_vmlinux.kallsyms1.S LD .tmp_vmlinux.kallsyms2 ld: warning: creating DT_TEXTREL in a PIE KSYMS .tmp_vmlinux.kallsyms2.S AS .tmp_vmlinux.kallsyms2.S LD vmlinux ld: warning: creating DT_TEXTREL in a PIE SORTTAB vmlinux SYSMAP System.map CHKHEAD vmlinux CHKREL vmlinux GEN .version CHK include/generated/compile.h UPD include/generated/compile.h CC init/version.o AR init/built-in.a LD vmlinux.o MODPOST vmlinux.symvers MODINFO modules.builtin.modinfo GEN modules.builtin LD .tmp_vmlinux.kallsyms1 ld: warning: creating DT_TEXTREL in a PIE KSYMS .tmp_vmlinux.kallsyms1.S AS .tmp_vmlinux.kallsyms1.S LD .tmp_vmlinux.kallsyms2 ld: warning: creating DT_TEXTREL in a PIE KSYMS .tmp_vmlinux.kallsyms2.S AS .tmp_vmlinux.kallsyms2.S LD vmlinux ld: warning: creating DT_TEXTREL in a PIE SORTTAB vmlinux SYSMAP System.map CHKHEAD vmlinux CHKREL vmlinux MODPOST modules-only.symvers [...]
On Wed, 4 Aug 2021 11:37:24 +1000, Jordan Niethe wrote: > This is the same as commit acdad8fb4a15 ("powerpc: Force inlining of > mmu_has_feature to fix build failure") but for radix_enabled(). The > config in the linked bugzilla causes the following build failure: > > LD .tmp_vmlinux.kallsyms1 > powerpc64-linux-ld: arch/powerpc/mm/pgtable.o: in function `.__ptep_set_access_flags': > pgtable.c:(.text+0x17c): undefined reference to `.radix__ptep_set_access_flags' ... > > [...] Applied to powerpc/next. [1/1] powerpc: Always inline radix_enabled() to fix build failure https://git.kernel.org/powerpc/c/27fd1111051dc218e5b6cb2da5dbb3f342879ff1 cheers
diff --git a/arch/powerpc/include/asm/mmu.h b/arch/powerpc/include/asm/mmu.h index 27016b98ecb2..8abe8e42e045 100644 --- a/arch/powerpc/include/asm/mmu.h +++ b/arch/powerpc/include/asm/mmu.h @@ -324,7 +324,7 @@ static inline void assert_pte_locked(struct mm_struct *mm, unsigned long addr) } #endif /* !CONFIG_DEBUG_VM */ -static inline bool radix_enabled(void) +static __always_inline bool radix_enabled(void) { return mmu_has_feature(MMU_FTR_TYPE_RADIX); }
This is the same as commit acdad8fb4a15 ("powerpc: Force inlining of mmu_has_feature to fix build failure") but for radix_enabled(). The config in the linked bugzilla causes the following build failure: LD .tmp_vmlinux.kallsyms1 powerpc64-linux-ld: arch/powerpc/mm/pgtable.o: in function `.__ptep_set_access_flags': pgtable.c:(.text+0x17c): undefined reference to `.radix__ptep_set_access_flags' powerpc64-linux-ld: arch/powerpc/mm/pageattr.o: in function `.change_page_attr': pageattr.c:(.text+0xc0): undefined reference to `.radix__flush_tlb_kernel_range' powerpc64-linux-ld: arch/powerpc/mm/pageattr.o: in function `.set_page_attr': pageattr.c:(.text+0x228): undefined reference to `.radix__flush_tlb_kernel_range' powerpc64-linux-ld: arch/powerpc/mm/book3s64/mmu_context.o:(.toc+0x0): undefined reference to `mmu_pid_bits' powerpc64-linux-ld: arch/powerpc/mm/book3s64/mmu_context.o:(.toc+0x8): undefined reference to `mmu_base_pid' powerpc64-linux-ld: arch/powerpc/mm/book3s64/pgtable.o: in function `.pmd_hugepage_update': pgtable.c:(.text+0x98): undefined reference to `.radix__pmd_hugepage_update' powerpc64-linux-ld: arch/powerpc/mm/book3s64/pgtable.o: in function `.do_serialize': pgtable.c:(.text+0xdc): undefined reference to `.exit_lazy_flush_tlb' powerpc64-linux-ld: arch/powerpc/mm/book3s64/pgtable.o: in function `.pmdp_set_access_flags': pgtable.c:(.text+0x258): undefined reference to `.radix__ptep_set_access_flags' powerpc64-linux-ld: arch/powerpc/mm/book3s64/pgtable.o: in function `.pmdp_invalidate': pgtable.c:(.text+0x4a8): undefined reference to `.radix__flush_pmd_tlb_range' powerpc64-linux-ld: arch/powerpc/mm/book3s64/pgtable.o: in function `.pmdp_huge_get_and_clear_full': pgtable.c:(.text+0x510): undefined reference to `.radix__pmdp_huge_get_and_clear' powerpc64-linux-ld: pgtable.c:(.text+0x550): undefined reference to `.radix__flush_pmd_tlb_range' powerpc64-linux-ld: arch/powerpc/mm/book3s64/pgtable.o: in function `.mmu_cleanup_all': pgtable.c:(.text+0x674): undefined reference to `.radix__mmu_cleanup_all' powerpc64-linux-ld: arch/powerpc/mm/book3s64/pgtable.o: in function `.ptep_modify_prot_commit': pgtable.c:(.text+0xdf8): undefined reference to `.radix__ptep_modify_prot_commit' powerpc64-linux-ld: arch/powerpc/lib/code-patching.o: in function `.patch_instruction': code-patching.c:(.text+0x318): undefined reference to `.radix__map_kernel_page' powerpc64-linux-ld: code-patching.c:(.text+0x498): undefined reference to `.radix__flush_tlb_kernel_range' powerpc64-linux-ld: kernel/fork.o: in function `.dup_mm': fork.c:(.text+0x2138): undefined reference to `.radix__flush_tlb_mm' powerpc64-linux-ld: mm/memory.o: in function `.unmap_page_range': memory.c:(.text+0x305c): undefined reference to `.radix__tlb_flush' powerpc64-linux-ld: mm/memory.o: in function `.do_wp_page': memory.c:(.text+0x36cc): undefined reference to `.radix__flush_tlb_page' powerpc64-linux-ld: mm/memory.o: in function `.do_set_pmd': memory.c:(.text+0x42f8): undefined reference to `.radix__pgtable_trans_huge_deposit' powerpc64-linux-ld: mm/memory.o: in function `.__handle_mm_fault': memory.c:(.text+0x6af8): undefined reference to `.radix__flush_tlb_page' powerpc64-linux-ld: mm/mprotect.o: in function `.change_protection': mprotect.c:(.text+0x274): undefined reference to `.radix__flush_tlb_range' powerpc64-linux-ld: mm/mremap.o: in function `.flush_tlb_range': mremap.c:(.text+0x500): undefined reference to `.radix__flush_tlb_range' powerpc64-linux-ld: mm/pgtable-generic.o: in function `.ptep_clear_flush': pgtable-generic.c:(.text+0xb0): undefined reference to `.radix__flush_tlb_page' powerpc64-linux-ld: mm/pgtable-generic.o: in function `.pmdp_huge_clear_flush': pgtable-generic.c:(.text+0x160): undefined reference to `.radix__pmdp_huge_get_and_clear' powerpc64-linux-ld: pgtable-generic.c:(.text+0x198): undefined reference to `.radix__flush_pmd_tlb_range' powerpc64-linux-ld: mm/rmap.o: in function `.try_to_unmap_one': rmap.c:(.text+0x1d60): undefined reference to `.radix__flush_tlb_range' powerpc64-linux-ld: mm/rmap.o: in function `.try_to_migrate_one': rmap.c:(.text+0x222c): undefined reference to `.radix__flush_tlb_range' powerpc64-linux-ld: mm/vmalloc.o: in function `.flush_tlb_kernel_range': vmalloc.c:(.text+0x5a8): undefined reference to `.radix__flush_tlb_kernel_range' powerpc64-linux-ld: mm/hugetlb.o: in function `.hugetlb_cow': hugetlb.c:(.text+0x53b0): undefined reference to `.radix__flush_hugetlb_page' powerpc64-linux-ld: mm/hugetlb.o: in function `.hugetlb_change_protection': hugetlb.c:(.text+0x6558): undefined reference to `.radix__flush_hugetlb_tlb_range' powerpc64-linux-ld: mm/hugetlb.o: in function `.hugetlb_unshare_all_pmds': hugetlb.c:(.text+0x70f0): undefined reference to `.radix__flush_hugetlb_tlb_range' powerpc64-linux-ld: mm/huge_memory.o: in function `.pgtable_trans_huge_deposit': huge_memory.c:(.text+0x6b0): undefined reference to `.radix__pgtable_trans_huge_deposit' powerpc64-linux-ld: mm/huge_memory.o: in function `.pgtable_trans_huge_withdraw': huge_memory.c:(.text+0x6f8): undefined reference to `.radix__pgtable_trans_huge_withdraw' powerpc64-linux-ld: mm/huge_memory.o: in function `.pmd_hugepage_update.isra.0': huge_memory.c:(.text+0xa28): undefined reference to `.radix__pmd_hugepage_update' powerpc64-linux-ld: mm/huge_memory.o: in function `.do_huge_pmd_numa_page': huge_memory.c:(.text+0x2184): undefined reference to `.radix__flush_tlb_range' powerpc64-linux-ld: mm/huge_memory.o: in function `.move_huge_pmd': huge_memory.c:(.text+0x270c): undefined reference to `.radix__pmdp_huge_get_and_clear' powerpc64-linux-ld: huge_memory.c:(.text+0x27a8): undefined reference to `.radix__flush_tlb_range' powerpc64-linux-ld: mm/khugepaged.o: in function `.pmdp_collapse_flush': khugepaged.c:(.text+0x19c8): undefined reference to `.radix__pmdp_collapse_flush' powerpc64-linux-ld: mm/khugepaged.o: in function `.khugepaged': khugepaged.c:(.text+0x4eec): undefined reference to `.radix__pgtable_trans_huge_deposit' powerpc64-linux-ld: fs/proc/task_mmu.o: in function `.clear_refs_write': task_mmu.c:(.text+0x2340): undefined reference to `.radix__flush_tlb_mm' This is due to radix_enabled() not being inlined. See extract from building with -Winline: In file included from arch/powerpc/include/asm/lppaca.h:46, from arch/powerpc/include/asm/paca.h:17, from arch/powerpc/include/asm/current.h:13, from include/linux/thread_info.h:23, from include/asm-generic/preempt.h:5, from ./arch/powerpc/include/generated/asm/preempt.h:1, from include/linux/preempt.h:78, from include/linux/spinlock.h:51, from include/linux/mmzone.h:8, from include/linux/gfp.h:6, from arch/powerpc/mm/pgtable.c:21: arch/powerpc/include/asm/book3s/64/pgtable.h: In function '__ptep_set_access_flags': arch/powerpc/include/asm/mmu.h:327:20: error: inlining failed in call to 'radix_enabled': call is unlikely and code size would grow [-Werror=inline] The code relies on constant folding of MMU_FTRS_POSSIBLE at buildtime and elimination of non possible parts of code at compile time. For this to work radix_enabled() must be inlined so make it __always_inline. Link: https://bugzilla.kernel.org/show_bug.cgi?id=213803 Reported-by: Erhard F. <erhard_f@mailbox.org> Suggested-by: Michael Ellerman <mpe@ellerman.id.au> Signed-off-by: Jordan Niethe <jniethe5@gmail.com> --- arch/powerpc/include/asm/mmu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)