# 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_85xx_ge_imp3a_defconfig_powerpc CROSS_COMPILE=/opt/cross/kisskb/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux- 85xx/ge_imp3a_defconfig # make -j 48 ARCH=powerpc O=/home/kisskb/slave/build/powerpc-next_85xx_ge_imp3a_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_85xx_ge_imp3a_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 HOSTCC scripts/basic/bin2c 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/kallsyms HOSTCC scripts/conmakehash HOSTCC scripts/sortextable CC scripts/mod/empty.o HOSTCC scripts/mod/mk_elfconfig CC scripts/mod/devicetable-offsets.s HOSTCC scripts/dtc/dtc.o HOSTCC scripts/dtc/flattree.o HOSTCC scripts/dtc/fstree.o HOSTCC scripts/dtc/data.o HOSTCC scripts/dtc/livetree.o 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 CHK include/generated/timeconst.h CC kernel/bounds.s MKELF scripts/mod/elfconfig.h HOSTCC scripts/mod/modpost.o HOSTCC scripts/mod/file2alias.o HOSTCC scripts/mod/sumversion.o UPD include/generated/timeconst.h CHK include/generated/bounds.h UPD include/generated/bounds.h CC arch/powerpc/kernel/asm-offsets.s CHK include/generated/asm-offsets.h UPD include/generated/asm-offsets.h CALL /home/kisskb/slave/src/scripts/checksyscalls.sh HOSTLD scripts/dtc/dtc HOSTLD scripts/mod/modpost CC init/main.o CHK include/generated/compile.h HOSTCC usr/gen_init_cpio CC init/do_mounts.o CC init/do_mounts_rd.o CC init/do_mounts_initrd.o CC init/initramfs.o CC init/init_task.o UPD include/generated/compile.h CC init/version.o CC arch/powerpc/mm/fault.o CC arch/powerpc/mm/init_32.o CC arch/powerpc/mm/pgtable.o CC arch/powerpc/mm/mem.o CC arch/powerpc/mm/mmap.o CC arch/powerpc/mm/pgtable_32.o AS arch/powerpc/mm/tlb_nohash_low.o CC arch/powerpc/mm/tlb_nohash.o CC arch/powerpc/mm/hugetlbpage.o CC arch/powerpc/mm/highmem.o CC arch/powerpc/mm/mmu_context_nohash.o CC arch/powerpc/mm/init-common.o CC arch/powerpc/mm/fsl_booke_mmu.o CC arch/powerpc/lib/code-patching.o AS arch/powerpc/lib/checksum_32.o AS arch/powerpc/lib/copy_32.o AS arch/powerpc/lib/div64.o AS arch/powerpc/lib/string.o AS arch/powerpc/lib/crtsavres.o CC arch/powerpc/lib/feature-fixups.o CC arch/powerpc/lib/alloc.o CC arch/powerpc/lib/checksum_wrappers.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.... CC arch/powerpc/platforms/85xx/smp.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' CC arch/powerpc/platforms/85xx/mpc85xx_pm_ops.o CC arch/powerpc/platforms/85xx/common.o CC arch/powerpc/platforms/85xx/ge_imp3a.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 CC arch/powerpc/sysdev/mpic.o CC arch/powerpc/sysdev/msi_bitmap.o CC arch/powerpc/sysdev/mmio_nvram.o CC arch/powerpc/sysdev/mpic_u3msi.o GEN usr/initramfs_data.cpio.gz CC arch/powerpc/sysdev/fsl_pci.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' CC arch/powerpc/sysdev/fsl_msi.o CC arch/powerpc/sysdev/fsl_soc.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' CC arch/powerpc/sysdev/fsl_lbc.o CC arch/powerpc/sysdev/fsl_pmc.o CC arch/powerpc/sysdev/fsl_mpic_err.o /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 CC arch/powerpc/sysdev/cpm2.o 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/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/cpm_common.o CC arch/powerpc/sysdev/indirect_pci.o /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 CC arch/powerpc/kernel/ptrace.o /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/vdso.o CC arch/powerpc/kernel/cputable.o CC arch/powerpc/kernel/signal_32.o CC arch/powerpc/kernel/align.o CC arch/powerpc/kernel/pmc.o CC arch/powerpc/kernel/syscalls.o CC arch/powerpc/kernel/irq.o CC arch/powerpc/sysdev/cpm2_pic.o LD arch/powerpc/crypto/built-in.o CC arch/powerpc/kernel/process.o CC arch/powerpc/kernel/idle.o CPP arch/powerpc/kernel/systbl_chk.i CC arch/powerpc/sysdev/ge/ge_pic.o CC arch/powerpc/kernel/signal.o LD arch/powerpc/net/built-in.o CC arch/powerpc/kernel/sysfs.o CC arch/powerpc/kernel/cacheinfo.o CC arch/powerpc/kernel/prom.o CC arch/powerpc/kernel/traps.o CC arch/powerpc/kernel/time.o CC arch/powerpc/kernel/udbg.o CC arch/powerpc/kernel/setup-common.o LD arch/powerpc/lib/built-in.o CC arch/powerpc/kernel/io.o AS arch/powerpc/kernel/misc.o CC arch/powerpc/kernel/dma.o AS arch/powerpc/kernel/misc_32.o CC arch/powerpc/kernel/prom_parse.o CC arch/powerpc/kernel/of_platform.o CC arch/powerpc/perf/callchain.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.... AS usr/initramfs_data.o CC arch/powerpc/kernel/proc_powerpc.o CC arch/powerpc/perf/perf_regs.o CC arch/powerpc/perf/core-fsl-emb.o CC arch/powerpc/perf/e500-pmu.o LD usr/built-in.o CC arch/powerpc/perf/e6500-pmu.o CC arch/powerpc/kernel/smp-tbsync.o LDS arch/powerpc/kernel/vdso32/vdso32.lds AS arch/powerpc/kernel/idle_e500.o CC arch/powerpc/kernel/module.o VDSO32A arch/powerpc/kernel/vdso32/sigtramp.o VDSO32A arch/powerpc/kernel/vdso32/gettimeofday.o CC arch/powerpc/kernel/module_32.o VDSO32A arch/powerpc/kernel/vdso32/cacheflush.o VDSO32A arch/powerpc/kernel/vdso32/datapage.o LD arch/powerpc/sysdev/ge/built-in.o AS arch/powerpc/kernel/cpu_setup_fsl_booke.o VDSO32A arch/powerpc/kernel/vdso32/note.o CC arch/powerpc/kernel/dbell.o AS arch/powerpc/kernel/entry_32.o CC arch/powerpc/kernel/setup_32.o CC arch/powerpc/kernel/legacy_serial.o CC arch/powerpc/kernel/smp.o CC arch/powerpc/kernel/udbg_16550.o CC arch/powerpc/kernel/msi.o CC arch/powerpc/kernel/pci-common.o CC arch/powerpc/kernel/pci_of_scan.o CC arch/powerpc/kernel/pci_32.o CC arch/powerpc/kernel/iomap.o LDS arch/powerpc/kernel/vmlinux.lds CC arch/powerpc/kernel/dma-swiotlb.o AS arch/powerpc/kernel/head_fsl_booke.o VDSO32L arch/powerpc/kernel/vdso32/vdso32.so.dbg LD arch/powerpc/platforms/85xx/built-in.o CALL /home/kisskb/slave/src/arch/powerpc/kernel/systbl_chk.sh CC arch/powerpc/math-emu/fsqrts.o CC arch/powerpc/math-emu/fre.o CC arch/powerpc/math-emu/math.o CC arch/powerpc/math-emu/fsqrt.o LD arch/powerpc/platforms/built-in.o CC arch/powerpc/math-emu/frsqrtes.o CC arch/powerpc/math-emu/mtfsf.o CC arch/powerpc/math-emu/mtfsfi.o CC arch/powerpc/math-emu/fabs.o AS arch/powerpc/kernel/systbl.o OBJCOPY arch/powerpc/kernel/vdso32/vdso32.so CC arch/powerpc/math-emu/fadd.o CC arch/powerpc/math-emu/fadds.o AS arch/powerpc/kernel/vdso32/vdso32_wrapper.o CC arch/powerpc/math-emu/fcmpo.o CC arch/powerpc/math-emu/fcmpu.o CC arch/powerpc/math-emu/fctiw.o CC arch/powerpc/math-emu/fdiv.o LD init/mounts.o CC arch/powerpc/math-emu/fctiwz.o CC arch/powerpc/math-emu/fmadd.o LD arch/powerpc/kernel/vdso32/built-in.o LD init/built-in.o CC arch/powerpc/math-emu/fdivs.o CC arch/powerpc/math-emu/fmadds.o CC arch/powerpc/math-emu/fmsub.o CC arch/powerpc/math-emu/fmul.o CC arch/powerpc/math-emu/fmsubs.o CC arch/powerpc/math-emu/fmuls.o CC arch/powerpc/math-emu/fnabs.o CC arch/powerpc/math-emu/fnmadd.o CC arch/powerpc/math-emu/fneg.o CC arch/powerpc/math-emu/fnmadds.o LD arch/powerpc/sysdev/built-in.o CC arch/powerpc/math-emu/fnmsub.o CC arch/powerpc/math-emu/fnmsubs.o CC arch/powerpc/math-emu/fres.o CC arch/powerpc/math-emu/frsp.o CC arch/powerpc/math-emu/lfs.o CC arch/powerpc/math-emu/fsel.o CC arch/powerpc/math-emu/frsqrte.o CC arch/powerpc/math-emu/fsub.o CC arch/powerpc/math-emu/fsubs.o CC arch/powerpc/math-emu/mcrfs.o CC arch/powerpc/math-emu/mffs.o CC arch/powerpc/math-emu/mtfsb1.o CC arch/powerpc/math-emu/mtfsb0.o CC arch/powerpc/math-emu/lfd.o CC arch/powerpc/math-emu/fmr.o CC arch/powerpc/math-emu/stfiwx.o CC arch/powerpc/math-emu/stfs.o CC arch/powerpc/math-emu/stfd.o CC arch/powerpc/math-emu/math_efp.o LD arch/powerpc/perf/built-in.o LD arch/powerpc/kernel/built-in.o LD arch/powerpc/math-emu/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_85xx_ge_imp3a_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_85xx_ge_imp3a_defconfig_powerpc # Build took: 0:00:09.226423