]> rtime.felk.cvut.cz Git - zynq/linux.git/blobdiff - arch/powerpc/kernel/entry_32.S
Apply preempt_rt patch-4.9-rt1.patch.xz
[zynq/linux.git] / arch / powerpc / kernel / entry_32.S
index 3841d749a430069f4d4f2705c4199c08609b3757..6dbaeff192b9d5dcbd2eecc5071400fe94ab5855 100644 (file)
@@ -835,7 +835,14 @@ resume_kernel:
        cmpwi   0,r0,0          /* if non-zero, just restore regs and return */
        bne     restore
        andi.   r8,r8,_TIF_NEED_RESCHED
+       bne+    1f
+       lwz     r0,TI_PREEMPT_LAZY(r9)
+       cmpwi   0,r0,0          /* if non-zero, just restore regs and return */
+       bne     restore
+       lwz     r0,TI_FLAGS(r9)
+       andi.   r0,r0,_TIF_NEED_RESCHED_LAZY
        beq+    restore
+1:
        lwz     r3,_MSR(r1)
        andi.   r0,r3,MSR_EE    /* interrupts off? */
        beq     restore         /* don't schedule if so */
@@ -846,11 +853,11 @@ resume_kernel:
         */
        bl      trace_hardirqs_off
 #endif
-1:     bl      preempt_schedule_irq
+2:     bl      preempt_schedule_irq
        CURRENT_THREAD_INFO(r9, r1)
        lwz     r3,TI_FLAGS(r9)
-       andi.   r0,r3,_TIF_NEED_RESCHED
-       bne-    1b
+       andi.   r0,r3,_TIF_NEED_RESCHED_MASK
+       bne-    2b
 #ifdef CONFIG_TRACE_IRQFLAGS
        /* And now, to properly rebalance the above, we tell lockdep they
         * are being turned back on, which will happen when we return
@@ -1171,7 +1178,7 @@ global_dbcr0:
 #endif /* !(CONFIG_4xx || CONFIG_BOOKE) */
 
 do_work:                       /* r10 contains MSR_KERNEL here */
-       andi.   r0,r9,_TIF_NEED_RESCHED
+       andi.   r0,r9,_TIF_NEED_RESCHED_MASK
        beq     do_user_signal
 
 do_resched:                    /* r10 contains MSR_KERNEL here */
@@ -1192,7 +1199,7 @@ recheck:
        MTMSRD(r10)             /* disable interrupts */
        CURRENT_THREAD_INFO(r9, r1)
        lwz     r9,TI_FLAGS(r9)
-       andi.   r0,r9,_TIF_NEED_RESCHED
+       andi.   r0,r9,_TIF_NEED_RESCHED_MASK
        bne-    do_resched
        andi.   r0,r9,_TIF_USER_WORK_MASK
        beq     restore_user