Index | Thread | Search

From:
Martin Pieuchot <mpi@grenadille.net>
Subject:
sparc64 vs uvm_purge()
To:
tech@openbsd.org
Date:
Wed, 26 Nov 2025 12:32:00 +0100

Download raw body.

Thread
sparc64 is subtly broken since uvm_purge() is running in parallel.  It
became obvious that the architecture requires more MD work before more
parts of UVM can run in parallel. 

That said, such breakages are not helping.  So here's a diff I sent
before release to not run uvm_purge() w/o KERNEL_LOCK() on sparc64.
I'd like to get it in.  Anyone interested in exposing pmap/UVM races
on sparc64 will now where to start.

ok?

Index: kern/kern_exit.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_exit.c,v
diff -u -p -r1.252 kern_exit.c
--- kern/kern_exit.c	10 Aug 2025 15:17:57 -0000	1.252
+++ kern/kern_exit.c	26 Nov 2025 11:19:21 -0000
@@ -253,11 +253,13 @@ exit1(struct proc *p, int xexit, int xsi
 			 * It is safe to release them all since exit1()
 			 * will not return.
 			 */
-#ifdef MULTIPROCESSOR
+#if defined(MULTIPROCESSOR) && !defined(__sparc64__)
 			__mp_release_all(&kernel_lock);
 #endif
 			uvm_purge();
+#if !defined(__sparc64__)
 			KERNEL_LOCK();
+#endif
 		}
 	}