powerpc: Add additional state needed for transactional memory to thread struct
authorMichael Neuling <mikey@neuling.org>
Wed, 13 Feb 2013 16:21:31 +0000 (16:21 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 15 Feb 2013 05:58:50 +0000 (16:58 +1100)
Set of new archtected state for saving away on context switch.

Signed-off-by: Matt Evans <matt@ozlabs.org>
Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/include/asm/processor.h

index 42ac53cebacd0343a7b630565b7de8985a0ed751..fc41ab3aa114f53f7e17961d26f9e43c2bedac27 100644 (file)
@@ -246,6 +246,34 @@ struct thread_struct {
        unsigned long   spefscr;        /* SPE & eFP status */
        int             used_spe;       /* set if process has used spe */
 #endif /* CONFIG_SPE */
+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
+       u64             tm_tfhar;       /* Transaction fail handler addr */
+       u64             tm_texasr;      /* Transaction exception & summary */
+       u64             tm_tfiar;       /* Transaction fail instr address reg */
+       unsigned long   tm_orig_msr;    /* Thread's MSR on ctx switch */
+       struct pt_regs  ckpt_regs;      /* Checkpointed registers */
+
+       /*
+        * Transactional FP and VSX 0-31 register set.
+        * NOTE: the sense of these is the opposite of the integer ckpt_regs!
+        *
+        * When a transaction is active/signalled/scheduled etc., *regs is the
+        * most recent set of/speculated GPRs with ckpt_regs being the older
+        * checkpointed regs to which we roll back if transaction aborts.
+        *
+        * However, fpr[] is the checkpointed 'base state' of FP regs, and
+        * transact_fpr[] is the new set of transactional values.
+        * VRs work the same way.
+        */
+       double          transact_fpr[32][TS_FPRWIDTH];
+       struct {
+               unsigned int pad;
+               unsigned int val;       /* Floating point status */
+       } transact_fpscr;
+       vector128       transact_vr[32] __attribute__((aligned(16)));
+       vector128       transact_vscr __attribute__((aligned(16)));
+       unsigned long   transact_vrsave;
+#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
 #ifdef CONFIG_KVM_BOOK3S_32_HANDLER
        void*           kvm_shadow_vcpu; /* KVM internal data */
 #endif /* CONFIG_KVM_BOOK3S_32_HANDLER */