Commit 4d67facb authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman
Browse files

powerpc/32: Remove verification of MSR_PR on syscall in the ASM entry



system_call_exception() checks MSR_PR and BUGs if a syscall
is issued from kernel mode.

No need to handle it anymore from the ASM entry code.

null_syscall reduction 2 cycles (348 => 346 cycles)

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/1eddb42cb12092b1e3d72608d182c365db3da41d.1612796617.git.christophe.leroy@csgroup.eu
parent 6f76a011
Loading
Loading
Loading
Loading
+0 −30
Original line number Diff line number Diff line
@@ -421,36 +421,6 @@ ret_from_kernel_thread:
	li	r3,0
	b	ret_from_syscall

	/*
	 * System call was called from kernel. We get here with SRR1 in r9.
	 * Mark the exception as recoverable once we have retrieved SRR0,
	 * trap a warning and return ENOSYS with CR[SO] set.
	 */
	.globl	ret_from_kernel_syscall
ret_from_kernel_syscall:
	mfspr	r9, SPRN_SRR0
	mfspr	r10, SPRN_SRR1
#if !defined(CONFIG_4xx) && !defined(CONFIG_BOOKE)
	LOAD_REG_IMMEDIATE(r11, MSR_KERNEL & ~(MSR_IR|MSR_DR))
	mtmsr	r11
#endif

0:	trap
	EMIT_BUG_ENTRY 0b,__FILE__,__LINE__, BUGFLAG_WARNING

	li	r3, ENOSYS
	crset	so
#if defined(CONFIG_PPC_8xx) && defined(CONFIG_PERF_EVENTS)
	mtspr	SPRN_NRI, r0
#endif
	mtspr	SPRN_SRR0, r9
	mtspr	SPRN_SRR1, r10
	rfi
#ifdef CONFIG_40x
	b .	/* Prevent prefetch past rfi */
#endif
_ASM_NOKPROBE_SYMBOL(ret_from_kernel_syscall)

/*
 * Top-level page fault handling.
 * This is in assembler because if do_page_fault tells us that
+0 −3
Original line number Diff line number Diff line
@@ -118,8 +118,6 @@
.macro SYSCALL_ENTRY trapno
	mfspr	r9, SPRN_SRR1
	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
@@ -174,7 +172,6 @@
3:
#endif
	b	transfer_to_syscall		/* jump to handler */
99:	b	ret_from_kernel_syscall
.endm

.macro save_dar_dsisr_on_stack reg1, reg2, sp
+0 −3
Original line number Diff line number Diff line
@@ -106,10 +106,8 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
#endif
	mfspr	r9, SPRN_SRR1
	BOOKE_CLEAR_BTB(r11)
	andi.	r11, r9, MSR_PR
	lwz	r11, TASK_STACK - THREAD(r10)
	rlwinm	r12,r12,0,4,2	/* Clear SO bit in CR */
	beq-	99f
	ALLOC_STACK_FRAME(r11, THREAD_SIZE - INT_FRAME_SIZE)
	stw	r12, _CCR(r11)		/* save various registers */
	mflr	r12
@@ -155,7 +153,6 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)

3:
	b	transfer_to_syscall	/* jump to handler */
99:	b	ret_from_kernel_syscall
.endm

/* To handle the additional exception priority levels on 40x and Book-E