| .. | .. |
|---|
| 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 | |
|---|