Set of new archtected state for saving away on context switch.

Signed-off-by: Matt Evans <m...@ozlabs.org>
Signed-off-by: Michael Neuling <mi...@neuling.org>
---
 arch/powerpc/include/asm/processor.h |   28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/arch/powerpc/include/asm/processor.h 
b/arch/powerpc/include/asm/processor.h
index 7938658..1ffed17 100644
--- a/arch/powerpc/include/asm/processor.h
+++ b/arch/powerpc/include/asm/processor.h
@@ -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_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_TRANSACTIONAL_MEM */
 #ifdef CONFIG_KVM_BOOK3S_32_HANDLER
        void*           kvm_shadow_vcpu; /* KVM internal data */
 #endif /* CONFIG_KVM_BOOK3S_32_HANDLER */
-- 
1.7.10.4

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to