mirror of
https://github.com/torvalds/linux.git
synced 2024-11-13 07:31:45 +00:00
powerpc/32: Reorder instructions to avoid using CTR in syscall entry
Now that we are using rfi instead of mtmsr to reactivate MMU, it is possible to reorder instructions and avoid the need to use CTR for stashing SRR0. null_syscall on 8xx is reduced by 3 cycles (283 => 280 cycles). Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/8fa13a59f73647e058c95fc7e1c7a98f316bd20a.1612796617.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
76249ddc27
commit
2c59e51048
@ -116,30 +116,28 @@
|
||||
.endm
|
||||
|
||||
.macro SYSCALL_ENTRY trapno
|
||||
mfspr r12,SPRN_SPRG_THREAD
|
||||
mfspr r9, SPRN_SRR1
|
||||
mfspr r11, SPRN_SRR0
|
||||
mtctr r11
|
||||
mfspr r10, SPRN_SRR0
|
||||
andi. r11, r9, MSR_PR
|
||||
beq- 99f
|
||||
LOAD_REG_IMMEDIATE(r11, MSR_KERNEL) /* can take exceptions */
|
||||
lis r12, 1f@h
|
||||
ori r12, r12, 1f@l
|
||||
mtspr SPRN_SRR1, r11
|
||||
mtspr SPRN_SRR0, r12
|
||||
mfspr r12,SPRN_SPRG_THREAD
|
||||
mr r11, r1
|
||||
lwz r1,TASK_STACK-THREAD(r12)
|
||||
beq- 99f
|
||||
tovirt(r12, r12)
|
||||
addi r1, r1, THREAD_SIZE - INT_FRAME_SIZE
|
||||
LOAD_REG_IMMEDIATE(r10, MSR_KERNEL) /* can take exceptions */
|
||||
mtspr SPRN_SRR1, r10
|
||||
lis r10, 1f@h
|
||||
ori r10, r10, 1f@l
|
||||
mtspr SPRN_SRR0, r10
|
||||
rfi
|
||||
1:
|
||||
tovirt(r12, r12)
|
||||
stw r11,GPR1(r1)
|
||||
stw r11,0(r1)
|
||||
mr r11, r1
|
||||
stw r10,_NIP(r11)
|
||||
mflr r10
|
||||
stw r10, _LINK(r11)
|
||||
mfctr r10
|
||||
stw r10,_NIP(r11)
|
||||
mfcr r10
|
||||
rlwinm r10,r10,0,4,2 /* Clear SO bit in CR */
|
||||
stw r10,_CCR(r11) /* save registers */
|
||||
|
Loading…
Reference in New Issue
Block a user