Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7697daaa authored by David S. Miller's avatar David S. Miller
Browse files

[SPARC64]: %l6 trap return handling no longer necessary.



Now that we indicate the "restart system call" in the
trap type field of pt_regs->magic, we don't need to
set the %l6 boolean in all of the trap return paths.

And we therefore don't need to pass it to do_notify_resume().

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 238468b2
Loading
Loading
Loading
Loading
+17 −18
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ do_fpdis:
	ba,pt		%xcc, etrap
109:	 or		%g7, %lo(109b), %g7
	add		%g0, %g0, %g0
	ba,a,pt		%xcc, rtrap_clr_l6
	ba,a,pt		%xcc, rtrap

1:	TRAP_LOAD_THREAD_REG(%g6, %g1)
	ldub		[%g6 + TI_FPSAVED], %g5
@@ -226,7 +226,7 @@ fp_other_bounce:
	call		do_fpother
	 add		%sp, PTREGS_OFF, %o0
	ba,pt		%xcc, rtrap
	 clr		%l6
	 nop

	.globl		do_fpother_check_fitos
	.align		32
@@ -489,7 +489,7 @@ utrap_trap: /* %g3=handler,%g4=level */
        call		bad_trap
	 add		%sp, PTREGS_OFF, %o0
	ba,pt		%xcc, rtrap
	 clr		%l6
	 nop

invoke_utrap:
	sllx		%g3, 3, %g3
