Commit eca24110 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

powerpc/32: Always enable data translation on syscall entry

If the code can use a stack in vm area, it can also use a
stack in linear space.

Simplify code by removing old non VMAP stack code on PPC32 in syscall.

That means the data translation is now re-enabled early in
syscall entry in all cases, not only when using VMAP stacks.
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/412c6c1786922d991bbb89c2ad2e82cffe8ab112.1612796617.git.christophe.leroy@csgroup.eu
parent 57fdfbce
...@@ -118,7 +118,6 @@ ...@@ -118,7 +118,6 @@
.macro SYSCALL_ENTRY trapno .macro SYSCALL_ENTRY trapno
mfspr r12,SPRN_SPRG_THREAD mfspr r12,SPRN_SPRG_THREAD
mfspr r9, SPRN_SRR1 mfspr r9, SPRN_SRR1
#ifdef CONFIG_VMAP_STACK
mfspr r11, SPRN_SRR0 mfspr r11, SPRN_SRR0
mtctr r11 mtctr r11
andi. r11, r9, MSR_PR andi. r11, r9, MSR_PR
...@@ -126,30 +125,16 @@ ...@@ -126,30 +125,16 @@
lwz r1,TASK_STACK-THREAD(r12) lwz r1,TASK_STACK-THREAD(r12)
beq- 99f beq- 99f
addi r1, r1, THREAD_SIZE - INT_FRAME_SIZE addi r1, r1, THREAD_SIZE - INT_FRAME_SIZE
li r10, MSR_KERNEL & ~(MSR_IR | MSR_RI) /* can take DTLB miss */ LOAD_REG_IMMEDIATE(r10, MSR_KERNEL & ~(MSR_IR | MSR_RI)) /* can take DTLB miss */
mtmsr r10 mtmsr r10
isync isync
tovirt(r12, r12) tovirt(r12, r12)
stw r11,GPR1(r1) stw r11,GPR1(r1)
stw r11,0(r1) stw r11,0(r1)
mr r11, r1 mr r11, r1
#else
andi. r11, r9, MSR_PR
lwz r11,TASK_STACK-THREAD(r12)
beq- 99f
addi r11, r11, THREAD_SIZE - INT_FRAME_SIZE
tophys(r11, r11)
stw r1,GPR1(r11)
stw r1,0(r11)
tovirt(r1, r11) /* set new kernel sp */
#endif
mflr r10 mflr r10
stw r10, _LINK(r11) stw r10, _LINK(r11)
#ifdef CONFIG_VMAP_STACK
mfctr r10 mfctr r10
#else
mfspr r10,SPRN_SRR0
#endif
stw r10,_NIP(r11) stw r10,_NIP(r11)
mfcr r10 mfcr r10
rlwinm r10,r10,0,4,2 /* Clear SO bit in CR */ rlwinm r10,r10,0,4,2 /* Clear SO bit in CR */
...@@ -157,11 +142,7 @@ ...@@ -157,11 +142,7 @@
#ifdef CONFIG_40x #ifdef CONFIG_40x
rlwinm r9,r9,0,14,12 /* clear MSR_WE (necessary?) */ rlwinm r9,r9,0,14,12 /* clear MSR_WE (necessary?) */
#else #else
#ifdef CONFIG_VMAP_STACK
LOAD_REG_IMMEDIATE(r10, MSR_KERNEL & ~MSR_IR) /* can take exceptions */ LOAD_REG_IMMEDIATE(r10, MSR_KERNEL & ~MSR_IR) /* can take exceptions */
#else
LOAD_REG_IMMEDIATE(r10, MSR_KERNEL & ~(MSR_IR|MSR_DR)) /* can take exceptions */
#endif
mtmsr r10 /* (except for mach check in rtas) */ mtmsr r10 /* (except for mach check in rtas) */
#endif #endif
lis r10,STACK_FRAME_REGS_MARKER@ha /* exception frame marker */ lis r10,STACK_FRAME_REGS_MARKER@ha /* exception frame marker */
...@@ -190,7 +171,6 @@ ...@@ -190,7 +171,6 @@
li r12,-1 /* clear all pending debug events */ li r12,-1 /* clear all pending debug events */
mtspr SPRN_DBSR,r12 mtspr SPRN_DBSR,r12
lis r11,global_dbcr0@ha lis r11,global_dbcr0@ha
tophys(r11,r11)
addi r11,r11,global_dbcr0@l addi r11,r11,global_dbcr0@l
lwz r12,0(r11) lwz r12,0(r11)
mtspr SPRN_DBCR0,r12 mtspr SPRN_DBCR0,r12
...@@ -200,7 +180,6 @@ ...@@ -200,7 +180,6 @@
#endif #endif
3: 3:
tovirt_novmstack r2, r2 /* set r2 to current */
lis r11, transfer_to_syscall@h lis r11, transfer_to_syscall@h
ori r11, r11, transfer_to_syscall@l ori r11, r11, transfer_to_syscall@l
#ifdef CONFIG_TRACE_IRQFLAGS #ifdef CONFIG_TRACE_IRQFLAGS
......
...@@ -144,7 +144,6 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV) ...@@ -144,7 +144,6 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
li r12,-1 /* clear all pending debug events */ li r12,-1 /* clear all pending debug events */
mtspr SPRN_DBSR,r12 mtspr SPRN_DBSR,r12
lis r11,global_dbcr0@ha lis r11,global_dbcr0@ha
tophys(r11,r11)
addi r11,r11,global_dbcr0@l addi r11,r11,global_dbcr0@l
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
lwz r10, TASK_CPU(r2) lwz r10, TASK_CPU(r2)
...@@ -158,7 +157,6 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV) ...@@ -158,7 +157,6 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
stw r12,4(r11) stw r12,4(r11)
3: 3:
tovirt(r2, r2) /* set r2 to current */
lis r11, transfer_to_syscall@h lis r11, transfer_to_syscall@h
ori r11, r11, transfer_to_syscall@l ori r11, r11, transfer_to_syscall@l
#ifdef CONFIG_TRACE_IRQFLAGS #ifdef CONFIG_TRACE_IRQFLAGS
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment