aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/entry_64.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/entry_64.S')
-rw-r--r--arch/powerpc/kernel/entry_64.S37
1 files changed, 12 insertions, 25 deletions
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index 194e46dcf08d..d180caf2d6de 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -49,8 +49,6 @@ exception_marker:
49 .section ".text" 49 .section ".text"
50 .align 7 50 .align 7
51 51
52#undef SHOW_SYSCALLS
53
54 .globl system_call_common 52 .globl system_call_common
55system_call_common: 53system_call_common:
56 andi. r10,r12,MSR_PR 54 andi. r10,r12,MSR_PR
@@ -142,16 +140,9 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)
142 li r10,1 140 li r10,1
143 std r10,SOFTE(r1) 141 std r10,SOFTE(r1)
144 142
145#ifdef SHOW_SYSCALLS
146 bl do_show_syscall
147 REST_GPR(0,r1)
148 REST_4GPRS(3,r1)
149 REST_2GPRS(7,r1)
150 addi r9,r1,STACK_FRAME_OVERHEAD
151#endif
152 CURRENT_THREAD_INFO(r11, r1) 143 CURRENT_THREAD_INFO(r11, r1)
153 ld r10,TI_FLAGS(r11) 144 ld r10,TI_FLAGS(r11)
154 andi. r11,r10,_TIF_SYSCALL_T_OR_A 145 andi. r11,r10,_TIF_SYSCALL_DOTRACE
155 bne syscall_dotrace 146 bne syscall_dotrace
156.Lsyscall_dotrace_cont: 147.Lsyscall_dotrace_cont:
157 cmpldi 0,r0,NR_syscalls 148 cmpldi 0,r0,NR_syscalls
@@ -178,12 +169,8 @@ system_call: /* label this so stack traces look sane */
178 mtctr r12 169 mtctr r12
179 bctrl /* Call handler */ 170 bctrl /* Call handler */
180 171
181syscall_exit: 172.Lsyscall_exit:
182 std r3,RESULT(r1) 173 std r3,RESULT(r1)
183#ifdef SHOW_SYSCALLS
184 bl do_show_syscall_exit
185 ld r3,RESULT(r1)
186#endif
187 CURRENT_THREAD_INFO(r12, r1) 174 CURRENT_THREAD_INFO(r12, r1)
188 175
189 ld r8,_MSR(r1) 176 ld r8,_MSR(r1)
@@ -214,7 +201,7 @@ syscall_exit:
214 201
215 ld r9,TI_FLAGS(r12) 202 ld r9,TI_FLAGS(r12)
216 li r11,-_LAST_ERRNO 203 li r11,-_LAST_ERRNO
217 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK) 204 andi. r0,r9,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
218 bne- syscall_exit_work 205 bne- syscall_exit_work
219 cmpld r3,r11 206 cmpld r3,r11
220 ld r5,_CCR(r1) 207 ld r5,_CCR(r1)
@@ -270,7 +257,7 @@ syscall_dotrace:
270 257
271syscall_enosys: 258syscall_enosys:
272 li r3,-ENOSYS 259 li r3,-ENOSYS
273 b syscall_exit 260 b .Lsyscall_exit
274 261
275syscall_exit_work: 262syscall_exit_work:
276#ifdef CONFIG_PPC_BOOK3S 263#ifdef CONFIG_PPC_BOOK3S
@@ -307,7 +294,7 @@ syscall_exit_work:
307 294
3084: /* Anything else left to do? */ 2954: /* Anything else left to do? */
309 SET_DEFAULT_THREAD_PPR(r3, r10) /* Set thread.ppr = 3 */ 296 SET_DEFAULT_THREAD_PPR(r3, r10) /* Set thread.ppr = 3 */
310 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP) 297 andi. r0,r9,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP)
311 beq ret_from_except_lite 298 beq ret_from_except_lite
312 299
313 /* Re-enable interrupts */ 300 /* Re-enable interrupts */
@@ -347,33 +334,33 @@ _GLOBAL(save_nvgprs)
347_GLOBAL(ppc_fork) 334_GLOBAL(ppc_fork)
348 bl save_nvgprs 335 bl save_nvgprs
349 bl sys_fork 336 bl sys_fork
350 b syscall_exit 337 b .Lsyscall_exit
351 338
352_GLOBAL(ppc_vfork) 339_GLOBAL(ppc_vfork)
353 bl save_nvgprs 340 bl save_nvgprs
354 bl sys_vfork 341 bl sys_vfork
355 b syscall_exit 342 b .Lsyscall_exit
356 343
357_GLOBAL(ppc_clone) 344_GLOBAL(ppc_clone)
358 bl save_nvgprs 345 bl save_nvgprs
359 bl sys_clone 346 bl sys_clone
360 b syscall_exit 347 b .Lsyscall_exit
361 348
362_GLOBAL(ppc32_swapcontext) 349_GLOBAL(ppc32_swapcontext)
363 bl save_nvgprs 350 bl save_nvgprs
364 bl compat_sys_swapcontext 351 bl compat_sys_swapcontext
365 b syscall_exit 352 b .Lsyscall_exit
366 353
367_GLOBAL(ppc64_swapcontext) 354_GLOBAL(ppc64_swapcontext)
368 bl save_nvgprs 355 bl save_nvgprs
369 bl sys_swapcontext 356 bl sys_swapcontext
370 b syscall_exit 357 b .Lsyscall_exit
371 358
372_GLOBAL(ret_from_fork) 359_GLOBAL(ret_from_fork)
373 bl schedule_tail 360 bl schedule_tail
374 REST_NVGPRS(r1) 361 REST_NVGPRS(r1)
375 li r3,0 362 li r3,0
376 b syscall_exit 363 b .Lsyscall_exit
377 364
378_GLOBAL(ret_from_kernel_thread) 365_GLOBAL(ret_from_kernel_thread)
379 bl schedule_tail 366 bl schedule_tail
@@ -385,7 +372,7 @@ _GLOBAL(ret_from_kernel_thread)
385#endif 372#endif
386 blrl 373 blrl
387 li r3,0 374 li r3,0
388 b syscall_exit 375 b .Lsyscall_exit
389 376
390/* 377/*
391 * This routine switches between two different tasks. The process 378 * This routine switches between two different tasks. The process