hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/arch/arm64/kernel/entry.S
....@@ -646,11 +646,16 @@
646646
647647 #ifdef CONFIG_PREEMPT
648648 ldr w24, [tsk, #TSK_TI_PREEMPT] // get preempt count
649
- cbnz w24, 1f // preempt count != 0
649
+ cbnz w24, 2f // preempt count != 0
650650 ldr x0, [tsk, #TSK_TI_FLAGS] // get flags
651
- tbz x0, #TIF_NEED_RESCHED, 1f // needs rescheduling?
652
- bl el1_preempt
651
+ tbnz x0, #TIF_NEED_RESCHED, 1f // needs rescheduling?
652
+
653
+ ldr w24, [tsk, #TSK_TI_PREEMPT_LAZY] // get preempt lazy count
654
+ cbnz w24, 2f // preempt lazy count != 0
655
+ tbz x0, #TIF_NEED_RESCHED_LAZY, 2f // needs rescheduling?
653656 1:
657
+ bl el1_preempt
658
+2:
654659 #endif
655660 #ifdef CONFIG_TRACE_IRQFLAGS
656661 bl trace_hardirqs_on
....@@ -664,6 +669,7 @@
664669 1: bl preempt_schedule_irq // irq en/disable is done inside
665670 ldr x0, [tsk, #TSK_TI_FLAGS] // get new tasks TI_FLAGS
666671 tbnz x0, #TIF_NEED_RESCHED, 1b // needs rescheduling?
672
+ tbnz x0, #TIF_NEED_RESCHED_LAZY, 1b // needs rescheduling?
667673 ret x24
668674 #endif
669675