@@ -607,7 +607,7 @@ __spitfire_cee_trap_continue:
	call		spitfire_access_error
	 add		%sp, PTREGS_OFF, %o0
	ba,pt		%xcc, rtrap
	 clr		%l6
	 nop

	/* This is the trap handler entry point for ECC correctable
	 * errors.  They are corrected, but we listen for the trap
@@ -686,7 +686,7 @@ __spitfire_data_access_exception_tl1:
	call		spitfire_data_access_exception_tl1
	 add		%sp, PTREGS_OFF, %o0
	ba,pt		%xcc, rtrap
	 clr		%l6
	 nop

__spitfire_data_access_exception:
	rdpr		%pstate, %g4
@@ -705,7 +705,7 @@ __spitfire_data_access_exception:
	call		spitfire_data_access_exception
	 add		%sp, PTREGS_OFF, %o0
	ba,pt		%xcc, rtrap
	 clr		%l6
	 nop

	.globl		__spitfire_insn_access_exception
	.globl		__spitfire_insn_access_exception_tl1
@@ -725,7 +725,7 @@ __spitfire_insn_access_exception_tl1:
	call		spitfire_insn_access_exception_tl1
	 add		%sp, PTREGS_OFF, %o0
	ba,pt		%xcc, rtrap
	 clr		%l6
	 nop

__spitfire_insn_access_exception:
	rdpr		%pstate, %g4
@@ -743,7 +743,7 @@ __spitfire_insn_access_exception:
	call		spitfire_insn_access_exception
	 add		%sp, PTREGS_OFF, %o0
	ba,pt		%xcc, rtrap
	 clr		%l6
	 nop

	/* These get patched into the trap table at boot time
	 * once we know we have a cheetah processor.
@@ -937,7 +937,7 @@ do_dcpe_tl1_fatal:
	call		cheetah_plus_parity_error
	 add		%sp, PTREGS_OFF, %o1
	ba,pt		%xcc, rtrap
	 clr		%l6
	 nop

do_icpe_tl1:
	rdpr		%tl, %g1		! Save original trap level
@@ -979,7 +979,7 @@ do_icpe_tl1_fatal:
	call		cheetah_plus_parity_error
	 add		%sp, PTREGS_OFF, %o1
	ba,pt		%xcc, rtrap
	 clr		%l6
	 nop
	
dcpe_icpe_tl1_common:
	/* Flush D-cache, re-enable D/I caches in DCU and finally
@@ -1281,7 +1281,7 @@ __do_privact:
	call		do_privact
	 add		%sp, PTREGS_OFF, %o0
	ba,pt		%xcc, rtrap
	 clr		%l6
	 nop

	.globl		do_mna
do_mna:
@@ -1308,7 +1308,7 @@ do_mna:
	call		mem_address_unaligned
	 add		%sp, PTREGS_OFF, %o0
	ba,pt		%xcc, rtrap
	 clr		%l6
	 nop

	.globl		do_lddfmna
do_lddfmna:
@@ -1326,7 +1326,7 @@ do_lddfmna:
	call		handle_lddfmna
	 add		%sp, PTREGS_OFF, %o0
	ba,pt		%xcc, rtrap
	 clr		%l6
	 nop

	.globl		do_stdfmna
do_stdfmna:
@@ -1344,7 +1344,7 @@ do_stdfmna:
	call		handle_stdfmna
	 add		%sp, PTREGS_OFF, %o0
	ba,pt		%xcc, rtrap
	 clr		%l6
	 nop

	.globl	breakpoint_trap
breakpoint_trap:
@@ -1424,13 +1424,13 @@ sys32_rt_sigreturn:
1:		ldx		[%curptr + TI_FLAGS], %l5
		andcc		%l5, (_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT), %g0
		be,pt		%icc, rtrap
		 clr		%l6
		 nop
		add		%sp, PTREGS_OFF, %o0
		call		syscall_trace
		 mov		1, %o1

		ba,pt		%xcc, rtrap
		 clr		%l6
		 nop

	/* This is how fork() was meant to be done, 8 instruction entry.
	 *
@@ -1605,7 +1605,7 @@ ret_sys_call:
	bne,pn		%icc, linux_syscall_trace2
	 add		%l1, 0x4, %l2			! npc = npc+4
	stx		%l1, [%sp + PTREGS_OFF + PT_V9_TPC]
	ba,pt		%xcc, rtrap_clr_l6
	ba,pt		%xcc, rtrap
	 stx		%l2, [%sp + PTREGS_OFF + PT_V9_TNPC]

1:
@@ -1616,7 +1616,6 @@ ret_sys_call:
	sub		%g0, %o0, %o0
	or		%g3, %g2, %g3
	stx		%o0, [%sp + PTREGS_OFF + PT_V9_I0]
	mov		1, %l6
	stx		%g3, [%sp + PTREGS_OFF + PT_V9_TSTATE]
	bne,pn		%icc, linux_syscall_trace2
	 add		%l1, 0x4, %l2			! npc = npc+4
+0 −1
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ extern void timer_interrupt(int irq, struct pt_regs *regs);

extern void do_notify_resume(struct pt_regs *regs,
			     unsigned long orig_i0,
			     int restart_syscall,
			     unsigned long thread_info_flags);

extern asmlinkage void syscall_trace(struct pt_regs *regs,
+4 −17
Original line number Diff line number Diff line
@@ -18,12 +18,6 @@
#define		RTRAP_PSTATE_IRQOFF	(PSTATE_RMO|PSTATE_PEF|PSTATE_PRIV)
#define		RTRAP_PSTATE_AG_IRQOFF	(PSTATE_RMO|PSTATE_PEF|PSTATE_PRIV|PSTATE_AG)

		/* Register %l6 keeps track of whether we are returning
		 * from a system call or not.  It is cleared if we call
		 * do_notify_resume, and it must not be otherwise modified
		 * until we fully commit to returning to userspace.
		 */

		.text
		.align			32
__handle_softirq:
@@ -56,14 +50,12 @@ __handle_user_windows:
		be,pt			%xcc, __handle_user_windows_continue
		 nop
		mov			%l5, %o1
		mov			%l6, %o2
		add			%sp, PTREGS_OFF, %o0
		mov			%l0, %o3
		mov			%l0, %o2

		call			do_notify_resume
		 wrpr			%g0, RTRAP_PSTATE, %pstate
		wrpr			%g0, RTRAP_PSTATE_IRQOFF, %pstate
		clr			%l6
		/* Signal delivery can modify pt_regs tstate, so we must
		 * reload it.
		 */
@@ -99,14 +91,12 @@ __handle_perfctrs:
		be,pt			%xcc, __handle_perfctrs_continue
		 sethi			%hi(TSTATE_PEF), %o0
		mov			%l5, %o1
		mov			%l6, %o2
		add			%sp, PTREGS_OFF, %o0
		mov			%l0, %o3
		mov			%l0, %o2
		call			do_notify_resume

		 wrpr			%g0, RTRAP_PSTATE, %pstate
		wrpr			%g0, RTRAP_PSTATE_IRQOFF, %pstate
		clr			%l6
		/* Signal delivery can modify pt_regs tstate, so we must
		 * reload it.
		 */
@@ -127,13 +117,11 @@ __handle_userfpu:

