Module Name: src
Committed By: riastradh
Date: Thu Feb 23 14:55:10 UTC 2023
Modified Files:
src/sys/arch/alpha/include: asm.h
Log Message:
alpha: Add missing barriers in cpu_switchto.
Details in comments.
PR kern/57240
XXX pullup-8
XXX pullup-9
XXX pullup-10
To generate a diff of this commit:
cvs rdiff -u -r1.44 -r1.45 src/sys/arch/alpha/include/asm.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/alpha/include/asm.h
diff -u src/sys/arch/alpha/include/asm.h:1.44 src/sys/arch/alpha/include/asm.h:1.45
--- src/sys/arch/alpha/include/asm.h:1.44 Fri Sep 4 03:53:12 2020
+++ src/sys/arch/alpha/include/asm.h Thu Feb 23 14:55:10 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: asm.h,v 1.44 2020/09/04 03:53:12 thorpej Exp $ */
+/* $NetBSD: asm.h,v 1.45 2023/02/23 14:55:10 riastradh Exp $ */
/*
* Copyright (c) 1991,1990,1989,1994,1995,1996 Carnegie Mellon University
@@ -669,10 +669,30 @@ label: ASCIZ msg; \
#define GET_CURLWP \
call_pal PAL_OSF1_rdval
+/*
+ * Issue barriers to coordinate mutex_exit on this CPU with
+ * mutex_vector_enter on another CPU.
+ *
+ * 1. Any prior mutex_exit by oldlwp must be visible to other
+ * CPUs before we set ci_curlwp := newlwp on this one,
+ * requiring a store-before-store barrier.
+ *
+ * 2. ci_curlwp := newlwp must be visible on all other CPUs
+ * before any subsequent mutex_exit by newlwp can even test
+ * whether there might be waiters, requiring a
+ * store-before-load barrier.
+ *
+ * See kern_mutex.c for details -- this is necessary for
+ * adaptive mutexes to detect whether the lwp is on the CPU in
+ * order to safely block without requiring atomic r/m/w in
+ * mutex_exit.
+ */
#define SET_CURLWP(r) \
ldq v0, L_CPU(r) ; \
mov r, a0 ; \
+ wmb /* store-before-store XXX patch out if !MP? */ ; \
stq r, CPU_INFO_CURLWP(v0) ; \
+ mb /* store-before-load XXX patch out if !MP? */ ; \
call_pal PAL_OSF1_wrval
#else /* if not MULTIPROCESSOR... */