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.S24
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index d180caf2d6de..8ca9434c40e6 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -34,6 +34,7 @@
34#include <asm/ftrace.h> 34#include <asm/ftrace.h>
35#include <asm/hw_irq.h> 35#include <asm/hw_irq.h>
36#include <asm/context_tracking.h> 36#include <asm/context_tracking.h>
37#include <asm/tm.h>
37 38
38/* 39/*
39 * System calls. 40 * System calls.
@@ -145,6 +146,24 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)
145 andi. r11,r10,_TIF_SYSCALL_DOTRACE 146 andi. r11,r10,_TIF_SYSCALL_DOTRACE
146 bne syscall_dotrace 147 bne syscall_dotrace
147.Lsyscall_dotrace_cont: 148.Lsyscall_dotrace_cont:
149#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
150BEGIN_FTR_SECTION
151 b 1f
152END_FTR_SECTION_IFCLR(CPU_FTR_TM)
153 extrdi. r11, r12, 1, (63-MSR_TS_T_LG) /* transaction active? */
154 beq+ 1f
155
156 /* Doom the transaction and don't perform the syscall: */
157 mfmsr r11
158 li r12, 1
159 rldimi r11, r12, MSR_TM_LG, 63-MSR_TM_LG
160 mtmsrd r11, 0
161 li r11, (TM_CAUSE_SYSCALL|TM_CAUSE_PERSISTENT)
162 TABORT(R11)
163
164 b .Lsyscall_exit
1651:
166#endif
148 cmpldi 0,r0,NR_syscalls 167 cmpldi 0,r0,NR_syscalls
149 bge- syscall_enosys 168 bge- syscall_enosys
150 169
@@ -356,6 +375,11 @@ _GLOBAL(ppc64_swapcontext)
356 bl sys_swapcontext 375 bl sys_swapcontext
357 b .Lsyscall_exit 376 b .Lsyscall_exit
358 377
378_GLOBAL(ppc_switch_endian)
379 bl save_nvgprs
380 bl sys_switch_endian
381 b .Lsyscall_exit
382
359_GLOBAL(ret_from_fork) 383_GLOBAL(ret_from_fork)
360 bl schedule_tail 384 bl schedule_tail
361 REST_NVGPRS(r1) 385 REST_NVGPRS(r1)