#ifdef __ASSEMBLY__
 
-.macro kuap_restore_amr        gpr
+.macro kuap_restore_amr        gpr1, gpr2
 #ifdef CONFIG_PPC_KUAP
        BEGIN_MMU_FTR_SECTION_NESTED(67)
-       ld      \gpr, STACK_REGS_KUAP(r1)
+       mfspr   \gpr1, SPRN_AMR
+       ld      \gpr2, STACK_REGS_KUAP(r1)
+       cmpd    \gpr1, \gpr2
+       beq     998f
        isync
-       mtspr   SPRN_AMR, \gpr
+       mtspr   SPRN_AMR, \gpr2
        /* No isync required, see kuap_restore_amr() */
+998:
        END_MMU_FTR_SECTION_NESTED_IFSET(MMU_FTR_RADIX_KUAP, 67)
 #endif
 .endm
 
 fast_interrupt_return:
 _ASM_NOKPROBE_SYMBOL(fast_interrupt_return)
        kuap_check_amr r3, r4
-       ld      r4,_MSR(r1)
-       andi.   r0,r4,MSR_PR
+       ld      r5,_MSR(r1)
+       andi.   r0,r5,MSR_PR
        bne     .Lfast_user_interrupt_return
-       kuap_restore_amr r3
-       andi.   r0,r4,MSR_RI
+       kuap_restore_amr r3, r4
+       andi.   r0,r5,MSR_RI
        li      r3,0 /* 0 return value, no EMULATE_STACK_STORE */
        bne+    .Lfast_kernel_interrupt_return
        addi    r3,r1,STACK_FRAME_OVERHEAD
 
        ld      r10,SOFTE(r1)
        stb     r10,PACAIRQSOFTMASK(r13)
 
-       kuap_restore_amr r10
+       kuap_restore_amr r9, r10
        EXCEPTION_RESTORE_REGS
        RFI_TO_USER_OR_KERNEL
 
        ld      r10,SOFTE(r1)
        stb     r10,PACAIRQSOFTMASK(r13)
 
-       kuap_restore_amr r10
+       kuap_restore_amr r9, r10
        EXCEPTION_RESTORE_REGS hsrr=0
        RFI_TO_KERNEL