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.S86
1 files changed, 43 insertions, 43 deletions
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index 662c6dd98072..b629198b072c 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -106,7 +106,7 @@ BEGIN_FW_FTR_SECTION
106 LDX_BE r10,0,r10 /* get log write index */ 106 LDX_BE r10,0,r10 /* get log write index */
107 cmpd cr1,r11,r10 107 cmpd cr1,r11,r10
108 beq+ cr1,33f 108 beq+ cr1,33f
109 bl .accumulate_stolen_time 109 bl accumulate_stolen_time
110 REST_GPR(0,r1) 110 REST_GPR(0,r1)
111 REST_4GPRS(3,r1) 111 REST_4GPRS(3,r1)
112 REST_2GPRS(7,r1) 112 REST_2GPRS(7,r1)
@@ -143,7 +143,7 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)
143 std r10,SOFTE(r1) 143 std r10,SOFTE(r1)
144 144
145#ifdef SHOW_SYSCALLS 145#ifdef SHOW_SYSCALLS
146 bl .do_show_syscall 146 bl do_show_syscall
147 REST_GPR(0,r1) 147 REST_GPR(0,r1)
148 REST_4GPRS(3,r1) 148 REST_4GPRS(3,r1)
149 REST_2GPRS(7,r1) 149 REST_2GPRS(7,r1)
@@ -181,7 +181,7 @@ system_call: /* label this so stack traces look sane */
181syscall_exit: 181syscall_exit:
182 std r3,RESULT(r1) 182 std r3,RESULT(r1)
183#ifdef SHOW_SYSCALLS 183#ifdef SHOW_SYSCALLS
184 bl .do_show_syscall_exit 184 bl do_show_syscall_exit
185 ld r3,RESULT(r1) 185 ld r3,RESULT(r1)
186#endif 186#endif
187 CURRENT_THREAD_INFO(r12, r1) 187 CURRENT_THREAD_INFO(r12, r1)
@@ -248,9 +248,9 @@ syscall_error:
248 248
249/* Traced system call support */ 249/* Traced system call support */
250syscall_dotrace: 250syscall_dotrace:
251 bl .save_nvgprs 251 bl save_nvgprs
252 addi r3,r1,STACK_FRAME_OVERHEAD 252 addi r3,r1,STACK_FRAME_OVERHEAD
253 bl .do_syscall_trace_enter 253 bl do_syscall_trace_enter
254 /* 254 /*
255 * Restore argument registers possibly just changed. 255 * Restore argument registers possibly just changed.
256 * We use the return value of do_syscall_trace_enter 256 * We use the return value of do_syscall_trace_enter
@@ -308,7 +308,7 @@ syscall_exit_work:
3084: /* Anything else left to do? */ 3084: /* Anything else left to do? */
309 SET_DEFAULT_THREAD_PPR(r3, r10) /* Set thread.ppr = 3 */ 309 SET_DEFAULT_THREAD_PPR(r3, r10) /* Set thread.ppr = 3 */
310 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP) 310 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP)
311 beq .ret_from_except_lite 311 beq ret_from_except_lite
312 312
313 /* Re-enable interrupts */ 313 /* Re-enable interrupts */
314#ifdef CONFIG_PPC_BOOK3E 314#ifdef CONFIG_PPC_BOOK3E
@@ -319,10 +319,10 @@ syscall_exit_work:
319 mtmsrd r10,1 319 mtmsrd r10,1
320#endif /* CONFIG_PPC_BOOK3E */ 320#endif /* CONFIG_PPC_BOOK3E */
321 321
322 bl .save_nvgprs 322 bl save_nvgprs
323 addi r3,r1,STACK_FRAME_OVERHEAD 323 addi r3,r1,STACK_FRAME_OVERHEAD
324 bl .do_syscall_trace_leave 324 bl do_syscall_trace_leave
325 b .ret_from_except 325 b ret_from_except
326 326
327/* Save non-volatile GPRs, if not already saved. */ 327/* Save non-volatile GPRs, if not already saved. */
328_GLOBAL(save_nvgprs) 328_GLOBAL(save_nvgprs)
@@ -345,38 +345,38 @@ _GLOBAL(save_nvgprs)
345 */ 345 */
346 346
347_GLOBAL(ppc_fork) 347_GLOBAL(ppc_fork)
348 bl .save_nvgprs 348 bl save_nvgprs
349 bl .sys_fork 349 bl sys_fork
350 b syscall_exit 350 b syscall_exit
351 351
352_GLOBAL(ppc_vfork) 352_GLOBAL(ppc_vfork)
353 bl .save_nvgprs 353 bl save_nvgprs
354 bl .sys_vfork 354 bl sys_vfork
355 b syscall_exit 355 b syscall_exit
356 356
357_GLOBAL(ppc_clone) 357_GLOBAL(ppc_clone)
358 bl .save_nvgprs 358 bl save_nvgprs
359 bl .sys_clone 359 bl sys_clone
360 b syscall_exit 360 b syscall_exit
361 361
362_GLOBAL(ppc32_swapcontext) 362_GLOBAL(ppc32_swapcontext)
363 bl .save_nvgprs 363 bl save_nvgprs
364 bl .compat_sys_swapcontext 364 bl compat_sys_swapcontext
365 b syscall_exit 365 b syscall_exit
366 366
367_GLOBAL(ppc64_swapcontext) 367_GLOBAL(ppc64_swapcontext)
368 bl .save_nvgprs 368 bl save_nvgprs
369 bl .sys_swapcontext 369 bl sys_swapcontext
370 b syscall_exit 370 b syscall_exit
371 371
372_GLOBAL(ret_from_fork) 372_GLOBAL(ret_from_fork)
373 bl .schedule_tail 373 bl schedule_tail
374 REST_NVGPRS(r1) 374 REST_NVGPRS(r1)
375 li r3,0 375 li r3,0
376 b syscall_exit 376 b syscall_exit
377 377
378_GLOBAL(ret_from_kernel_thread) 378_GLOBAL(ret_from_kernel_thread)
379 bl .schedule_tail 379 bl schedule_tail
380 REST_NVGPRS(r1) 380 REST_NVGPRS(r1)
381 ld r14, 0(r14) 381 ld r14, 0(r14)
382 mtlr r14 382 mtlr r14
@@ -611,7 +611,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_DSCR)
611_GLOBAL(ret_from_except) 611_GLOBAL(ret_from_except)
612 ld r11,_TRAP(r1) 612 ld r11,_TRAP(r1)
613 andi. r0,r11,1 613 andi. r0,r11,1
614 bne .ret_from_except_lite 614 bne ret_from_except_lite
615 REST_NVGPRS(r1) 615 REST_NVGPRS(r1)
616 616
617_GLOBAL(ret_from_except_lite) 617_GLOBAL(ret_from_except_lite)
@@ -661,23 +661,23 @@ _GLOBAL(ret_from_except_lite)
661#endif 661#endif
6621: andi. r0,r4,_TIF_NEED_RESCHED 6621: andi. r0,r4,_TIF_NEED_RESCHED
663 beq 2f 663 beq 2f
664 bl .restore_interrupts 664 bl restore_interrupts
665 SCHEDULE_USER 665 SCHEDULE_USER
666 b .ret_from_except_lite 666 b ret_from_except_lite
6672: 6672:
668#ifdef CONFIG_PPC_TRANSACTIONAL_MEM 668#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
669 andi. r0,r4,_TIF_USER_WORK_MASK & ~_TIF_RESTORE_TM 669 andi. r0,r4,_TIF_USER_WORK_MASK & ~_TIF_RESTORE_TM
670 bne 3f /* only restore TM if nothing else to do */ 670 bne 3f /* only restore TM if nothing else to do */
671 addi r3,r1,STACK_FRAME_OVERHEAD 671 addi r3,r1,STACK_FRAME_OVERHEAD
672 bl .restore_tm_state 672 bl restore_tm_state
673 b restore 673 b restore
6743: 6743:
675#endif 675#endif
676 bl .save_nvgprs 676 bl save_nvgprs
677 bl .restore_interrupts 677 bl restore_interrupts
678 addi r3,r1,STACK_FRAME_OVERHEAD 678 addi r3,r1,STACK_FRAME_OVERHEAD
679 bl .do_notify_resume 679 bl do_notify_resume
680 b .ret_from_except 680 b ret_from_except
681 681
682resume_kernel: 682resume_kernel:
683 /* check current_thread_info, _TIF_EMULATE_STACK_STORE */ 683 /* check current_thread_info, _TIF_EMULATE_STACK_STORE */
@@ -730,7 +730,7 @@ resume_kernel:
730 * sure we are soft-disabled first and reconcile irq state. 730 * sure we are soft-disabled first and reconcile irq state.
731 */ 731 */
732 RECONCILE_IRQ_STATE(r3,r4) 732 RECONCILE_IRQ_STATE(r3,r4)
7331: bl .preempt_schedule_irq 7331: bl preempt_schedule_irq
734 734
735 /* Re-test flags and eventually loop */ 735 /* Re-test flags and eventually loop */
736 CURRENT_THREAD_INFO(r9, r1) 736 CURRENT_THREAD_INFO(r9, r1)
@@ -792,7 +792,7 @@ restore_no_replay:
792 */ 792 */
793do_restore: 793do_restore:
794#ifdef CONFIG_PPC_BOOK3E 794#ifdef CONFIG_PPC_BOOK3E
795 b .exception_return_book3e 795 b exception_return_book3e
796#else 796#else
797 /* 797 /*
798 * Clear the reservation. If we know the CPU tracks the address of 798 * Clear the reservation. If we know the CPU tracks the address of
@@ -907,7 +907,7 @@ restore_check_irq_replay:
907 * 907 *
908 * Still, this might be useful for things like hash_page 908 * Still, this might be useful for things like hash_page
909 */ 909 */
910 bl .__check_irq_replay 910 bl __check_irq_replay
911 cmpwi cr0,r3,0 911 cmpwi cr0,r3,0
912 beq restore_no_replay 912 beq restore_no_replay
913 913
@@ -928,13 +928,13 @@ restore_check_irq_replay:
928 cmpwi cr0,r3,0x500 928 cmpwi cr0,r3,0x500
929 bne 1f 929 bne 1f
930 addi r3,r1,STACK_FRAME_OVERHEAD; 930 addi r3,r1,STACK_FRAME_OVERHEAD;
931 bl .do_IRQ 931 bl do_IRQ
932 b .ret_from_except 932 b ret_from_except
9331: cmpwi cr0,r3,0x900 9331: cmpwi cr0,r3,0x900
934 bne 1f 934 bne 1f
935 addi r3,r1,STACK_FRAME_OVERHEAD; 935 addi r3,r1,STACK_FRAME_OVERHEAD;
936 bl .timer_interrupt 936 bl timer_interrupt
937 b .ret_from_except 937 b ret_from_except
938#ifdef CONFIG_PPC_DOORBELL 938#ifdef CONFIG_PPC_DOORBELL
9391: 9391:
940#ifdef CONFIG_PPC_BOOK3E 940#ifdef CONFIG_PPC_BOOK3E
@@ -948,14 +948,14 @@ restore_check_irq_replay:
948#endif /* CONFIG_PPC_BOOK3E */ 948#endif /* CONFIG_PPC_BOOK3E */
949 bne 1f 949 bne 1f
950 addi r3,r1,STACK_FRAME_OVERHEAD; 950 addi r3,r1,STACK_FRAME_OVERHEAD;
951 bl .doorbell_exception 951 bl doorbell_exception
952 b .ret_from_except 952 b ret_from_except
953#endif /* CONFIG_PPC_DOORBELL */ 953#endif /* CONFIG_PPC_DOORBELL */
9541: b .ret_from_except /* What else to do here ? */ 9541: b ret_from_except /* What else to do here ? */
955 955
956unrecov_restore: 956unrecov_restore:
957 addi r3,r1,STACK_FRAME_OVERHEAD 957 addi r3,r1,STACK_FRAME_OVERHEAD
958 bl .unrecoverable_exception 958 bl unrecoverable_exception
959 b unrecov_restore 959 b unrecov_restore
960 960
961#ifdef CONFIG_PPC_RTAS 961#ifdef CONFIG_PPC_RTAS
@@ -1238,7 +1238,7 @@ _GLOBAL(ftrace_graph_caller)
1238 ld r11, 112(r1) 1238 ld r11, 112(r1)
1239 addi r3, r11, 16 1239 addi r3, r11, 16
1240 1240
1241 bl .prepare_ftrace_return 1241 bl prepare_ftrace_return
1242 nop 1242 nop
1243 1243
1244 ld r0, 128(r1) 1244 ld r0, 128(r1)
@@ -1254,7 +1254,7 @@ _GLOBAL(return_to_handler)
1254 mr r31, r1 1254 mr r31, r1
1255 stdu r1, -112(r1) 1255 stdu r1, -112(r1)
1256 1256
1257 bl .ftrace_return_to_handler 1257 bl ftrace_return_to_handler
1258 nop 1258 nop
1259 1259
1260 /* return value has real return address */ 1260 /* return value has real return address */
@@ -1284,7 +1284,7 @@ _GLOBAL(mod_return_to_handler)
1284 */ 1284 */
1285 ld r2, PACATOC(r13) 1285 ld r2, PACATOC(r13)
1286 1286
1287 bl .ftrace_return_to_handler 1287 bl ftrace_return_to_handler
1288 nop 1288 nop
1289 1289
1290 /* return value has real return address */ 1290 /* return value has real return address */