__handle_signal:
		mov			%l5, %o1
		mov			%l6, %o2
		add			%sp, PTREGS_OFF, %o0
		mov			%l0, %o3
		mov			%l0, %o2
		call			do_notify_resume
		 wrpr			%g0, RTRAP_PSTATE, %pstate
		wrpr			%g0, RTRAP_PSTATE_IRQOFF, %pstate
		clr			%l6

		/* Signal delivery can modify pt_regs tstate, so we must
		 * reload it.
@@ -145,9 +133,8 @@ __handle_signal:
		 andn			%l1, %l4, %l1

		.align			64
		.globl			rtrap_irq, rtrap_clr_l6, rtrap, irqsz_patchme, rtrap_xcall
		.globl			rtrap_irq, rtrap, irqsz_patchme, rtrap_xcall
rtrap_irq:
rtrap_clr_l6:	clr			%l6
rtrap:
#ifndef CONFIG_SMP
		sethi			%hi(per_cpu____cpu_data), %l0
+1 −2
Original line number Diff line number Diff line
@@ -580,8 +580,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0)
	}
}

void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0, int restart_syscall,
		      unsigned long thread_info_flags)
void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0, unsigned long thread_info_flags)
{
	if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK))
		do_signal(regs, orig_i0);
+8 −8
Original line number Diff line number Diff line
@@ -262,7 +262,7 @@ sun4v_iacc:
	mov	%l5, %o2
	call	sun4v_insn_access_exception
	 add	%sp, PTREGS_OFF, %o0
	ba,a,pt	%xcc, rtrap_clr_l6
	ba,a,pt	%xcc, rtrap

	/* Instruction Access Exception, tl1. */
sun4v_iacc_tl1:
@@ -278,7 +278,7 @@ sun4v_iacc_tl1:
	mov	%l5, %o2
	call	sun4v_insn_access_exception_tl1
	 add	%sp, PTREGS_OFF, %o0
	ba,a,pt	%xcc, rtrap_clr_l6
	ba,a,pt	%xcc, rtrap

	/* Data Access Exception, tl0. */
sun4v_dacc:
@@ -294,7 +294,7 @@ sun4v_dacc:
	mov	%l5, %o2
	call	sun4v_data_access_exception
	 add	%sp, PTREGS_OFF, %o0
	ba,a,pt	%xcc, rtrap_clr_l6
	ba,a,pt	%xcc, rtrap

	/* Data Access Exception, tl1. */
sun4v_dacc_tl1:
@@ -310,7 +310,7 @@ sun4v_dacc_tl1:
	mov	%l5, %o2
	call	sun4v_data_access_exception_tl1
	 add	%sp, PTREGS_OFF, %o0
	ba,a,pt	%xcc, rtrap_clr_l6
	ba,a,pt	%xcc, rtrap

	/* Memory Address Unaligned.  */
sun4v_mna:
@@ -344,7 +344,7 @@ sun4v_mna:
	mov	%l5, %o2
	call	sun4v_do_mna
	 add	%sp, PTREGS_OFF, %o0
	ba,a,pt	%xcc, rtrap_clr_l6
	ba,a,pt	%xcc, rtrap

	/* Privileged Action.  */
sun4v_privact:
@@ -352,7 +352,7 @@ sun4v_privact:
	 rd	%pc, %g7
	call	do_privact
	 add	%sp, PTREGS_OFF, %o0
	ba,a,pt	%xcc, rtrap_clr_l6
	ba,a,pt	%xcc, rtrap

	/* Unaligned ldd float, tl0. */
sun4v_lddfmna:
@@ -368,7 +368,7 @@ sun4v_lddfmna:
	mov	%l5, %o2
	call	handle_lddfmna
	 add	%sp, PTREGS_OFF, %o0
	ba,a,pt	%xcc, rtrap_clr_l6
	ba,a,pt	%xcc, rtrap

	/* Unaligned std float, tl0. */
sun4v_stdfmna:
@@ -384,7 +384,7 @@ sun4v_stdfmna:
	mov	%l5, %o2
	call	handle_stdfmna
	 add	%sp, PTREGS_OFF, %o0
	ba,a,pt	%xcc, rtrap_clr_l6
	ba,a,pt	%xcc, rtrap

#define BRANCH_ALWAYS	0x10680000
#define NOP		0x01000000
Loading