diff options
Diffstat (limited to 'arch/powerpc/kernel/entry_64.S')
-rw-r--r-- | arch/powerpc/kernel/entry_64.S | 24 |
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 | ||
150 | BEGIN_FTR_SECTION | ||
151 | b 1f | ||
152 | END_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 | ||
165 | 1: | ||
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) |