linux/arch/powerpc/include/asm
Sam bobroff 96d0161086 powerpc: Correct DSCR during TM context switch
Correct the DSCR SPR becoming temporarily corrupted if a task is
context switched during a transaction.

The problem occurs while suspending the task and is caused by saving
the DSCR to thread.dscr after it has already been set to the CPU's
default value:

__switch_to() calls __switch_to_tm()
	which calls tm_reclaim_task()
	which calls tm_reclaim_thread()
	which calls tm_reclaim()
		where the DSCR is set to the CPU's default
__switch_to() calls _switch()
		where thread.dscr is set to the DSCR

When the task is resumed, it's transaction will be doomed (as usual)
and the DSCR SPR will be corrupted, although the checkpointed value
will be correct. Therefore the DSCR will be immediately corrected by
the transaction aborting, unless it has been suspended. In that case
the incorrect value can be seen by the task until it resumes the
transaction.

The fix is to treat the DSCR similarly to the TAR and save it early
in __switch_to().

A program exposing the problem is added to the kernel self tests as:
tools/testing/selftests/powerpc/tm/tm-resched-dscr.

Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
CC: <stable@vger.kernel.org> [v3.10+]
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
2014-06-11 17:02:56 +10:00
..
8xx_immap.h
agp.h
archrandom.h random: Add arch_has_random[_seed]() 2014-03-19 22:24:08 -04:00
asm-compat.h powerpc: Fix little endian lppaca, slb_shadow and dtl_entry 2013-08-14 15:33:35 +10:00
asm-offsets.h
async_tx.h
atomic.h arch,powerpc: Convert smp_mb__*() 2014-04-18 14:20:41 +02:00
backlight.h
barrier.h arch,powerpc: Convert smp_mb__*() 2014-04-18 14:20:41 +02:00
bitops.h arch,powerpc: Convert smp_mb__*() 2014-04-18 14:20:41 +02:00
bootx.h
btext.h powerpc/pmac: Early debug output on screen on 64-bit macs 2013-08-14 14:57:40 +10:00
bug.h
bugs.h
cache.h powerpc: purge all the prefetched instructions for the coherent icache flush 2013-12-02 14:13:47 +11:00
cacheflush.h powerpc: Remove the symbol __flush_icache_range 2013-08-14 14:56:44 +10:00
cell-pmu.h
cell-regs.h
checksum.h powerpc: Use generic checksum code in little endian 2013-10-11 16:48:39 +11:00
cmpxchg.h powerpc: Add support for the optimised lockref implementation 2014-01-28 14:45:43 +11:00
code-patching.h powerpc: Add ABIv2 support to ppc_function_entry 2014-04-23 10:05:21 +10:00
compat.h powerpc/compat: 32-bit little endian machine name is ppcle, not ppc 2014-03-24 10:16:04 +11:00
context_tracking.h powerpc: No need to use dot symbols when branching to a function 2014-04-23 10:05:16 +10:00
cpm.h
cpm1.h
cpm2.h
cputable.h powerpc: Add a cpu feature CPU_FTR_PMAO_BUG 2014-03-24 09:48:24 +11:00
cputhreads.h powerpc: Add threads_per_subcore 2014-05-28 13:35:35 +10:00
cputime.h
current.h
dbdma.h
dbell.h
dcr-generic.h
dcr-mmio.h of: Stop naming platform_device using dcr address 2014-05-23 08:28:02 +09:00
dcr-native.h
dcr-regs.h
dcr.h
debug.h powerpc: Fix smp_processor_id() in preemptible splat in set_breakpoint 2014-05-20 10:54:06 +10:00
delay.h
device.h powerpc: Add iommu domain pointer to device archdata 2013-08-14 11:38:34 +02:00
disassemble.h KVM: PPC: BOOK3S: Remove open coded make_dsisr in alignment handler 2014-05-30 14:26:25 +02:00
div64.h
dma-mapping.h powerpc/powernv: Add iommu DMA bypass support for IODA2 2014-02-11 16:07:37 +11:00
dma.h
edac.h
eeh.h Revert "powerpc/powernv: Fundamental reset on PLX ports" 2014-05-20 10:20:49 +10:00
eeh_event.h
ehv_pic.h
elf.h powerpc: Clear ELF personality flag if ELFv2 is not requested. 2014-05-20 10:55:59 +10:00
emergency-restart.h
emulated_ops.h powerpc: Add lq/stq emulation 2014-04-09 12:53:28 +10:00
epapr_hcalls.h kvm/powerpc: move kvm_hypercall0() and friends to epapr_hypercall0() 2014-01-09 10:14:57 +01:00
exception-64e.h powerpc: No need to use dot symbols when branching to a function 2014-04-23 10:05:16 +10:00
exception-64s.h powerpc: No need to use dot symbols when branching to a function 2014-04-23 10:05:16 +10:00
exec.h
fadump.h include/linux/crash_dump.h: add vmcore_cleanup() prototype 2014-04-07 16:36:06 -07:00
fb.h
feature-fixups.h
firmware.h
fixmap.h powerpc: use generic fixmap.h 2014-01-23 16:36:54 -08:00
floppy.h
fs_pd.h
fsl_85xx_cache_sram.h
fsl_gtm.h
fsl_guts.h
fsl_hcalls.h
fsl_lbc.h powerpc/85xx: handle the eLBC error interrupt if it exists in dts 2014-01-10 17:19:27 -06:00
fsl_pamu_stash.h iommu/fsl: Add additional iommu attributes required by the PAMU driver. 2013-08-14 11:38:34 +02:00
ftrace.h powerpc: Remove function descriptors and dot symbols on new ABI 2014-04-23 10:05:20 +10:00
futex.h
gpio.h
grackle.h
hardirq.h powerpc: Make irq_stat.timers_irqs counting more specific 2013-12-02 14:14:50 +11:00
heathrow.h
highmem.h
hugetlb.h powerpc/mm: Add new "set" flag argument to pte/pmd update function 2014-02-17 11:19:35 +11:00
hvcall.h powerpc: Add hvcalls for 24x7 and gpci (Get Performance Counter Info) 2014-03-24 09:48:28 +11:00
hvconsole.h
hvcserver.h
hvsi.h powerpc/hvsi: Fix endian issues in HVSI driver 2013-10-11 16:48:53 +11:00
hw_breakpoint.h powerpc: Fix smp_processor_id() in preemptible splat in set_breakpoint 2014-05-20 10:54:06 +10:00
hw_irq.h powerpc: Access local paca after hard irq disabled 2013-07-24 14:18:44 +10:00
hydra.h
i8259.h
ibmebus.h
ide.h
immap_cpm2.h
immap_qe.h
io-defs.h
io-workarounds.h
io.h powerpc: Add real mode cache inhibited IO accessors 2013-12-05 16:08:21 +11:00
io_event_irq.h
iommu.h powerpc/powernv: Add iommu DMA bypass support for IODA2 2014-02-11 16:07:37 +11:00
ipic.h
irq.h powerpc/irq: Run softirqs off the top of the irq stack 2013-09-25 14:15:36 +10:00
irq_regs.h
irqflags.h powerpc/tracing: TRACE_WITH_FRAME_BUFFER creates invalid stack frames 2014-04-23 10:05:25 +10:00
jump_label.h compiler/gcc4: Add quirk for 'asm goto' miscompilation bug 2013-10-11 07:39:14 +02:00
Kbuild locking/mcs: Allow architecture specific asm files to be used for contended case 2014-02-09 21:18:52 +01:00
kdebug.h
kdump.h
kexec.h
keylargo.h
kgdb.h
kmap_types.h
kprobes.h powerpc/kprobes: Fix ABIv2 issues with kprobe_lookup_name 2014-04-23 10:05:33 +10:00
kvm_44x.h
kvm_asm.h KVM: PPC: Book3S PR: Handle Facility interrupt and FSCR 2014-05-30 14:26:22 +02:00
kvm_book3s.h KVM: PPC: Make shared struct aka magic page guest endian 2014-05-30 14:26:21 +02:00
kvm_book3s_32.h KVM: PPC: Book3S PR: Allocate kvm_vcpu structs from kvm_vcpu_cache 2013-10-17 14:45:05 +02:00
kvm_book3s_64.h KVM: PPC: BOOK3S: HV: Add mixed page-size support for guest 2014-05-30 14:26:24 +02:00
kvm_book3s_asm.h KVM: PPC: Book3S PR: Handle Facility interrupt and FSCR 2014-05-30 14:26:22 +02:00
kvm_booke.h KVM: PPC: Make shared struct aka magic page guest endian 2014-05-30 14:26:21 +02:00
kvm_booke_hv_asm.h powerpc/booke64: Use SPRG_TLB_EXFRAME on bolted handlers 2014-03-19 19:57:15 -05:00
kvm_fpu.h
kvm_host.h KVM: PPC: Disable NX for old magic page using guests 2014-05-30 14:26:24 +02:00
kvm_para.h kvm/powerpc: move kvm_hypercall0() and friends to epapr_hypercall0() 2014-01-09 10:14:57 +01:00
kvm_ppc.h Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2014-06-10 18:54:22 -07:00
libata-portmap.h
linkage.h powerpc: Remove function descriptors and dot symbols on new ABI 2014-04-23 10:05:20 +10:00
local.h
local64.h
lppaca.h powerpc: Make slb_shadow a local 2013-12-09 11:40:25 +11:00
lv1call.h
machdep.h powerpc: Allow ppc_md platform hook to override memory_block_size_bytes 2014-06-05 13:20:39 +10:00
macio.h
mc146818rtc.h
mce.h powerpc/book3s: Recover from MC in sapphire on SCOM read via MMIO. 2014-03-07 15:52:10 +11:00
mediabay.h
mman.h
mmu-8xx.h
mmu-40x.h
mmu-44x.h
mmu-book3e.h powerpc: Remove platforms/wsp and associated pieces 2014-06-11 16:35:38 +10:00
mmu-hash32.h
mmu-hash64.h powerpc: Book 3S MMU little endian support 2013-10-11 16:48:26 +11:00
mmu.h powerpc/e6500: TLB miss handler with hardware tablewalk support 2014-01-09 17:52:19 -06:00
mmu_context.h
mmzone.h
module.h powerpc/modules: Create module_trampoline_target() 2014-04-23 10:05:34 +10:00
mpc5xxx.h
mpc6xx.h
mpc8xx.h
mpc52xx.h
mpc52xx_psc.h
mpc85xx.h powerpc/85xx: Add support for 85xx cpu type detection 2013-08-23 19:01:03 -05:00
mpc5121.h powerpc/512x: clk: support MPC5121/5123/5125 SoC variants 2014-01-12 18:59:36 +01:00
mpc8260.h
mpic.h powerpc/msi: Fix compile error on mpc83xx 2013-08-07 18:38:04 -05:00
mpic_msgr.h
mpic_timer.h
msi_bitmap.h
mutex.h
nvram.h
ohare.h
opal.h powerpc/powernv: Fix endian issues in memory error handling code 2014-06-05 13:20:39 +10:00
oprofile_impl.h
paca.h powerpc: Fix regression of per-CPU DSCR setting 2014-05-28 13:35:40 +10:00
page.h powerpc: Fix 64K page size support for PPC44x 2013-10-30 16:00:51 +11:00
page_32.h
page_64.h
parport.h
pasemi_dma.h
pci-bridge.h powerpc/pci: Don't use bitfield for force_32bit_msi 2013-08-14 11:50:25 +10:00
pci.h PCI: Turn pcibios_penalize_isa_irq() into a weak function 2014-05-27 16:23:58 -06:00
percpu.h
perf_event.h
perf_event_fsl_emb.h powerpc/perf: increase the perf HW events to 6 2013-08-07 18:38:03 -05:00
perf_event_server.h powerpc/perf: Define perf_event_print_debug() to print PMU register values 2014-03-24 09:48:23 +11:00
pgalloc-32.h powerpc: Fix PTE page address mismatch in pgtable ctor/dtor 2013-12-10 11:25:05 +11:00
pgalloc-64.h powerpc: Fix PTE page address mismatch in pgtable ctor/dtor 2013-12-10 11:25:05 +11:00
pgalloc.h
pgtable-ppc32.h
pgtable-ppc64-4k.h
pgtable-ppc64-64k.h
pgtable-ppc64.h powerpc/mm: Add new "set" flag argument to pte/pmd update function 2014-02-17 11:19:35 +11:00
pgtable.h x86: define _PAGE_NUMA by reusing software bits on the PMD and PTE levels 2014-06-04 16:53:55 -07:00
plpar_wrappers.h pseries: Add H_SET_MODE to change exception endianness 2013-11-21 09:19:16 +11:00
pmac_feature.h
pmac_low_i2c.h
pmac_pfunc.h
pmc.h
pmi.h
ppc-opcode.h powerpc/bpf: Fix DIVWU instruction opcode 2013-10-31 16:19:20 +11:00
ppc-pci.h powerpc/eeh: No hotplug on permanently removed dev 2014-04-28 17:34:32 +10:00
ppc4xx.h
ppc4xx_ocm.h
ppc_asm.h Merge branch 'merge' into next 2014-05-28 13:30:12 +10:00
probes.h
processor.h powerpc/powernv: Make it possible to skip the IRQHAPPENED check in power7_nap() 2014-05-28 13:35:35 +10:00
prom.h of: push struct boot_param_header and defines into powerpc 2014-04-30 00:59:20 -05:00
ps3.h powerpc: Delete non-required instances of include <linux/init.h> 2014-01-15 13:46:44 +11:00
ps3av.h
ps3gpu.h
ps3stor.h
pte-8xx.h
pte-40x.h
pte-44x.h
pte-book3e.h powerpc: book3e: _PAGE_LENDIAN must be _PAGE_ENDIAN 2013-10-17 14:49:37 +02:00
pte-common.h
pte-fsl-booke.h
pte-hash32.h
pte-hash64-4k.h
pte-hash64-64k.h
pte-hash64.h powerpc/mm: Enable _PAGE_NUMA for book3s 2013-12-09 11:40:30 +11:00
ptrace.h powerpc: Increase stack redzone for 64-bit userspace to 512 bytes 2014-02-28 18:06:26 +11:00
qe.h
qe_ic.h
reg.h Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2014-06-10 18:54:22 -07:00
reg_8xx.h
reg_a2.h powerpc: Remove platforms/wsp and associated pieces 2014-06-11 16:35:38 +10:00
reg_booke.h KVM: PPC: E500: Add dcbtls emulation 2014-05-30 14:26:17 +02:00
reg_fsl_emb.h powerpc/perf: Add e6500 PMU driver 2013-08-07 18:38:04 -05:00
rheap.h
rio.h
rtas.h powerpc/le: Enable RTAS events support 2014-04-07 10:33:12 +10:00
rtc.h
runlatch.h
scatterlist.h
scom.h powerpc/scom: Enable 64-bit addresses 2013-11-06 14:13:49 +11:00
sections.h Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2014-06-10 18:54:22 -07:00
serial.h
setjmp.h
setup.h powerpc: Clean up panic_timeout usage 2013-11-26 12:12:28 +01:00
sfp-machine.h powerpc: Put FP/VSX and VR state into structures 2013-10-11 17:26:49 +11:00
shmparam.h
signal.h
smp.h powerpc/kvm/book3s_hv: Rework the secondary inhibit code 2014-05-28 13:35:34 +10:00
smu.h
sparsemem.h
spinlock.h Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2014-01-27 21:11:26 -08:00
spinlock_types.h
spu.h switch elf_coredump_extra_notes_write() to dump_emit() 2013-11-09 00:16:24 -05:00
spu_csa.h
spu_info.h
spu_priv1.h
sstep.h
string.h powerpc: memcpy optimization for 64bit LE 2014-04-30 15:26:18 +10:00
swab.h
swiotlb.h
switch_to.h powerpc: Correct DSCR during TM context switch 2014-06-11 17:02:56 +10:00
synch.h
syscall.h
syscalls.h
systbl.h Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2014-06-10 18:54:22 -07:00
tce.h
termios.h
thread_info.h powerpc: Don't corrupt transactional state when using FP/VMX in kernel 2014-01-15 13:59:11 +11:00
time.h powerpc: Implement tick broadcast IPI as a fixed IPI message 2014-03-05 15:55:04 +11:00
timex.h powerpc/8xx: mfspr SPRN_TBRx in lieu of mftb/mftbu is not supported 2013-11-22 16:56:48 -06:00
tlb.h
tlbflush.h
tm.h Merge branch 'kvm-ppchv-next' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc into kvm-next 2014-03-29 15:44:05 +01:00
topology.h Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2014-06-10 18:54:22 -07:00
trace.h
tsi108.h
tsi108_irq.h
tsi108_pci.h
types.h
uaccess.h
ucc.h
ucc_fast.h
ucc_slow.h
udbg.h powerpc: Cleanup udbg_16550 and add support for LPC PIO-only UARTs 2013-08-14 14:58:15 +10:00
uic.h
unaligned.h powerpc: Make unaligned accesses endian-safe for powerpc 2013-12-30 14:02:29 +11:00
uninorth.h
unistd.h sys_sgetmask/sys_ssetmask: add CONFIG_SGETMASK_SYSCALL 2014-06-04 16:54:14 -07:00
uprobes.h uprobes/powerpc: Kill arch_uprobe->ainsn 2013-11-20 16:31:01 +01:00
user.h
vdso.h powerpc: Link VDSOs at 0x0 2014-02-17 11:19:37 +11:00
vdso_datapage.h
vga.h
vio.h powerpc: Delete non-required instances of include <linux/init.h> 2014-01-15 13:46:44 +11:00
word-at-a-time.h powerpc: word-at-a-time optimization for 64-bit Little Endian 2013-10-31 16:19:16 +11:00
xics.h
xilinx_intc.h
xilinx_pci.h
xmon.h
xor.h powerpc: Add VMX optimised xor for RAID5 2013-10-30 16:02:28 +11:00