]> rtime.felk.cvut.cz Git - zynq/linux.git/blobdiff - arch/arm64/kernel/entry.S
Apply preempt_rt patch-4.9-rt1.patch.xz
[zynq/linux.git] / arch / arm64 / kernel / entry.S
index 223d54a4d66b44acdc19e02243ea3d238cf56603..266c0e2141ca290c4004fb5e797b33f64229417a 100644 (file)
@@ -428,11 +428,16 @@ el1_irq:
 
 #ifdef CONFIG_PREEMPT
        ldr     w24, [tsk, #TI_PREEMPT]         // get preempt count
-       cbnz    w24, 1f                         // preempt count != 0
+       cbnz    w24, 2f                         // preempt count != 0
        ldr     x0, [tsk, #TI_FLAGS]            // get flags
-       tbz     x0, #TIF_NEED_RESCHED, 1f       // needs rescheduling?
-       bl      el1_preempt
+       tbnz    x0, #TIF_NEED_RESCHED, 1f       // needs rescheduling?
+
+       ldr     w24, [tsk, #TI_PREEMPT_LAZY]    // get preempt lazy count
+       cbnz    w24, 2f                         // preempt lazy count != 0
+       tbz     x0, #TIF_NEED_RESCHED_LAZY, 2f  // needs rescheduling?
 1:
+       bl      el1_preempt
+2:
 #endif
 #ifdef CONFIG_TRACE_IRQFLAGS
        bl      trace_hardirqs_on
@@ -446,6 +451,7 @@ el1_preempt:
 1:     bl      preempt_schedule_irq            // irq en/disable is done inside
        ldr     x0, [tsk, #TI_FLAGS]            // get new tasks TI_FLAGS
        tbnz    x0, #TIF_NEED_RESCHED, 1b       // needs rescheduling?
+       tbnz    x0, #TIF_NEED_RESCHED_LAZY, 1b  // needs rescheduling?
        ret     x24
 #endif