| .. | .. |
|---|
| 206 | 206 | |
|---|
| 207 | 207 | #ifdef CONFIG_PREEMPTION |
|---|
| 208 | 208 | ldr r8, [tsk, #TI_PREEMPT] @ get preempt count |
|---|
| 209 | | - teq r8, #0 @ if preempt count != 0 |
|---|
| 210 | | - bne 1f @ return from exeption |
|---|
| 211 | 209 | ldr r0, [tsk, #TI_FLAGS] @ get flags |
|---|
| 212 | | - tst r0, #_TIF_NEED_RESCHED @ if NEED_RESCHED is set |
|---|
| 213 | | - blne svc_preempt @ preempt! |
|---|
| 214 | | - |
|---|
| 215 | | - ldr r8, [tsk, #TI_PREEMPT_LAZY] @ get preempt lazy count |
|---|
| 216 | | - teq r8, #0 @ if preempt lazy count != 0 |
|---|
| 210 | + teq r8, #0 @ if preempt count != 0 |
|---|
| 217 | 211 | movne r0, #0 @ force flags to 0 |
|---|
| 218 | | - tst r0, #_TIF_NEED_RESCHED_LAZY |
|---|
| 212 | + tst r0, #_TIF_NEED_RESCHED |
|---|
| 219 | 213 | blne svc_preempt |
|---|
| 220 | | -1: |
|---|
| 221 | 214 | #endif |
|---|
| 222 | 215 | |
|---|
| 223 | 216 | svc_exit r5, irq = 1 @ return from exception |
|---|
| .. | .. |
|---|
| 232 | 225 | 1: bl preempt_schedule_irq @ irq en/disable is done inside |
|---|
| 233 | 226 | ldr r0, [tsk, #TI_FLAGS] @ get new tasks TI_FLAGS |
|---|
| 234 | 227 | tst r0, #_TIF_NEED_RESCHED |
|---|
| 235 | | - bne 1b |
|---|
| 236 | | - tst r0, #_TIF_NEED_RESCHED_LAZY |
|---|
| 237 | 228 | reteq r8 @ go again |
|---|
| 238 | | - ldr r0, [tsk, #TI_PREEMPT_LAZY] @ get preempt lazy count |
|---|
| 239 | | - teq r0, #0 @ if preempt lazy count != 0 |
|---|
| 240 | | - beq 1b |
|---|
| 241 | | - ret r8 @ go again |
|---|
| 242 | | - |
|---|
| 229 | + b 1b |
|---|
| 243 | 230 | #endif |
|---|
| 244 | 231 | |
|---|
| 245 | 232 | __und_fault: |
|---|