summaryrefslogtreecommitdiff
path: root/include/asm-generic/spinlock_types.h
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2022-03-16 15:53:54 -0700
committerPalmer Dabbelt <palmer@rivosinc.com>2022-05-11 11:49:38 -0700
commit1bce11126d57dde90a02ecf9bfe98175ab4e729e (patch)
tree636edf3d3261edb1191ee2a3301712f682c4afb6 /include/asm-generic/spinlock_types.h
parent3123109284176b1532874591f7c81f3837bbdc17 (diff)
asm-generic: ticket-lock: New generic ticket-based spinlock
This is a simple, fair spinlock. Specifically it doesn't have all the subtle memory model dependencies that qspinlock has, which makes it more suitable for simple systems as it is more likely to be correct. It is implemented entirely in terms of standard atomics and thus works fine without any arch-specific code. This replaces the existing asm-generic/spinlock.h, which just errored out on SMP systems. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Tested-by: Heiko Stuebner <heiko@sntech.de> Reviewed-by: Guo Ren <guoren@kernel.org> Reviewed-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Diffstat (limited to 'include/asm-generic/spinlock_types.h')
-rw-r--r--include/asm-generic/spinlock_types.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/include/asm-generic/spinlock_types.h b/include/asm-generic/spinlock_types.h
new file mode 100644
index 000000000000..8962bb730945
--- /dev/null
+++ b/include/asm-generic/spinlock_types.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef __ASM_GENERIC_SPINLOCK_TYPES_H
+#define __ASM_GENERIC_SPINLOCK_TYPES_H
+
+#include <linux/types.h>
+typedef atomic_t arch_spinlock_t;
+
+/*
+ * qrwlock_types depends on arch_spinlock_t, so we must typedef that before the
+ * include.
+ */
+#include <asm/qrwlock_types.h>
+
+#define __ARCH_SPIN_LOCK_UNLOCKED ATOMIC_INIT(0)
+
+#endif /* __ASM_GENERIC_SPINLOCK_TYPES_H */