diff --git a/arch/arm/kernel/iwmmxt.S b/arch/arm/kernel/iwmmxt.S index a5599cf..9fa671a 100644 --- a/arch/arm/kernel/iwmmxt.S +++ b/arch/arm/kernel/iwmmxt.S @@ -70,7 +70,7 @@ */ ENTRY(iwmmxt_task_enable) - inc_preempt_count r10, r3 + inc_preempt_count r10, r4 XSC(mrc p15, 0, r2, c15, c1, 0) PJ4(mrc p15, 0, r2, c1, c0, 2) @@ -95,10 +95,18 @@ ENTRY(iwmmxt_task_enable) mrc p15, 0, r2, c2, c0, 0 mov r2, r2 @ cpwait - teq r1, #0 @ test for last ownership - mov lr, r9 @ normal exit from exception - beq concan_load @ no owner, skip save - + mov r4, r1 + teq r4, #0 @ test for last ownership + bleq concan_load @ no owner, skip save + teq r4, #0 @ test for last ownership + blne concan_save + +#ifdef CONFIG_PREEMPT_COUNT + get_thread_info r10 +#endif +4: dec_preempt_count r10, r4 + mov pc, r9 @ normal exit from exception + concan_save: tmrc r2, wCon @@ -175,10 +183,6 @@ concan_load: tmcr wCon, r2 3: -#ifdef CONFIG_PREEMPT_COUNT - get_thread_info r10 -#endif -4: dec_preempt_count r10, r3 mov pc, lr /*