STREG   %r19,PT_SR7(%r16)
 
 intr_return:
+       /* NOTE: Need to enable interrupts incase we schedule. */
+       ssm     PSW_SM_I, %r0
+
        /* check for reschedule */
        mfctl   %cr30,%r1
        LDREG   TI_FLAGS(%r1),%r19      /* sched.h: TIF_NEED_RESCHED */
        LDREG   PT_IASQ1(%r16), %r20
        cmpib,COND(=),n 0,%r20,intr_restore /* backward */
 
-       /* NOTE: We need to enable interrupts if we have to deliver
-        * signals. We used to do this earlier but it caused kernel
-        * stack overflows. */
-       ssm     PSW_SM_I, %r0
-
        copy    %r0, %r25                       /* long in_syscall = 0 */
 #ifdef CONFIG_64BIT
        ldo     -16(%r30),%r29                  /* Reference param save area */
        cmpib,COND(=)   0, %r20, intr_do_preempt
        nop
 
-       /* NOTE: We need to enable interrupts if we schedule.  We used
-        * to do this earlier but it caused kernel stack overflows. */
-       ssm     PSW_SM_I, %r0
-
 #ifdef CONFIG_64BIT
        ldo     -16(%r30),%r29          /* Reference param save area */
 #endif