diff options
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/calls.S | 4 | ||||
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 24 | ||||
-rw-r--r-- | arch/arm/kernel/head-common.S | 7 |
3 files changed, 14 insertions, 21 deletions
diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S index 283e14fff993..95f1c121cb30 100644 --- a/arch/arm/kernel/calls.S +++ b/arch/arm/kernel/calls.S | |||
@@ -359,9 +359,11 @@ | |||
359 | CALL(sys_kexec_load) | 359 | CALL(sys_kexec_load) |
360 | CALL(sys_utimensat) | 360 | CALL(sys_utimensat) |
361 | CALL(sys_signalfd) | 361 | CALL(sys_signalfd) |
362 | /* 350 */ CALL(sys_ni_syscall) | 362 | /* 350 */ CALL(sys_timerfd_create) |
363 | CALL(sys_eventfd) | 363 | CALL(sys_eventfd) |
364 | CALL(sys_fallocate) | 364 | CALL(sys_fallocate) |
365 | CALL(sys_timerfd_settime) | ||
366 | CALL(sys_timerfd_gettime) | ||
365 | #ifndef syscalls_counted | 367 | #ifndef syscalls_counted |
366 | .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls | 368 | .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls |
367 | #define syscalls_counted | 369 | #define syscalls_counted |
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index 6fd1460111ec..7dca225752c1 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -209,14 +209,12 @@ __irq_svc: | |||
209 | 209 | ||
210 | irq_handler | 210 | irq_handler |
211 | #ifdef CONFIG_PREEMPT | 211 | #ifdef CONFIG_PREEMPT |
212 | str r8, [tsk, #TI_PREEMPT] @ restore preempt count | ||
212 | ldr r0, [tsk, #TI_FLAGS] @ get flags | 213 | ldr r0, [tsk, #TI_FLAGS] @ get flags |
214 | teq r8, #0 @ if preempt count != 0 | ||
215 | movne r0, #0 @ force flags to 0 | ||
213 | tst r0, #_TIF_NEED_RESCHED | 216 | tst r0, #_TIF_NEED_RESCHED |
214 | blne svc_preempt | 217 | blne svc_preempt |
215 | preempt_return: | ||
216 | ldr r0, [tsk, #TI_PREEMPT] @ read preempt value | ||
217 | str r8, [tsk, #TI_PREEMPT] @ restore preempt count | ||
218 | teq r0, r7 | ||
219 | strne r0, [r0, -r0] @ bug() | ||
220 | #endif | 218 | #endif |
221 | ldr r0, [sp, #S_PSR] @ irqs are already disabled | 219 | ldr r0, [sp, #S_PSR] @ irqs are already disabled |
222 | msr spsr_cxsf, r0 | 220 | msr spsr_cxsf, r0 |
@@ -230,19 +228,11 @@ preempt_return: | |||
230 | 228 | ||
231 | #ifdef CONFIG_PREEMPT | 229 | #ifdef CONFIG_PREEMPT |
232 | svc_preempt: | 230 | svc_preempt: |
233 | teq r8, #0 @ was preempt count = 0 | 231 | mov r8, lr |
234 | ldreq r6, .LCirq_stat | ||
235 | movne pc, lr @ no | ||
236 | ldr r0, [r6, #4] @ local_irq_count | ||
237 | ldr r1, [r6, #8] @ local_bh_count | ||
238 | adds r0, r0, r1 | ||
239 | movne pc, lr | ||
240 | mov r7, #0 @ preempt_schedule_irq | ||
241 | str r7, [tsk, #TI_PREEMPT] @ expects preempt_count == 0 | ||
242 | 1: bl preempt_schedule_irq @ irq en/disable is done inside | 232 | 1: bl preempt_schedule_irq @ irq en/disable is done inside |
243 | ldr r0, [tsk, #TI_FLAGS] @ get new tasks TI_FLAGS | 233 | ldr r0, [tsk, #TI_FLAGS] @ get new tasks TI_FLAGS |
244 | tst r0, #_TIF_NEED_RESCHED | 234 | tst r0, #_TIF_NEED_RESCHED |
245 | beq preempt_return @ go again | 235 | moveq pc, r8 @ go again |
246 | b 1b | 236 | b 1b |
247 | #endif | 237 | #endif |
248 | 238 | ||
@@ -333,10 +323,6 @@ __pabt_svc: | |||
333 | #endif | 323 | #endif |
334 | .LCfp: | 324 | .LCfp: |
335 | .word fp_enter | 325 | .word fp_enter |
336 | #ifdef CONFIG_PREEMPT | ||
337 | .LCirq_stat: | ||
338 | .word irq_stat | ||
339 | #endif | ||
340 | 326 | ||
341 | /* | 327 | /* |
342 | * User mode handlers | 328 | * User mode handlers |
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S index 50f667febe29..7e9c00a8a412 100644 --- a/arch/arm/kernel/head-common.S +++ b/arch/arm/kernel/head-common.S | |||
@@ -75,8 +75,13 @@ __error_p: | |||
75 | #ifdef CONFIG_DEBUG_LL | 75 | #ifdef CONFIG_DEBUG_LL |
76 | adr r0, str_p1 | 76 | adr r0, str_p1 |
77 | bl printascii | 77 | bl printascii |
78 | mov r0, r9 | ||
79 | bl printhex8 | ||
80 | adr r0, str_p2 | ||
81 | bl printascii | ||
78 | b __error | 82 | b __error |
79 | str_p1: .asciz "\nError: unrecognized/unsupported processor variant.\n" | 83 | str_p1: .asciz "\nError: unrecognized/unsupported processor variant (0x" |
84 | str_p2: .asciz ").\n" | ||
80 | .align | 85 | .align |
81 | #endif | 86 | #endif |
82 | 87 | ||