# git rev-parse -q --verify 7c58b29be86662239d0f5da478cc8ab0ef62108e^{commit} 7c58b29be86662239d0f5da478cc8ab0ef62108e already have revision, skipping fetch # git checkout -q -f -B kisskb 7c58b29be86662239d0f5da478cc8ab0ef62108e # git clean -qxdf # git log -1 commit 7c58b29be86662239d0f5da478cc8ab0ef62108e Author: Michael Neuling Date: Fri Sep 15 15:25:48 2017 +1000 powerpc/64s: Add workaround for P9 vector CI load issue POWER9 DD2.1 and earlier has an issue where some cache inhibited vector load will return bad data. The workaround is two part, one firmware/microcode part triggers HMI interrupts when hitting such loads, the other part is this patch which then emulates the instructions in Linux. The affected instructions are limited to lxvd2x, lxvw4x, lxvb16x and lxvh8x. When an instruction triggers the HMI, all threads in the core will be sent to the HMI handler, not just the one running the vector load. In general, these spurious HMIs are detected by the emulation code and we just return back to the running process. Unfortunately, if a spurious interrupt occurs on a vector load that's to normal memory we have no way to detect that it's spurious (unless we walk the page tables, which is very expensive). In this case we emulate the load but we need do so using a vector load itself to ensure 128bit atomicity is preserved. Some additional debugfs emulated instruction counters are added also. Signed-off-by: Michael Neuling Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Michael Ellerman # < /opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc --version # < git log --format=%s --max-count=1 7c58b29be86662239d0f5da478cc8ab0ef62108e # < make -j 10 ARCH=powerpc O=/home/kisskb/slave/build/powerpc-next_ppc64_defconfig+NO_ALTIVEC_powerpc-5.3 CROSS_COMPILE=/opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux- ppc64_defconfig # Added to kconfig CONFIG_ALTIVEC=n # Added to kconfig CONFIG_PPC_TRANSACTIONAL_MEM=n # yes \n | make -j 10 ARCH=powerpc O=/home/kisskb/slave/build/powerpc-next_ppc64_defconfig+NO_ALTIVEC_powerpc-5.3 CROSS_COMPILE=/opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux- oldconfig yes: standard output: Broken pipe yes: write error # make -j 10 ARCH=powerpc O=/home/kisskb/slave/build/powerpc-next_ppc64_defconfig+NO_ALTIVEC_powerpc-5.3 CROSS_COMPILE=/opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux- make[1]: Entering directory '/home/kisskb/slave/build/powerpc-next_ppc64_defconfig+NO_ALTIVEC_powerpc-5.3' GEN ./Makefile scripts/kconfig/conf --silentoldconfig Kconfig CHK include/config/kernel.release GEN ./Makefile WRAP arch/powerpc/include/generated/uapi/asm/param.h WRAP arch/powerpc/include/generated/uapi/asm/poll.h WRAP arch/powerpc/include/generated/uapi/asm/resource.h WRAP arch/powerpc/include/generated/uapi/asm/sockios.h WRAP arch/powerpc/include/generated/uapi/asm/statfs.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 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 WRAP arch/powerpc/include/generated/asm/msi.h CHK include/generated/utsrelease.h UPD include/generated/utsrelease.h 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/genksyms/genksyms.o HOSTCC scripts/dtc/srcpos.o CC scripts/mod/empty.o HOSTCC scripts/mod/mk_elfconfig CC scripts/mod/devicetable-offsets.s CHK scripts/mod/devicetable-offsets.h HOSTCC scripts/dtc/checks.o UPD scripts/mod/devicetable-offsets.h HOSTCC scripts/dtc/util.o SHIPPED scripts/dtc/dtc-lexer.lex.c MKELF scripts/mod/elfconfig.h HOSTCC scripts/mod/modpost.o HOSTCC scripts/mod/file2alias.o HOSTCC scripts/kallsyms HOSTCC scripts/mod/sumversion.o SHIPPED scripts/genksyms/parse.tab.c SHIPPED scripts/genksyms/lex.lex.c SHIPPED scripts/genksyms/parse.tab.h HOSTCC scripts/genksyms/parse.tab.o SHIPPED scripts/dtc/dtc-parser.tab.h HOSTCC scripts/pnmtologo HOSTCC scripts/conmakehash HOSTCC scripts/sortextable SHIPPED scripts/dtc/dtc-parser.tab.c HOSTCC scripts/dtc/dtc-lexer.lex.o HOSTCC scripts/dtc/dtc-parser.tab.o HOSTCC scripts/genksyms/lex.lex.o CHK include/generated/timeconst.h CC kernel/bounds.s 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 HOSTLD scripts/mod/modpost HOSTLD scripts/genksyms/genksyms CHK include/generated/asm-offsets.h UPD include/generated/asm-offsets.h CALL /home/kisskb/slave/src/scripts/checksyscalls.sh 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/do_mounts_initrd.o CC init/do_mounts_md.o UPD include/generated/compile.h CC init/initramfs.o CC arch/powerpc/mm/fault.o AS arch/powerpc/lib/string.o CC arch/powerpc/kernel/cputable.o GEN usr/initramfs_data.cpio CC arch/powerpc/lib/alloc.o AS usr/initramfs_data.o AR usr/built-in.o CC arch/powerpc/kernel/ptrace.o CC arch/powerpc/lib/code-patching.o CC arch/powerpc/sysdev/mpic.o CC arch/powerpc/lib/feature-fixups.o CC init/init_task.o CC arch/powerpc/mm/mem.o CC arch/powerpc/platforms/cell/cbe_regs.o CC arch/powerpc/mm/pgtable.o CC arch/powerpc/sysdev/mpic_msi.o AS arch/powerpc/lib/checksum_64.o CC arch/powerpc/platforms/maple/setup.o CC arch/powerpc/platforms/cell/interrupt.o CC arch/powerpc/platforms/maple/pci.o CC arch/powerpc/lib/checksum_wrappers.o CC init/version.o CC arch/powerpc/kernel/syscalls.o CC arch/powerpc/sysdev/mpic_u3msi.o AR arch/powerpc/math-emu/built-in.o CC arch/powerpc/mm/mmap.o AR arch/powerpc/crypto/built-in.o AS [M] arch/powerpc/crypto/md5-asm.o CC [M] arch/powerpc/crypto/md5-glue.o CC arch/powerpc/lib/sstep.o AR init/mounts.o AR init/built-in.o CC arch/powerpc/sysdev/msi_bitmap.o CC arch/powerpc/kernel/irq.o CC arch/powerpc/platforms/pasemi/setup.o CC arch/powerpc/platforms/powermac/pic.o CC arch/powerpc/platforms/cell/pervasive.o CC arch/powerpc/mm/init_64.o CC arch/powerpc/platforms/maple/time.o AS [M] arch/powerpc/crypto/sha1-powerpc-asm.o CC [M] arch/powerpc/crypto/sha1.o CC arch/powerpc/mm/pgtable_64.o CC arch/powerpc/sysdev/dart_iommu.o CC arch/powerpc/platforms/powermac/setup.o CC arch/powerpc/platforms/cell/iommu.o AR arch/powerpc/platforms/maple/built-in.o CC arch/powerpc/platforms/cell/setup.o LD [M] arch/powerpc/crypto/md5-ppc.o LD [M] arch/powerpc/crypto/sha1-powerpc.o CC arch/powerpc/platforms/cell/spider-pic.o CC arch/powerpc/platforms/pasemi/pci.o CC arch/powerpc/sysdev/mmio_nvram.o CC arch/powerpc/sysdev/i8259.o CC arch/powerpc/sysdev/dcr.o CC arch/powerpc/kernel/align.o AS arch/powerpc/lib/ldstfp.o AS arch/powerpc/lib/quad.o AS arch/powerpc/lib/feature-fixups-test.o AS arch/powerpc/lib/copypage_64.o CC arch/powerpc/platforms/pasemi/time.o CC arch/powerpc/platforms/powermac/time.o CC arch/powerpc/platforms/pasemi/idle.o CC arch/powerpc/mm/init-common.o AS arch/powerpc/lib/copyuser_64.o AS arch/powerpc/lib/mem_64.o CC arch/powerpc/platforms/cell/pmu.o AS arch/powerpc/lib/hweight_64.o AS arch/powerpc/lib/copyuser_power7.o AS arch/powerpc/lib/string_64.o CC arch/powerpc/kernel/signal_32.o CC arch/powerpc/sysdev/scom.o CC arch/powerpc/platforms/cell/spider-pci.o CC arch/powerpc/platforms/powernv/setup.o CC arch/powerpc/platforms/powermac/feature.o AS arch/powerpc/platforms/powernv/opal-wrappers.o AS arch/powerpc/platforms/pasemi/powersave.o AS arch/powerpc/lib/copypage_power7.o CC arch/powerpc/platforms/pasemi/iommu.o CC arch/powerpc/platforms/pasemi/dma_lib.o AS arch/powerpc/lib/memcpy_power7.o AS arch/powerpc/lib/memcpy_64.o CC arch/powerpc/mm/mmu_context.o AS arch/powerpc/lib/memcmp_64.o CC arch/powerpc/sysdev/xics/xics-common.o CC arch/powerpc/kernel/pmc.o CC arch/powerpc/mm/pgtable-hash64.o CC arch/powerpc/mm/hash_utils_64.o AS arch/powerpc/mm/slb_low.o CC arch/powerpc/platforms/cell/ras.o CC arch/powerpc/platforms/powermac/pci.o CC arch/powerpc/lib/locks.o CC arch/powerpc/platforms/powernv/opal.o CC arch/powerpc/kernel/vdso.o AR arch/powerpc/lib/built-in.o CC arch/powerpc/kernel/process.o CC arch/powerpc/platforms/powernv/opal-async.o CC arch/powerpc/sysdev/xics/icp-native.o CC arch/powerpc/platforms/pasemi/misc.o CC arch/powerpc/platforms/cell/smp.o AS arch/powerpc/platforms/powermac/sleep.o CC arch/powerpc/platforms/powermac/low_i2c.o CC arch/powerpc/platforms/cell/spu_callbacks.o CC arch/powerpc/platforms/cell/spu_base.o CC arch/powerpc/platforms/pasemi/gpio_mdio.o CC arch/powerpc/platforms/pasemi/msi.o CC arch/powerpc/mm/slb.o CC arch/powerpc/platforms/powernv/idle.o CC arch/powerpc/sysdev/xics/icp-hv.o CC arch/powerpc/sysdev/xics/ics-rtas.o CPP arch/powerpc/kernel/systbl_chk.i CC arch/powerpc/kernel/idle.o CC arch/powerpc/sysdev/xics/ics-opal.o CC arch/powerpc/sysdev/xics/icp-opal.o CC arch/powerpc/mm/hash_native_64.o CC arch/powerpc/mm/mmu_context_book3s64.o AR arch/powerpc/platforms/pasemi/built-in.o CC arch/powerpc/mm/pgtable-book3s64.o CC arch/powerpc/platforms/cell/spu_notify.o CC arch/powerpc/platforms/cell/spu_syscalls.o CC arch/powerpc/platforms/cell/spu_priv1_mmio.o AS arch/powerpc/platforms/powermac/cache.o CC arch/powerpc/platforms/powermac/pfunc_core.o CC arch/powerpc/kernel/signal.o AR arch/powerpc/sysdev/xics/built-in.o CC arch/powerpc/sysdev/xive/common.o CC arch/powerpc/platforms/powernv/opal-rtc.o CC arch/powerpc/kernel/sysfs.o CC arch/powerpc/kernel/cacheinfo.o CC arch/powerpc/kernel/time.o CC arch/powerpc/kernel/prom.o AS arch/powerpc/net/bpf_jit_asm64.o CC arch/powerpc/mm/pgtable-radix.o CC arch/powerpc/platforms/powernv/opal-nvram.o CC arch/powerpc/net/bpf_jit_comp64.o CC arch/powerpc/platforms/cell/spu_manage.o AR arch/powerpc/platforms/cell/spufs/built-in.o CC [M] arch/powerpc/platforms/cell/spufs/inode.o CC arch/powerpc/platforms/powernv/opal-lpc.o CC arch/powerpc/platforms/powermac/pfunc_base.o CC arch/powerpc/sysdev/xive/native.o CC arch/powerpc/mm/tlb-radix.o CC arch/powerpc/mm/tlb_hash64.o CC arch/powerpc/mm/hash64_64k.o CC arch/powerpc/mm/numa.o CC arch/powerpc/platforms/powernv/opal-flash.o CC arch/powerpc/platforms/powermac/udbg_scc.o CC arch/powerpc/kernel/traps.o CC [M] arch/powerpc/platforms/cell/spufs/file.o CC [M] arch/powerpc/platforms/cell/spufs/context.o CC [M] arch/powerpc/platforms/cell/spufs/syscalls.o CC arch/powerpc/platforms/powermac/udbg_adb.o CC arch/powerpc/platforms/powernv/rng.o CC arch/powerpc/sysdev/xive/spapr.o AR arch/powerpc/net/built-in.o CC [M] arch/powerpc/sysdev/pmi.o /home/kisskb/slave/src/arch/powerpc/kernel/traps.c: In function 'p9_hmi_special_emu': /home/kisskb/slave/src/arch/powerpc/kernel/traps.c:731:2: error: implicit declaration of function 'flush_vsx_to_thread' [-Werror=implicit-function-declaration] flush_vsx_to_thread(current); ^ /home/kisskb/slave/src/arch/powerpc/kernel/traps.c:732:2: error: implicit declaration of function 'enable_kernel_altivec' [-Werror=implicit-function-declaration] enable_kernel_altivec(); ^ /home/kisskb/slave/src/arch/powerpc/kernel/traps.c:745:32: error: 'struct thread_struct' has no member named 'vr_state' vdst = (u8 *)¤t->thread.vr_state.vr[t]; ^ cc1: all warnings being treated as errors /home/kisskb/slave/src/scripts/Makefile.build:311: recipe for target 'arch/powerpc/kernel/traps.o' failed make[2]: *** [arch/powerpc/kernel/traps.o] Error 1 /home/kisskb/slave/src/Makefile:1019: recipe for target 'arch/powerpc/kernel' failed make[1]: *** [arch/powerpc/kernel] Error 2 make[1]: *** Waiting for unfinished jobs.... CC arch/powerpc/platforms/ps3/setup.o CC arch/powerpc/platforms/ps3/mm.o CC [M] arch/powerpc/platforms/cell/spufs/sched.o CC arch/powerpc/platforms/ps3/time.o CC arch/powerpc/platforms/powermac/nvram.o CC arch/powerpc/mm/vphn.o AR arch/powerpc/sysdev/xive/built-in.o CC [M] arch/powerpc/platforms/cell/spufs/backing_ops.o CC arch/powerpc/mm/slice.o CC [M] arch/powerpc/sysdev/axonram.o CC arch/powerpc/platforms/cell/axon_msi.o CC arch/powerpc/platforms/powernv/opal-elog.o CC [M] arch/powerpc/platforms/cell/cbe_thermal.o CC [M] arch/powerpc/platforms/cell/cpufreq_spudemand.o CC arch/powerpc/mm/hugetlbpage.o CC arch/powerpc/platforms/powernv/opal-dump.o AR arch/powerpc/sysdev/built-in.o AS arch/powerpc/platforms/ps3/hvcall.o CC arch/powerpc/mm/hugetlbpage-hash64.o CC [M] arch/powerpc/platforms/cell/spufs/hw_ops.o CC arch/powerpc/platforms/ps3/htab.o CC arch/powerpc/platforms/pseries/lpar.o AS arch/powerpc/platforms/pseries/hvCall.o CC arch/powerpc/platforms/powernv/opal-sysparam.o CC arch/powerpc/platforms/powermac/smp.o CC arch/powerpc/platforms/ps3/repository.o CC arch/powerpc/mm/hugetlbpage-radix.o CC arch/powerpc/platforms/pseries/nvram.o CC arch/powerpc/platforms/ps3/interrupt.o CC arch/powerpc/platforms/powernv/opal-sensor.o CC arch/powerpc/platforms/powernv/opal-msglog.o CC [M] arch/powerpc/platforms/cell/spufs/run.o AR arch/powerpc/platforms/powermac/built-in.o CC arch/powerpc/platforms/powernv/opal-hmi.o CC arch/powerpc/platforms/powernv/opal-power.o CC arch/powerpc/platforms/powernv/opal-irqchip.o CC arch/powerpc/mm/hugepage-hash64.o CC arch/powerpc/platforms/ps3/exports.o CC [M] arch/powerpc/platforms/cell/spufs/gang.o SHIPPED arch/powerpc/platforms/cell/spufs/spu_save_dump.h SHIPPED arch/powerpc/platforms/cell/spufs/spu_restore_dump.h CC arch/powerpc/platforms/pseries/reconfig.o CC arch/powerpc/platforms/pseries/of_helpers.o CC arch/powerpc/platforms/ps3/os-area.o CC arch/powerpc/platforms/pseries/setup.o CC [M] arch/powerpc/platforms/cell/spufs/fault.o CC arch/powerpc/platforms/pseries/iommu.o CC arch/powerpc/platforms/ps3/system-bus.o CC arch/powerpc/mm/copro_fault.o CC arch/powerpc/platforms/powernv/opal-kmsg.o CC [M] arch/powerpc/platforms/cell/cbe_powerbutton.o CC [M] arch/powerpc/platforms/cell/spufs/lscsa_alloc.o CC arch/powerpc/platforms/pseries/event_sources.o CC arch/powerpc/platforms/powernv/opal-powercap.o CC arch/powerpc/platforms/powernv/opal-psr.o CC arch/powerpc/platforms/ps3/smp.o CC arch/powerpc/platforms/ps3/spu.o CC [M] arch/powerpc/platforms/cell/spufs/coredump.o CC arch/powerpc/mm/mmu_context_iommu.o CC arch/powerpc/platforms/ps3/device-init.o CC arch/powerpc/platforms/powernv/opal-sensor-groups.o CC [M] arch/powerpc/platforms/cell/spufs/switch.o CC arch/powerpc/platforms/pseries/ras.o CC arch/powerpc/platforms/pseries/firmware.o CC arch/powerpc/platforms/powernv/smp.o CC arch/powerpc/platforms/powernv/subcore.o AS arch/powerpc/platforms/powernv/subcore-asm.o CC arch/powerpc/platforms/pseries/power.o CC arch/powerpc/platforms/powernv/pci.o CC arch/powerpc/platforms/pseries/dlpar.o CC arch/powerpc/platforms/pseries/mobility.o AR arch/powerpc/platforms/ps3/built-in.o CC arch/powerpc/platforms/powernv/pci-ioda.o CC arch/powerpc/platforms/pseries/rng.o CC arch/powerpc/platforms/powernv/npu-dma.o CC arch/powerpc/platforms/powernv/pci-cxl.o AR arch/powerpc/mm/built-in.o CC arch/powerpc/platforms/powernv/eeh-powernv.o CC arch/powerpc/platforms/pseries/pci.o CC arch/powerpc/platforms/pseries/pci_dlpar.o CC arch/powerpc/platforms/pseries/eeh_pseries.o LD [M] arch/powerpc/platforms/cell/spufs/spufs.o AR arch/powerpc/platforms/cell/built-in.o CC arch/powerpc/platforms/powernv/opal-xscom.o CC arch/powerpc/platforms/pseries/msi.o CC arch/powerpc/platforms/pseries/smp.o CC arch/powerpc/platforms/powernv/opal-tracepoints.o CC arch/powerpc/platforms/pseries/kexec.o CC arch/powerpc/platforms/powernv/opal-imc.o CC arch/powerpc/platforms/pseries/pseries_energy.o CC arch/powerpc/platforms/powernv/vas.o CC arch/powerpc/platforms/powernv/vas-window.o CC arch/powerpc/platforms/pseries/hotplug-cpu.o CC arch/powerpc/platforms/pseries/hvconsole.o CC arch/powerpc/platforms/pseries/cmm.o CC arch/powerpc/platforms/pseries/dtl.o CC arch/powerpc/platforms/pseries/io_event_irq.o CC arch/powerpc/platforms/pseries/lparcfg.o CC arch/powerpc/platforms/pseries/vio.o CC arch/powerpc/platforms/pseries/ibmebus.o CC arch/powerpc/platforms/pseries/suspend.o CC [M] arch/powerpc/platforms/pseries/scanlog.o CC [M] arch/powerpc/platforms/pseries/hvcserver.o AR arch/powerpc/platforms/powernv/built-in.o AR arch/powerpc/platforms/pseries/built-in.o AR arch/powerpc/platforms/built-in.o make[1]: Leaving directory '/home/kisskb/slave/build/powerpc-next_ppc64_defconfig+NO_ALTIVEC_powerpc-5.3' Makefile:145: recipe for target 'sub-make' failed make: *** [sub-make] Error 2 Command 'make -j 10 ARCH=powerpc O=/home/kisskb/slave/build/powerpc-next_ppc64_defconfig+NO_ALTIVEC_powerpc-5.3 CROSS_COMPILE=/opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux- ' returned non-zero exit status 2 # rm -rf /home/kisskb/slave/build/powerpc-next_ppc64_defconfig+NO_ALTIVEC_powerpc-5.3 # Build took: 0:00:27.274244