[PATCH 0/2] sparc32: fix SuperSPARC SMP synchronization
From: Magnus Lindholm
Date: Fri Sep 04 2026 - 02:04:09 EST
Fill two gaps in the SuperSPARC/Viking SMP synchronization paths.
This series is based on the three sparc32 relocatable-kernel fixes which
honour and derive phys_base and advertise the relocatable image. It does
not include those prerequisite patches.
These patches can be found here:
Link: https://lore.kernel.org/sparclinux/20260816075141.3489194-1-linmag7@xxxxxxxxx/T/#t
The SuperSPARC Family User's Manual requires software to keep at most one
Demap operation in progress across the system. It also says that an MBus
system must ask every processor which can retain a stale translation to
perform its own local Demap [1, sections 8.5.3 and 9.8.2]. The Sun-4M
architecture specification likewise describes SRMMU flushing as local to
a module [2, section 7.1.4]. Patch 1 serializes each complete shootdown on
sun4m and invokes remote CPUs one at a time. sun4d already serializes its
Viking Demap operations.
SuperSPARC maintains I-cache coherence by snooping, but FLUSH is still
required after modifying instructions. It drains the writer's unsnoopable
store buffer and clears local pipeline and prefetch state [1, sections 7.4
and 10.2.5; 3, section A.8.2]. Patch 2 executes FLUSH first on the writer
and then on remote CPUs.
The series was tested on a dual-CPU sun4m SPARCstation 20 with TI
SuperSPARC processors and Viking/MXCC:
- boot to multi-user with both CPUs online;
- 200,000 concurrent mprotect iterations over a shared address space;
- 12,000 executable-code rewrites checked on both CPUs;
- removing flush_icache_range() reproduced a stale instruction on the
first rewrite.
[1] SuperSPARC Family STP1020 & STP1090 Series User's Manual,
Revision 1.0, April 1994.
[2] Sun-4M System Architecture, Specification 950-1373-01,
Revision 50, July 19, 1991.
[3] SuperSPARC II Addendum, Revision 1.3, December 1994.
Magnus Lindholm (2):
sparc32: serialize SuperSPARC demap operations
sparc32: synchronize SuperSPARC instruction updates
arch/sparc/include/asm/cacheflush_32.h | 2 +-
arch/sparc/mm/srmmu.c | 120 ++++++++++++++++++++++++-
arch/sparc/mm/viking.S | 4 +
3 files changed, 123 insertions(+), 3 deletions(-)
base-commit: e6de5705a9f0d81f67bdb2917108784b5839cecd
--
2.43.0