.. | .. |
---|
646 | 646 | |
---|
647 | 647 | #ifdef CONFIG_PREEMPT |
---|
648 | 648 | ldr w24, [tsk, #TSK_TI_PREEMPT] // get preempt count |
---|
649 | | - cbnz w24, 1f // preempt count != 0 |
---|
| 649 | + cbnz w24, 2f // preempt count != 0 |
---|
650 | 650 | 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? |
---|
653 | 656 | 1: |
---|
| 657 | + bl el1_preempt |
---|
| 658 | +2: |
---|
654 | 659 | #endif |
---|
655 | 660 | #ifdef CONFIG_TRACE_IRQFLAGS |
---|
656 | 661 | bl trace_hardirqs_on |
---|
.. | .. |
---|
664 | 669 | 1: bl preempt_schedule_irq // irq en/disable is done inside |
---|
665 | 670 | ldr x0, [tsk, #TSK_TI_FLAGS] // get new tasks TI_FLAGS |
---|
666 | 671 | tbnz x0, #TIF_NEED_RESCHED, 1b // needs rescheduling? |
---|
| 672 | + tbnz x0, #TIF_NEED_RESCHED_LAZY, 1b // needs rescheduling? |
---|
667 | 673 | ret x24 |
---|
668 | 674 | #endif |
---|
669 | 675 | |
---|