diff options
Diffstat (limited to 'arch/arm/kernel/iwmmxt.S')
-rw-r--r-- | arch/arm/kernel/iwmmxt.S | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/arch/arm/kernel/iwmmxt.S b/arch/arm/kernel/iwmmxt.S index a5599cfc43cb..2b32978ae905 100644 --- a/arch/arm/kernel/iwmmxt.S +++ b/arch/arm/kernel/iwmmxt.S | |||
@@ -94,13 +94,19 @@ ENTRY(iwmmxt_task_enable) | |||
94 | 94 | ||
95 | mrc p15, 0, r2, c2, c0, 0 | 95 | mrc p15, 0, r2, c2, c0, 0 |
96 | mov r2, r2 @ cpwait | 96 | mov r2, r2 @ cpwait |
97 | bl concan_save | ||
97 | 98 | ||
98 | teq r1, #0 @ test for last ownership | 99 | #ifdef CONFIG_PREEMPT_COUNT |
99 | mov lr, r9 @ normal exit from exception | 100 | get_thread_info r10 |
100 | beq concan_load @ no owner, skip save | 101 | #endif |
102 | 4: dec_preempt_count r10, r3 | ||
103 | mov pc, r9 @ normal exit from exception | ||
101 | 104 | ||
102 | concan_save: | 105 | concan_save: |
103 | 106 | ||
107 | teq r1, #0 @ test for last ownership | ||
108 | beq concan_load @ no owner, skip save | ||
109 | |||
104 | tmrc r2, wCon | 110 | tmrc r2, wCon |
105 | 111 | ||
106 | @ CUP? wCx | 112 | @ CUP? wCx |
@@ -138,7 +144,7 @@ concan_dump: | |||
138 | wstrd wR15, [r1, #MMX_WR15] | 144 | wstrd wR15, [r1, #MMX_WR15] |
139 | 145 | ||
140 | 2: teq r0, #0 @ anything to load? | 146 | 2: teq r0, #0 @ anything to load? |
141 | beq 3f | 147 | moveq pc, lr @ if not, return |
142 | 148 | ||
143 | concan_load: | 149 | concan_load: |
144 | 150 | ||
@@ -171,14 +177,9 @@ concan_load: | |||
171 | @ clear CUP/MUP (only if r1 != 0) | 177 | @ clear CUP/MUP (only if r1 != 0) |
172 | teq r1, #0 | 178 | teq r1, #0 |
173 | mov r2, #0 | 179 | mov r2, #0 |
174 | beq 3f | 180 | moveq pc, lr |
175 | tmcr wCon, r2 | ||
176 | 181 | ||
177 | 3: | 182 | tmcr wCon, r2 |
178 | #ifdef CONFIG_PREEMPT_COUNT | ||
179 | get_thread_info r10 | ||
180 | #endif | ||
181 | 4: dec_preempt_count r10, r3 | ||
182 | mov pc, lr | 183 | mov pc, lr |
183 | 184 | ||
184 | /* | 185 | /* |