All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] sparc32: keep PIL raised on the SMP ticker and LEON IPI exit paths
@ 2026-09-27  0:56 Imre Kaloz
  0 siblings, 0 replies; only message in thread
From: Imre Kaloz @ 2026-09-27  0:56 UTC (permalink / raw)
  To: Andreas Larsson, sparclinux; +Cc: David S. Miller, stable

smp4m_ticker returns from smp4m_percpu_timer_interrupt() by writing the
interrupted %psr back with traps enabled, which drops PIL before
RESTORE_ALL. A level 14 tick pending again at that point is taken on
top of the current trap frame, so back-to-back ticks nest one frame per
tick until the 8K kernel stack runs into thread_info. Keep PIL at 15
until rett restores the interrupted %psr, as real_irq_continue does.

smp4d_ticker and smpleon_ipi exit the same way and get the same change.

Broken since 2.1.36 (sun4m), 2.1.97 (sun4d) and 2.6.33 (LEON).

Cc: stable@vger.kernel.org
Signed-off-by: Imre Kaloz <kaloz@kernel.org>
---

Notes:
    No Fixes: tag: this has been broken since 2.1.36 on sun4m (as
    smp_ticker) and since 2.1.97 on sun4d, before the git history. The
    LEON exit came with smpleon_ticker in 8401707ff645 ("sparc,leon:
    Sparc-Leon SMP support") in 2.6.33 and moved to smpleon_ipi in 3.0; a
    Fixes: tag naming one commit would date all three sites to it.

 arch/sparc/kernel/entry.S | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S
index ea51ef52c952..7288da5f6727 100644
--- a/arch/sparc/kernel/entry.S
+++ b/arch/sparc/kernel/entry.S
@@ -252,7 +252,8 @@ smp4m_ticker:
 	WRITE_PAUSE
 	call	smp4m_percpu_timer_interrupt
 	 add	%sp, STACKFRAME_SZ, %o0
-	wr	%l0, PSR_ET, %psr
+	or	%l0, PSR_PIL, %g2	! keep PIL raised until rett, or a
+	wr	%g2, PSR_ET, %psr	! re-asserted tick nests on this frame
 	WRITE_PAUSE
 	RESTORE_ALL
 
@@ -353,7 +354,8 @@ smp4d_ticker:
 	WRITE_PAUSE
 	call	smp4d_percpu_timer_interrupt
 	 add	%sp, STACKFRAME_SZ, %o0
-	wr	%l0, PSR_ET, %psr
+	or	%l0, PSR_PIL, %g2	! keep PIL raised until rett, or a
+	wr	%g2, PSR_ET, %psr	! re-asserted tick nests on this frame
 	WRITE_PAUSE
 	RESTORE_ALL
 
@@ -407,7 +409,8 @@ smpleon_ipi:
 	WRITE_PAUSE
 	call	leonsmp_ipi_interrupt
 	 add	%sp, STACKFRAME_SZ, %o1 ! pt_regs
-	wr	%l0, PSR_ET, %psr
+	or	%l0, PSR_PIL, %g2	! keep PIL raised until rett, or a
+	wr	%g2, PSR_ET, %psr	! re-asserted IPI nests on this frame
 	WRITE_PAUSE
 	RESTORE_ALL
 

base-commit: 62f4c998b297cf233997a2b4cd6fc2d2df0319c9
-- 
2.47.3


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-09-27  0:58 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-27  0:56 [PATCH] sparc32: keep PIL raised on the SMP ticker and LEON IPI exit paths Imre Kaloz

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.