Message ID | 20211125125025.1472060-1-npiggin@gmail.com (mailing list archive) |
---|---|
Headers | show |
Series | powerpc: Make hash MMU code build configurable | expand |
Le 25/11/2021 à 13:50, Nicholas Piggin a écrit : > Now that there's a platform that can make good use of it, here's > a series that can prevent the hash MMU code being built for 64s > platforms that don't need it. # CONFIG_PPC_64S_HASH_MMU is not set <stdin>:1559:2: warning: #warning syscall futex_waitv not implemented [-Wcpp] arch/powerpc/platforms/cell/spu_base.c: In function '__spu_kernel_slb': arch/powerpc/platforms/cell/spu_base.c:215:38: error: 'mmu_linear_psize' undeclared (first use in this function); did you mean 'mmu_virtual_psize'? 215 | llp = mmu_psize_defs[mmu_linear_psize].sllp; | ^~~~~~~~~~~~~~~~ | mmu_virtual_psize arch/powerpc/platforms/cell/spu_base.c:215:38: note: each undeclared identifier is reported only once for each function it appears in make[3]: *** [scripts/Makefile.build:287: arch/powerpc/platforms/cell/spu_base.o] Error 1 make[2]: *** [scripts/Makefile.build:549: arch/powerpc/platforms/cell] Error 2 make[1]: *** [scripts/Makefile.build:549: arch/powerpc/platforms] Error 2 make: *** [Makefile:1846: arch/powerpc] Error 2 > > Since v3: > - Merged microwatt patches into 1. > - Fix some changelogs, titles, comments. > - Keep MMU_FTR_HPTE_TABLE in the features when booting radix if hash > support is is configured because it will be needed for KVM radix host > hash guest (when we extend this option to KVM). > - Accounted for hopefully all review comments (thanks Christophe) > > Since v2: > - Split MMU_FTR_HPTE_TABLE clearing for radix boot into its own patch. > - Remove memremap_compat_align from other sub archs entirely. > - Flip patch order of the 2 main patches to put Kconfig change first. > - Fixed Book3S/32 xmon segment dumping bug. > - Removed a few more ifdefs, changed numbers to use SZ_ definitions, > etc. > - Fixed microwatt defconfig so it should actually disable hash MMU now. > > Since v1: > - Split out most of the Kconfig change from the conditional compilation > changes. > - Split out several more changes into preparatory patches. > - Reduced some ifdefs. > - Caught a few missing hash bits: pgtable dump, lkdtm, > memremap_compat_align. > > Since RFC: > - Split out large code movement from other changes. > - Used mmu ftr test constant folding rather than adding new constant > true/false for radix_enabled(). > - Restore tlbie trace point that had to be commented out in the > previous. > - Avoid minor (probably unreachable) behaviour change in machine check > handler when hash was not compiled. > - Fix microwatt updates so !HASH is not enforced. > - Rebase, build fixes. > > Thanks, > Nick > > Nicholas Piggin (17): > powerpc: Remove unused FW_FEATURE_NATIVE references > powerpc: Rename PPC_NATIVE to PPC_HASH_MMU_NATIVE > powerpc/pseries: Stop selecting PPC_HASH_MMU_NATIVE > powerpc/64s: Move and rename do_bad_slb_fault as it is not hash > specific > powerpc/pseries: move process table registration away from > hash-specific code > powerpc/pseries: lparcfg don't include slb_size line in radix mode > powerpc/64s: move THP trace point creation out of hash specific file > powerpc/64s: Make flush_and_reload_slb a no-op when radix is enabled > powerpc/64s: move page size definitions from hash specific file > powerpc/64s: Rename hash_hugetlbpage.c to hugetlbpage.c > powerpc/64: pcpu setup avoid reading mmu_linear_psize on 64e or radix > powerpc: make memremap_compat_align 64s-only > powerpc/64e: remove mmu_linear_psize > powerpc/64s: Fix radix MMU when MMU_FTR_HPTE_TABLE is clear > powerpc/64s: Make hash MMU support configurable > powerpc/64s: Move hash MMU support code under CONFIG_PPC_64S_HASH_MMU > powerpc/microwatt: add POWER9_CPU, clear PPC_64S_HASH_MMU > > arch/powerpc/Kconfig | 5 +- > arch/powerpc/configs/microwatt_defconfig | 3 +- > arch/powerpc/include/asm/book3s/64/mmu.h | 21 +++- > .../include/asm/book3s/64/tlbflush-hash.h | 6 + > arch/powerpc/include/asm/book3s/64/tlbflush.h | 4 - > arch/powerpc/include/asm/book3s/pgtable.h | 4 + > arch/powerpc/include/asm/firmware.h | 8 -- > arch/powerpc/include/asm/interrupt.h | 2 +- > arch/powerpc/include/asm/mmu.h | 16 ++- > arch/powerpc/include/asm/mmu_context.h | 2 + > arch/powerpc/include/asm/nohash/mmu-book3e.h | 1 - > arch/powerpc/include/asm/paca.h | 8 ++ > arch/powerpc/kernel/asm-offsets.c | 2 + > arch/powerpc/kernel/dt_cpu_ftrs.c | 14 ++- > arch/powerpc/kernel/entry_64.S | 4 +- > arch/powerpc/kernel/exceptions-64s.S | 20 +++- > arch/powerpc/kernel/mce.c | 2 +- > arch/powerpc/kernel/mce_power.c | 16 ++- > arch/powerpc/kernel/paca.c | 18 ++- > arch/powerpc/kernel/process.c | 13 +- > arch/powerpc/kernel/prom.c | 2 + > arch/powerpc/kernel/setup_64.c | 26 +++- > arch/powerpc/kexec/core_64.c | 4 +- > arch/powerpc/kexec/ranges.c | 4 + > arch/powerpc/kvm/Kconfig | 1 + > arch/powerpc/mm/book3s64/Makefile | 19 +-- > arch/powerpc/mm/book3s64/hash_native.c | 104 ---------------- > arch/powerpc/mm/book3s64/hash_pgtable.c | 1 - > arch/powerpc/mm/book3s64/hash_utils.c | 111 +++++++++++++++++- > .../{hash_hugetlbpage.c => hugetlbpage.c} | 2 + > arch/powerpc/mm/book3s64/mmu_context.c | 32 ++++- > arch/powerpc/mm/book3s64/pgtable.c | 27 +++++ > arch/powerpc/mm/book3s64/radix_pgtable.c | 4 + > arch/powerpc/mm/book3s64/slb.c | 16 --- > arch/powerpc/mm/book3s64/trace.c | 8 ++ > arch/powerpc/mm/copro_fault.c | 2 + > arch/powerpc/mm/fault.c | 24 ++++ > arch/powerpc/mm/init_64.c | 13 +- > arch/powerpc/mm/ioremap.c | 20 ---- > arch/powerpc/mm/nohash/tlb.c | 9 -- > arch/powerpc/mm/pgtable.c | 9 +- > arch/powerpc/mm/ptdump/Makefile | 2 +- > arch/powerpc/platforms/52xx/Kconfig | 2 +- > arch/powerpc/platforms/Kconfig | 4 +- > arch/powerpc/platforms/Kconfig.cputype | 23 +++- > arch/powerpc/platforms/cell/Kconfig | 2 +- > arch/powerpc/platforms/chrp/Kconfig | 2 +- > arch/powerpc/platforms/embedded6xx/Kconfig | 2 +- > arch/powerpc/platforms/maple/Kconfig | 2 +- > arch/powerpc/platforms/microwatt/Kconfig | 1 - > arch/powerpc/platforms/pasemi/Kconfig | 2 +- > arch/powerpc/platforms/powermac/Kconfig | 2 +- > arch/powerpc/platforms/powernv/Kconfig | 2 +- > arch/powerpc/platforms/powernv/idle.c | 2 + > arch/powerpc/platforms/powernv/setup.c | 2 + > arch/powerpc/platforms/pseries/Kconfig | 1 - > arch/powerpc/platforms/pseries/lpar.c | 67 ++++++----- > arch/powerpc/platforms/pseries/lparcfg.c | 5 +- > arch/powerpc/platforms/pseries/mobility.c | 6 + > arch/powerpc/platforms/pseries/ras.c | 2 + > arch/powerpc/platforms/pseries/reconfig.c | 2 + > arch/powerpc/platforms/pseries/setup.c | 6 +- > arch/powerpc/xmon/xmon.c | 8 +- > drivers/misc/lkdtm/Makefile | 2 +- > drivers/misc/lkdtm/core.c | 2 +- > 65 files changed, 466 insertions(+), 292 deletions(-) > rename arch/powerpc/mm/book3s64/{hash_hugetlbpage.c => hugetlbpage.c} (99%) > create mode 100644 arch/powerpc/mm/book3s64/trace.c >
Le 25/11/2021 à 17:35, Christophe Leroy a écrit : > > > Le 25/11/2021 à 13:50, Nicholas Piggin a écrit : >> Now that there's a platform that can make good use of it, here's >> a series that can prevent the hash MMU code being built for 64s >> platforms that don't need it. > > # CONFIG_PPC_64S_HASH_MMU is not set > > > <stdin>:1559:2: warning: #warning syscall futex_waitv not implemented > [-Wcpp] > arch/powerpc/platforms/cell/spu_base.c: In function '__spu_kernel_slb': > arch/powerpc/platforms/cell/spu_base.c:215:38: error: 'mmu_linear_psize' > undeclared (first use in this function); did you mean 'mmu_virtual_psize'? > 215 | llp = mmu_psize_defs[mmu_linear_psize].sllp; > | ^~~~~~~~~~~~~~~~ > | mmu_virtual_psize > arch/powerpc/platforms/cell/spu_base.c:215:38: note: each undeclared > identifier is reported only once for each function it appears in > make[3]: *** [scripts/Makefile.build:287: > arch/powerpc/platforms/cell/spu_base.o] Error 1 > make[2]: *** [scripts/Makefile.build:549: arch/powerpc/platforms/cell] > Error 2 > make[1]: *** [scripts/Makefile.build:549: arch/powerpc/platforms] Error 2 > make: *** [Makefile:1846: arch/powerpc] Error 2 > > With CONFIG_SPU_BASE removed, the above voids and I get to the final link with the following errors: powerpc64-linux-gnu-ld: warning: discarding dynamic section .glink powerpc64-linux-gnu-ld: warning: discarding dynamic section .plt powerpc64-linux-gnu-ld: linkage table error against `update_mmu_cache' powerpc64-linux-gnu-ld: stubs don't match calculated size powerpc64-linux-gnu-ld: can not build stubs: bad value powerpc64-linux-gnu-ld: arch/powerpc/platforms/pasemi/setup.o:(.toc+0x0): undefined reference to `mmu_slb_size' powerpc64-linux-gnu-ld: arch/powerpc/platforms/cell/iommu.o:(.toc+0x0): undefined reference to `htab_address' powerpc64-linux-gnu-ld: arch/powerpc/platforms/cell/iommu.o:(.toc+0x8): undefined reference to `htab_size_bytes' powerpc64-linux-gnu-ld: arch/powerpc/platforms/ps3/htab.o:(.toc+0x0): undefined reference to `mmu_hash_ops' powerpc64-linux-gnu-ld: mm/filemap.o: in function `.filemap_map_pages': (.text+0x6f08): undefined reference to `.update_mmu_cache' powerpc64-linux-gnu-ld: mm/gup.o: in function `.follow_page_pte': gup.c:(.text+0x1b38): undefined reference to `.update_mmu_cache' powerpc64-linux-gnu-ld: mm/memory.o: in function `.wp_page_copy': memory.c:(.text+0xd84): undefined reference to `.update_mmu_cache' powerpc64-linux-gnu-ld: memory.c:(.text+0x1528): undefined reference to `.update_mmu_cache' powerpc64-linux-gnu-ld: mm/memory.o: in function `.finish_mkwrite_fault': (.text+0x3d6c): undefined reference to `.update_mmu_cache' powerpc64-linux-gnu-ld: mm/memory.o:memory.c:(.text+0x4254): more undefined references to `.update_mmu_cache' follow make: *** [Makefile:1161: vmlinux] Error 1
Excerpts from Christophe Leroy's message of November 26, 2021 3:35 am: > > > Le 25/11/2021 à 17:35, Christophe Leroy a écrit : >> >> >> Le 25/11/2021 à 13:50, Nicholas Piggin a écrit : >>> Now that there's a platform that can make good use of it, here's >>> a series that can prevent the hash MMU code being built for 64s >>> platforms that don't need it. >> >> # CONFIG_PPC_64S_HASH_MMU is not set >> >> >> <stdin>:1559:2: warning: #warning syscall futex_waitv not implemented >> [-Wcpp] >> arch/powerpc/platforms/cell/spu_base.c: In function '__spu_kernel_slb': >> arch/powerpc/platforms/cell/spu_base.c:215:38: error: 'mmu_linear_psize' >> undeclared (first use in this function); did you mean 'mmu_virtual_psize'? >> 215 | llp = mmu_psize_defs[mmu_linear_psize].sllp; >> | ^~~~~~~~~~~~~~~~ >> | mmu_virtual_psize >> arch/powerpc/platforms/cell/spu_base.c:215:38: note: each undeclared >> identifier is reported only once for each function it appears in >> make[3]: *** [scripts/Makefile.build:287: >> arch/powerpc/platforms/cell/spu_base.o] Error 1 >> make[2]: *** [scripts/Makefile.build:549: arch/powerpc/platforms/cell] >> Error 2 >> make[1]: *** [scripts/Makefile.build:549: arch/powerpc/platforms] Error 2 >> make: *** [Makefile:1846: arch/powerpc] Error 2 >> >> > > > With CONFIG_SPU_BASE removed, the above voids and I get to the final > link with the following errors: This is building cell platform with POWER9 CPU and !HASH? We don't have to make that build, just prevent the config. I had that in a previous version which also had platforms select hash, but we went to just CPU. But now there's no constraint that prevents cell+POWER9 even though it doesn't make sense. Not sure the best way to fix it. I'll think about it. Thanks, Nick
Le 26/11/2021 à 01:55, Nicholas Piggin a écrit : > Excerpts from Christophe Leroy's message of November 26, 2021 3:35 am: >> >> >> Le 25/11/2021 à 17:35, Christophe Leroy a écrit : >>> >>> >>> Le 25/11/2021 à 13:50, Nicholas Piggin a écrit : >>>> Now that there's a platform that can make good use of it, here's >>>> a series that can prevent the hash MMU code being built for 64s >>>> platforms that don't need it. >>> >>> # CONFIG_PPC_64S_HASH_MMU is not set >>> >>> >>> <stdin>:1559:2: warning: #warning syscall futex_waitv not implemented >>> [-Wcpp] >>> arch/powerpc/platforms/cell/spu_base.c: In function '__spu_kernel_slb': >>> arch/powerpc/platforms/cell/spu_base.c:215:38: error: 'mmu_linear_psize' >>> undeclared (first use in this function); did you mean 'mmu_virtual_psize'? >>> 215 | llp = mmu_psize_defs[mmu_linear_psize].sllp; >>> | ^~~~~~~~~~~~~~~~ >>> | mmu_virtual_psize >>> arch/powerpc/platforms/cell/spu_base.c:215:38: note: each undeclared >>> identifier is reported only once for each function it appears in >>> make[3]: *** [scripts/Makefile.build:287: >>> arch/powerpc/platforms/cell/spu_base.o] Error 1 >>> make[2]: *** [scripts/Makefile.build:549: arch/powerpc/platforms/cell] >>> Error 2 >>> make[1]: *** [scripts/Makefile.build:549: arch/powerpc/platforms] Error 2 >>> make: *** [Makefile:1846: arch/powerpc] Error 2 >>> >>> >> >> >> With CONFIG_SPU_BASE removed, the above voids and I get to the final >> link with the following errors: > > This is building cell platform with POWER9 CPU and !HASH? I took ppc64_defconfig, changed CPU to POWER9 and removed VIRTUALIZATION and removed CONFIG_PPC_64S_HASH_MMU. > > We don't have to make that build, just prevent the config. I had that in > a previous version which also had platforms select hash, but we went to > just CPU. But now there's no constraint that prevents cell+POWER9 even > though it doesn't make sense. > > Not sure the best way to fix it. I'll think about it. > Force selection of CONFIG_PPC_64S_HASH_MMU by the CELL platform ?