# git rev-parse -q --verify 34973baea0f0b8ae6e013abdfbd9b97f1bfdde99^{commit} 34973baea0f0b8ae6e013abdfbd9b97f1bfdde99 already have revision, skipping fetch # git checkout -q -f -B kisskb 34973baea0f0b8ae6e013abdfbd9b97f1bfdde99 # git clean -qxdf # git log -1 commit 34973baea0f0b8ae6e013abdfbd9b97f1bfdde99 Author: Nicholas Piggin Date: Mon Mar 20 16:01:52 2017 +1000 powerpc/64s: idle POWER8 avoid full state loss recovery where possible If not all threads were in winkle, full state loss recovery is not necessary and can be avoided. A previous patch removed this optimisation due to some complexity with the implementation. Re-implement it by counting the number of threads in winkle with the per-core idle state. Only restore full state loss if all threads were in winkle. This has a small window of false positives right before threads execute winkle and just after they wake up, when the winkle count does not reflect the true number of threads in winkle. This is not a significant problem in comparison with even the minimum winkle duration. For correctness, a false positive is not a problem (only false negatives would be). Reviewed-by: Gautham R. Shenoy Signed-off-by: Nicholas Piggin Signed-off-by: Michael Ellerman # < /opt/cross/kisskb/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux-gcc --version # < git log --format=%s --max-count=1 34973baea0f0b8ae6e013abdfbd9b97f1bfdde99 # < make -j 48 ARCH=powerpc O=/home/kisskb/slave/build/powerpc-next_44x_akebono_defconfig_powerpc CROSS_COMPILE=/opt/cross/kisskb/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux- 44x/akebono_defconfig # make -j 48 ARCH=powerpc O=/home/kisskb/slave/build/powerpc-next_44x_akebono_defconfig_powerpc CROSS_COMPILE=/opt/cross/kisskb/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux- make[1]: Entering directory '/home/kisskb/slave/build/powerpc-next_44x_akebono_defconfig_powerpc' GEN ./Makefile scripts/kconfig/conf --silentoldconfig Kconfig CHK include/config/kernel.release GEN ./Makefile WRAP arch/powerpc/include/generated/asm/clkdev.h WRAP arch/powerpc/include/generated/asm/div64.h WRAP arch/powerpc/include/generated/asm/export.h WRAP arch/powerpc/include/generated/asm/irq_regs.h WRAP arch/powerpc/include/generated/asm/irq_work.h WRAP arch/powerpc/include/generated/asm/local64.h WRAP arch/powerpc/include/generated/asm/mcs_spinlock.h WRAP arch/powerpc/include/generated/asm/preempt.h WRAP arch/powerpc/include/generated/asm/rwsem.h WRAP arch/powerpc/include/generated/asm/vtime.h CHK include/generated/uapi/linux/version.h UPD include/generated/uapi/linux/version.h UPD include/config/kernel.release Using /home/kisskb/slave/src as source for kernel CHK include/generated/utsrelease.h UPD include/generated/utsrelease.h HOSTCC scripts/sortextable HOSTCC scripts/kallsyms HOSTCC scripts/dtc/dtc.o HOSTCC scripts/dtc/flattree.o HOSTCC scripts/mod/mk_elfconfig HOSTCC scripts/dtc/fstree.o HOSTCC scripts/dtc/data.o HOSTCC scripts/dtc/livetree.o CC scripts/mod/empty.o CC scripts/mod/devicetable-offsets.s HOSTCC scripts/dtc/treesource.o HOSTCC scripts/dtc/srcpos.o HOSTCC scripts/dtc/checks.o HOSTCC scripts/dtc/util.o SHIPPED scripts/dtc/dtc-lexer.lex.c SHIPPED scripts/dtc/dtc-parser.tab.c SHIPPED scripts/dtc/dtc-parser.tab.h HOSTCC scripts/dtc/dtc-parser.tab.o HOSTCC scripts/dtc/dtc-lexer.lex.o GEN scripts/mod/devicetable-offsets.h MKELF scripts/mod/elfconfig.h HOSTCC scripts/mod/modpost.o CC kernel/bounds.s CHK include/generated/timeconst.h HOSTCC scripts/mod/sumversion.o HOSTCC scripts/mod/file2alias.o UPD include/generated/timeconst.h CHK include/generated/bounds.h UPD include/generated/bounds.h CC arch/powerpc/kernel/asm-offsets.s HOSTLD scripts/dtc/dtc CHK include/generated/asm-offsets.h UPD include/generated/asm-offsets.h CALL /home/kisskb/slave/src/scripts/checksyscalls.sh HOSTLD scripts/mod/modpost HOSTCC usr/gen_init_cpio CC init/main.o CHK include/generated/compile.h CC init/do_mounts.o CC init/do_mounts_rd.o CC init/init_task.o CC init/do_mounts_initrd.o CC init/initramfs.o UPD include/generated/compile.h CC init/version.o CC arch/powerpc/mm/fault.o CC arch/powerpc/mm/pgtable.o CC arch/powerpc/mm/mem.o CC arch/powerpc/mm/init_32.o CC arch/powerpc/mm/mmap.o CC arch/powerpc/mm/mmu_context_nohash.o CC arch/powerpc/mm/init-common.o CC arch/powerpc/mm/pgtable_32.o CC arch/powerpc/mm/tlb_nohash.o AS arch/powerpc/mm/tlb_nohash_low.o CC arch/powerpc/mm/highmem.o CC arch/powerpc/mm/44x_mmu.o CC arch/powerpc/mm/hugetlbpage.o AS arch/powerpc/lib/string.o CC arch/powerpc/lib/alloc.o AS arch/powerpc/lib/crtsavres.o CC arch/powerpc/lib/code-patching.o AS arch/powerpc/lib/copy_32.o AS arch/powerpc/lib/checksum_32.o CC arch/powerpc/lib/feature-fixups.o CC arch/powerpc/lib/checksum_wrappers.o AS arch/powerpc/lib/div64.o CC arch/powerpc/lib/sstep.o AS arch/powerpc/lib/ldstfp.o In file included from /home/kisskb/slave/src/arch/powerpc/mm/pgtable.c:32:0: /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h: In function 'mm_is_core_local': /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h:75:21: error: 'mm_context_t' has no member named 'npu_context' /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h: In function 'mm_is_thread_local': /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h:81:21: error: 'mm_context_t' has no member named 'npu_context' /home/kisskb/slave/src/scripts/Makefile.build:294: recipe for target 'arch/powerpc/mm/pgtable.o' failed make[2]: *** [arch/powerpc/mm/pgtable.o] Error 1 make[2]: *** Waiting for unfinished jobs.... In file included from /home/kisskb/slave/src/arch/powerpc/mm/tlb_nohash.c:43:0: /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h: In function 'mm_is_core_local': /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h:75:21: error: 'mm_context_t' has no member named 'npu_context' /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h: In function 'mm_is_thread_local': /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h:81:21: error: 'mm_context_t' has no member named 'npu_context' /home/kisskb/slave/src/arch/powerpc/mm/tlb_nohash.c: In function 'mm_is_core_local': /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h:77:1: error: control reaches end of non-void function [-Werror=return-type] cc1: all warnings being treated as errors /home/kisskb/slave/src/scripts/Makefile.build:294: recipe for target 'arch/powerpc/mm/tlb_nohash.o' failed make[2]: *** [arch/powerpc/mm/tlb_nohash.o] Error 1 CC arch/powerpc/kernel/align.o CC arch/powerpc/kernel/cputable.o CC arch/powerpc/kernel/signal_32.o CC arch/powerpc/kernel/pmc.o CC arch/powerpc/kernel/syscalls.o CC arch/powerpc/kernel/irq.o CC arch/powerpc/kernel/process.o CC arch/powerpc/kernel/ptrace.o CC arch/powerpc/kernel/signal.o CC arch/powerpc/platforms/44x/ppc476.o CC arch/powerpc/kernel/vdso.o In file included from /home/kisskb/slave/src/arch/powerpc/mm/init_32.c:45:0: /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h: In function 'mm_is_core_local': /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h:75:21: error: 'mm_context_t' has no member named 'npu_context' /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h: In function 'mm_is_thread_local': /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h:81:21: error: 'mm_context_t' has no member named 'npu_context' CPP arch/powerpc/kernel/systbl_chk.i CC arch/powerpc/kernel/idle.o CC arch/powerpc/kernel/traps.o CC arch/powerpc/kernel/setup-common.o CC arch/powerpc/kernel/dma.o CC arch/powerpc/kernel/io.o CC arch/powerpc/kernel/udbg.o CC arch/powerpc/kernel/prom.o CC arch/powerpc/platforms/44x/idle.o AS arch/powerpc/platforms/44x/misc_44x.o CC arch/powerpc/kernel/cacheinfo.o AS arch/powerpc/kernel/misc.o CC arch/powerpc/kernel/time.o CC arch/powerpc/kernel/sysfs.o In file included from /home/kisskb/slave/src/arch/powerpc/mm/mem.c:49:0: /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h: In function 'mm_is_core_local': /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h:75:21: error: 'mm_context_t' has no member named 'npu_context' /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h: In function 'mm_is_thread_local': /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h:81:21: error: 'mm_context_t' has no member named 'npu_context' /home/kisskb/slave/src/scripts/Makefile.build:294: recipe for target 'arch/powerpc/mm/init_32.o' failed make[2]: *** [arch/powerpc/mm/init_32.o] Error 1 CC arch/powerpc/sysdev/mpic.o LD arch/powerpc/math-emu/built-in.o AS arch/powerpc/kernel/misc_32.o CC arch/powerpc/kernel/of_platform.o /home/kisskb/slave/src/scripts/Makefile.build:294: recipe for target 'arch/powerpc/mm/mem.o' failed make[2]: *** [arch/powerpc/mm/mem.o] Error 1 CC arch/powerpc/sysdev/mpic_msi.o GEN usr/initramfs_data.cpio.gz CC arch/powerpc/sysdev/mpic_u3msi.o CC arch/powerpc/sysdev/msi_bitmap.o CC arch/powerpc/kernel/prom_parse.o AS arch/powerpc/sysdev/dcr-low.o CC arch/powerpc/sysdev/indirect_pci.o CC arch/powerpc/kernel/proc_powerpc.o CC arch/powerpc/sysdev/uic.o CC arch/powerpc/kernel/smp-tbsync.o CC arch/powerpc/sysdev/ppc4xx_soc.o CC arch/powerpc/kernel/module.o In file included from /home/kisskb/slave/src/arch/powerpc/mm/hugetlbpage.c:22:0: /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h: In function 'mm_is_core_local': /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h:75:21: error: 'mm_context_t' has no member named 'npu_context' /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h: In function 'mm_is_thread_local': /home/kisskb/slave/src/arch/powerpc/include/asm/tlb.h:81:21: error: 'mm_context_t' has no member named 'npu_context' /home/kisskb/slave/src/scripts/Makefile.build:294: recipe for target 'arch/powerpc/mm/hugetlbpage.o' failed make[2]: *** [arch/powerpc/mm/hugetlbpage.o] Error 1 AS arch/powerpc/crypto/sha1-powerpc-asm.o CC arch/powerpc/crypto/sha1.o LDS arch/powerpc/kernel/vdso32/vdso32.lds CC arch/powerpc/sysdev/ppc4xx_pci.o VDSO32A arch/powerpc/kernel/vdso32/sigtramp.o CC arch/powerpc/kernel/module_32.o LD arch/powerpc/net/built-in.o VDSO32A arch/powerpc/kernel/vdso32/gettimeofday.o VDSO32A arch/powerpc/kernel/vdso32/datapage.o AS arch/powerpc/kernel/cpu_setup_44x.o CC arch/powerpc/sysdev/dcr.o CC arch/powerpc/sysdev/ppc4xx_hsta_msi.o AS usr/initramfs_data.o VDSO32A arch/powerpc/kernel/vdso32/cacheflush.o VDSO32A arch/powerpc/kernel/vdso32/note.o CC arch/powerpc/kernel/setup_32.o AS arch/powerpc/kernel/entry_32.o CC arch/powerpc/kernel/smp.o /home/kisskb/slave/src/Makefile:1002: recipe for target 'arch/powerpc/mm' failed make[1]: *** [arch/powerpc/mm] Error 2 make[1]: *** Waiting for unfinished jobs.... CC arch/powerpc/kernel/udbg_16550.o CC arch/powerpc/kernel/legacy_serial.o CC arch/powerpc/kernel/dma-swiotlb.o CC arch/powerpc/kernel/pci_32.o CC arch/powerpc/kernel/pci-common.o LD arch/powerpc/lib/built-in.o CC arch/powerpc/kernel/pci_of_scan.o CC arch/powerpc/kernel/msi.o AS arch/powerpc/kernel/ppc_save_regs.o CC arch/powerpc/kernel/iomap.o AS arch/powerpc/kernel/head_44x.o CC arch/powerpc/xmon/xmon.o LD usr/built-in.o VDSO32L arch/powerpc/kernel/vdso32/vdso32.so.dbg LDS arch/powerpc/kernel/vmlinux.lds AS arch/powerpc/kernel/fpu.o CC arch/powerpc/xmon/nonstdio.o AS arch/powerpc/xmon/spr_access.o CALL /home/kisskb/slave/src/arch/powerpc/kernel/systbl_chk.sh CC arch/powerpc/xmon/ppc-dis.o OBJCOPY arch/powerpc/kernel/vdso32/vdso32.so AS arch/powerpc/kernel/systbl.o AS arch/powerpc/kernel/vdso32/vdso32_wrapper.o CC arch/powerpc/xmon/ppc-opc.o LD arch/powerpc/kernel/vdso32/built-in.o LD arch/powerpc/platforms/44x/built-in.o LD arch/powerpc/platforms/built-in.o LD arch/powerpc/crypto/sha1-powerpc.o LD arch/powerpc/crypto/built-in.o LD init/mounts.o LD init/built-in.o LD arch/powerpc/kernel/built-in.o LD arch/powerpc/xmon/built-in.o LD arch/powerpc/sysdev/built-in.o make[1]: *** wait: No child processes. Stop. Makefile:152: recipe for target 'sub-make' failed make: *** [sub-make] Error 2 Command 'make -j 48 ARCH=powerpc O=/home/kisskb/slave/build/powerpc-next_44x_akebono_defconfig_powerpc CROSS_COMPILE=/opt/cross/kisskb/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux- ' returned non-zero exit status 2 # rm -rf /home/kisskb/slave/build/powerpc-next_44x_akebono_defconfig_powerpc # Build took: 0:00:07.472771