• Christophe Leroy's avatar
    powerpc: Force inlining of mmu_has_feature to fix build failure · acdad8fb
    Christophe Leroy authored
    The test robot has managed to generate a random config leading
    to following build failure:
    
      LD      .tmp_vmlinux.kallsyms1
    powerpc64-linux-ld: arch/powerpc/mm/pgtable.o: in function `ptep_set_access_flags':
    pgtable.c:(.text.ptep_set_access_flags+0xf0): undefined reference to `hash__flush_tlb_page'
    powerpc64-linux-ld: arch/powerpc/mm/book3s32/mmu.o: in function `MMU_init_hw_patch':
    mmu.c:(.init.text+0x452): undefined reference to `patch__hash_page_A0'
    powerpc64-linux-ld: mmu.c:(.init.text+0x45e): undefined reference to `patch__hash_page_A0'
    powerpc64-linux-ld: mmu.c:(.init.text+0x46a): undefined reference to `patch__hash_page_A1'
    powerpc64-linux-ld: mmu.c:(.init.text+0x476): undefined reference to `patch__hash_page_A1'
    powerpc64-linux-ld: mmu.c:(.init.text+0x482): undefined reference to `patch__hash_page_A2'
    powerpc64-linux-ld: mmu.c:(.init.text+0x48e): undefined reference to `patch__hash_page_A2'
    powerpc64-linux-ld: mmu.c:(.init.text+0x49e): undefined reference to `patch__hash_page_B'
    powerpc64-linux-ld: mmu.c:(.init.text+0x4aa): undefined reference to `patch__hash_page_B'
    powerpc64-linux-ld: mmu.c:(.init.text+0x4b6): undefined reference to `patch__hash_page_C'
    powerpc64-linux-ld: mmu.c:(.init.text+0x4c2): undefined reference to `patch__hash_page_C'
    powerpc64-linux-ld: mmu.c:(.init.text+0x4ce): undefined reference to `patch__flush_hash_A0'
    powerpc64-linux-ld: mmu.c:(.init.text+0x4da): undefined reference to `patch__flush_hash_A0'
    powerpc64-linux-ld: mmu.c:(.init.text+0x4e6): undefined reference to `patch__flush_hash_A1'
    powerpc64-linux-ld: mmu.c:(.init.text+0x4f2): undefined reference to `patch__flush_hash_A1'
    powerpc64-linux-ld: mmu.c:(.init.text+0x4fe): undefined reference to `patch__flush_hash_A2'
    powerpc64-linux-ld: mmu.c:(.init.text+0x50a): undefined reference to `patch__flush_hash_A2'
    powerpc64-linux-ld: mmu.c:(.init.text+0x522): undefined reference to `patch__flush_hash_B'
    powerpc64-linux-ld: mmu.c:(.init.text+0x532): undefined reference to `patch__flush_hash_B'
    powerpc64-linux-ld: arch/powerpc/mm/book3s32/mmu.o: in function `update_mmu_cache':
    mmu.c:(.text.update_mmu_cache+0xa0): undefined reference to `add_hash_page'
    powerpc64-linux-ld: mm/memory.o: in function `zap_pte_range':
    memory.c:(.text.zap_pte_range+0x160): undefined reference to `flush_hash_pages'
    powerpc64-linux-ld: mm/memory.o: in function `handle_pte_fault':
    memory.c:(.text.handle_pte_fault+0x180): undefined reference to `hash__flush_tlb_page'
    
    This is due to mmu_has_feature() not being inlined. See extract of build of
    mmu.c with -Winline:
    
    In file included from ./include/linux/mm_types.h:19,
                     from ./include/linux/mmzone.h:21,
                     from ./include/linux/gfp.h:6,
                     from ./include/linux/mm.h:10,
                     from arch/powerpc/mm/book3s32/mmu.c:21:
    ./arch/powerpc/include/asm/mmu.h: In function 'find_free_bat':
    ./arch/powerpc/include/asm/mmu.h:231:20: warning: inlining failed in call to 'early_mmu_has_feature': call is unlikely and code size would grow [-Winline]
      231 | static inline bool early_mmu_has_feature(unsigned long feature)
          |                    ^~~~~~~~~~~~~~~~~~~~~
    ./arch/powerpc/include/asm/mmu.h:291:9: note: called from here
      291 |  return early_mmu_has_feature(feature);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    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, mmu_has_feature() and early_mmu_has_feature()
    must be inlined.
    
    Fixes: 259149cf ("powerpc/32s: Only build hash code when CONFIG_PPC_BOOK3S_604 is selected")
    Reported-by: default avatarkernel test robot <lkp@intel.com>
    Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/cf61345912c078c96f171afd0fcc48ef27cbdc3f.1614443418.git.christophe.leroy@csgroup.eu
    acdad8fb
mmu.h 10.9 KB