diff options
Diffstat (limited to 'arch/arm/kernel/iwmmxt.S')
| -rw-r--r-- | arch/arm/kernel/iwmmxt.S | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/arch/arm/kernel/iwmmxt.S b/arch/arm/kernel/iwmmxt.S index a3bae95e536c..b63b528f22a6 100644 --- a/arch/arm/kernel/iwmmxt.S +++ b/arch/arm/kernel/iwmmxt.S | |||
| @@ -271,30 +271,27 @@ ENTRY(iwmmxt_task_restore) | |||
| 271 | /* | 271 | /* |
| 272 | * Concan handling on task switch | 272 | * Concan handling on task switch |
| 273 | * | 273 | * |
| 274 | * r0 = previous task_struct pointer (must be preserved) | 274 | * r0 = next thread_info pointer |
| 275 | * r1 = previous thread_info pointer | ||
| 276 | * r2 = next thread_info pointer (must be preserved) | ||
| 277 | * | 275 | * |
| 278 | * Called only from __switch_to with task preemption disabled. | 276 | * Called only from the iwmmxt notifier with task preemption disabled. |
| 279 | * No need to care about preserving r4 and above. | ||
| 280 | */ | 277 | */ |
| 281 | ENTRY(iwmmxt_task_switch) | 278 | ENTRY(iwmmxt_task_switch) |
| 282 | 279 | ||
| 283 | mrc p15, 0, r4, c15, c1, 0 | 280 | mrc p15, 0, r1, c15, c1, 0 |
| 284 | tst r4, #0x3 @ CP0 and CP1 accessible? | 281 | tst r1, #0x3 @ CP0 and CP1 accessible? |
| 285 | bne 1f @ yes: block them for next task | 282 | bne 1f @ yes: block them for next task |
| 286 | 283 | ||
| 287 | ldr r5, =concan_owner | 284 | ldr r2, =concan_owner |
| 288 | add r6, r2, #TI_IWMMXT_STATE @ get next task Concan save area | 285 | add r3, r0, #TI_IWMMXT_STATE @ get next task Concan save area |
| 289 | ldr r5, [r5] @ get current Concan owner | 286 | ldr r2, [r2] @ get current Concan owner |
| 290 | teq r5, r6 @ next task owns it? | 287 | teq r2, r3 @ next task owns it? |
| 291 | movne pc, lr @ no: leave Concan disabled | 288 | movne pc, lr @ no: leave Concan disabled |
| 292 | 289 | ||
| 293 | 1: eor r4, r4, #3 @ flip Concan access | 290 | 1: eor r1, r1, #3 @ flip Concan access |
| 294 | mcr p15, 0, r4, c15, c1, 0 | 291 | mcr p15, 0, r1, c15, c1, 0 |
| 295 | 292 | ||
| 296 | mrc p15, 0, r4, c2, c0, 0 | 293 | mrc p15, 0, r1, c2, c0, 0 |
| 297 | sub pc, lr, r4, lsr #32 @ cpwait and return | 294 | sub pc, lr, r1, lsr #32 @ cpwait and return |
| 298 | 295 | ||
| 299 | /* | 296 | /* |
| 300 | * Remove Concan ownership of given task | 297 | * Remove Concan ownership of given task |
