powerpc: Clear RI and EE at the same time in system call exit
mtmsrd is an expensive instruction, we save a few cycles by doing it once instead of twice. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
a9514dc69d
commit
ac1dc36558
1 changed files with 13 additions and 12 deletions
|
@ -197,7 +197,16 @@ syscall_exit:
|
|||
wrteei 0
|
||||
#else
|
||||
ld r10,PACAKMSR(r13)
|
||||
mtmsrd r10,1
|
||||
/*
|
||||
* For performance reasons we clear RI the same time that we
|
||||
* clear EE. We only need to clear RI just before we restore r13
|
||||
* below, but batching it with EE saves us one expensive mtmsrd call.
|
||||
* We have to be careful to restore RI if we branch anywhere from
|
||||
* here (eg syscall_exit_work).
|
||||
*/
|
||||
li r9,MSR_RI
|
||||
andc r11,r10,r9
|
||||
mtmsrd r11,1
|
||||
#endif /* CONFIG_PPC_BOOK3E */
|
||||
|
||||
ld r9,TI_FLAGS(r12)
|
||||
|
@ -214,17 +223,6 @@ BEGIN_FTR_SECTION
|
|||
END_FTR_SECTION_IFCLR(CPU_FTR_STCX_CHECKS_ADDRESS)
|
||||
andi. r6,r8,MSR_PR
|
||||
ld r4,_LINK(r1)
|
||||
/*
|
||||
* Clear RI before restoring r13. If we are returning to
|
||||
* userspace and we take an exception after restoring r13,
|
||||
* we end up corrupting the userspace r13 value.
|
||||
*/
|
||||
#ifdef CONFIG_PPC_BOOK3S
|
||||
/* No MSR:RI on BookE */
|
||||
li r12,MSR_RI
|
||||
andc r11,r10,r12
|
||||
mtmsrd r11,1 /* clear MSR.RI */
|
||||
#endif /* CONFIG_PPC_BOOK3S */
|
||||
|
||||
beq- 1f
|
||||
ACCOUNT_CPU_USER_EXIT(r11, r12)
|
||||
|
@ -271,6 +269,9 @@ syscall_enosys:
|
|||
b syscall_exit
|
||||
|
||||
syscall_exit_work:
|
||||
#ifdef CONFIG_PPC_BOOK3S
|
||||
mtmsrd r10,1 /* Restore RI */
|
||||
#endif
|
||||
/* If TIF_RESTOREALL is set, don't scribble on either r3 or ccr.
|
||||
If TIF_NOERROR is set, just save r3 as it is. */
|
||||
|
||||
|
|
Loading…
Reference in a new issue