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

Commit 5c38602d authored by Helge Deller's avatar Helge Deller
Browse files

parisc: Re-enable interrupts early



Since kernel 3.9 we re-enable interrupts quite late due to commit c207a76b
("parisc: only re-enable interrupts if we need to schedule or deliver signals
when returning to userspace"). At that time the parisc kernel had no dedicated
IRQ stack, and this commit prevented kernel stack overflows.

But since commit 200c8804 ("parisc: implement irq stacks") we now have an
IRQ stack, so we may be safe now.  And when CONFIG_DEBUG_STACKOVERFLOW=y is
enabled, we can even check at runtime for overflows.

Signed-off-by: default avatarHelge Deller <deller@gmx.de>
parent 18d98a79
Loading
Loading
Loading
Loading
+3 −9
Original line number Original line Diff line number Diff line
@@ -878,6 +878,9 @@ ENTRY_CFI(syscall_exit_rfi)
	STREG   %r19,PT_SR7(%r16)
	STREG   %r19,PT_SR7(%r16)


intr_return:
intr_return:
	/* NOTE: Need to enable interrupts incase we schedule. */
	ssm     PSW_SM_I, %r0

	/* check for reschedule */
	/* check for reschedule */
	mfctl   %cr30,%r1
	mfctl   %cr30,%r1
	LDREG   TI_FLAGS(%r1),%r19	/* sched.h: TIF_NEED_RESCHED */
	LDREG   TI_FLAGS(%r1),%r19	/* sched.h: TIF_NEED_RESCHED */
@@ -904,11 +907,6 @@ intr_check_sig:
	LDREG	PT_IASQ1(%r16), %r20
	LDREG	PT_IASQ1(%r16), %r20
	cmpib,COND(=),n 0,%r20,intr_restore /* backward */
	cmpib,COND(=),n 0,%r20,intr_restore /* backward */


	/* NOTE: We need to enable interrupts if we have to deliver
	 * signals. We used to do this earlier but it caused kernel
	 * stack overflows. */
	ssm     PSW_SM_I, %r0

	copy	%r0, %r25			/* long in_syscall = 0 */
	copy	%r0, %r25			/* long in_syscall = 0 */
#ifdef CONFIG_64BIT
#ifdef CONFIG_64BIT
	ldo	-16(%r30),%r29			/* Reference param save area */
	ldo	-16(%r30),%r29			/* Reference param save area */
@@ -960,10 +958,6 @@ intr_do_resched:
	cmpib,COND(=)	0, %r20, intr_do_preempt
	cmpib,COND(=)	0, %r20, intr_do_preempt
	nop
	nop


	/* NOTE: We need to enable interrupts if we schedule.  We used
	 * to do this earlier but it caused kernel stack overflows. */
	ssm     PSW_SM_I, %r0

#ifdef CONFIG_64BIT
#ifdef CONFIG_64BIT
	ldo	-16(%r30),%r29		/* Reference param save area */
	ldo	-16(%r30),%r29		/* Reference param save area */
#endif
#endif