OFFSET(THREAD_TM_TAR, thread_struct, tm_tar);
        OFFSET(THREAD_TM_PPR, thread_struct, tm_ppr);
        OFFSET(THREAD_TM_DSCR, thread_struct, tm_dscr);
+       OFFSET(THREAD_TM_AMR, thread_struct, tm_amr);
        OFFSET(PT_CKPT_REGS, thread_struct, ckpt_regs);
        OFFSET(THREAD_CKVRSTATE, thread_struct, ckvr_state.vr);
        OFFSET(THREAD_CKVRSAVE, thread_struct, ckvrsave);
 
        std     r3, STK_PARAM(R3)(r1)
        SAVE_NVGPRS(r1)
 
+       /*
+        * Save kernel live AMR since it will be clobbered by treclaim
+        * but can be used elsewhere later in kernel space.
+        */
+       mfspr   r3, SPRN_AMR
+       std     r3, TM_FRAME_L1(r1)
+
        /* We need to setup MSR for VSX register save instructions. */
        mfmsr   r14
        mr      r15, r14
         * but is used in signal return to 'wind back' to the abort handler.
         */
 
-       /* ******************** CR,LR,CCR,MSR ********** */
+       /* ***************** CTR, LR, CR, XER ********** */
        mfctr   r3
        mflr    r4
        mfcr    r5
        std     r5, _CCR(r7)
        std     r6, _XER(r7)
 
-
        /* ******************** TAR, DSCR ********** */
        mfspr   r3, SPRN_TAR
        mfspr   r4, SPRN_DSCR
        std     r3, THREAD_TM_TAR(r12)
        std     r4, THREAD_TM_DSCR(r12)
 
+        /* ******************** AMR **************** */
+        mfspr  r3, SPRN_AMR
+        std    r3, THREAD_TM_AMR(r12)
+
        /*
         * MSR and flags: We don't change CRs, and we don't need to alter MSR.
         */
        std     r3, THREAD_TM_TFHAR(r12)
        std     r4, THREAD_TM_TFIAR(r12)
 
-       /* AMR is checkpointed too, but is unsupported by Linux. */
+       /* Restore kernel live AMR */
+       ld      r8, TM_FRAME_L1(r1)
+       mtspr   SPRN_AMR, r8
 
        /* Restore original MSR/IRQ state & clear TM mode */
        ld      r14, TM_FRAME_L0(r1)            /* Orig MSR */
         */
        SAVE_NVGPRS(r1)
 
+       /*
+        * Save kernel live AMR since it will be clobbered for trechkpt
+        * but can be used elsewhere later in kernel space.
+        */
+       mfspr   r8, SPRN_AMR
+       std     r8, TM_FRAME_L0(r1)
+
        /* Load complete register state from ts_ckpt* registers */
 
        addi    r7, r3, PT_CKPT_REGS            /* Thread's ckpt_regs */
 
 restore_gprs:
 
-       /* ******************** CR,LR,CCR,MSR ********** */
+       /* ****************** CTR, LR, XER ************* */
        ld      r4, _CTR(r7)
        ld      r5, _LINK(r7)
        ld      r8, _XER(r7)
        ld      r4, THREAD_TM_TAR(r3)
        mtspr   SPRN_TAR,       r4
 
+       /* ******************** AMR ******************** */
+       ld      r4, THREAD_TM_AMR(r3)
+       mtspr   SPRN_AMR, r4
+
        /* Load up the PPR and DSCR in GPRs only at this stage */
        ld      r5, THREAD_TM_DSCR(r3)
        ld      r6, THREAD_TM_PPR(r3)
        li      r4, MSR_RI
        mtmsrd  r4, 1
 
+       /* Restore kernel live AMR */
+       ld      r8, TM_FRAME_L0(r1)
+       mtspr   SPRN_AMR, r8
+
        REST_NVGPRS(r1)
 
        addi    r1, r1, TM_FRAME_SIZE