git: ac341353a043 - main - linuxkpi: Define `raw_spinlock_t` in <linux/spinlock.h>

From: Jean-Sébastien Pédron <dumbbell_at_FreeBSD.org>
Date: Wed, 07 Jan 2026 21:50:25 UTC
The branch main has been updated by dumbbell:

URL: https://cgit.FreeBSD.org/src/commit/?id=ac341353a0434408eec6388f3451be8517252c5f

commit ac341353a0434408eec6388f3451be8517252c5f
Author:     Jean-Sébastien Pédron <dumbbell@FreeBSD.org>
AuthorDate: 2025-08-12 21:55:04 +0000
Commit:     Jean-Sébastien Pédron <dumbbell@FreeBSD.org>
CommitDate: 2026-01-07 21:38:36 +0000

    linuxkpi: Define `raw_spinlock_t` in <linux/spinlock.h>
    
    For now, it is synonymous to `spinlock_t`. The DRM generic code uses the
    `struct raw_spinlock` and not `raw_spinlock_t`, that's why the
    definition is a struct embedding a `struct mtx`, compared to
    `spinlock_t` which is a simpler typedef.
    
    The DRM generic code started to use it in Linux 6.10.
    
    Reviewed by:    bz, christos
    Sponsored by:   The FreeBSD Foundation
    Differential Revision: https://reviews.freebsd.org/D54489
---
 sys/compat/linuxkpi/common/include/linux/spinlock.h | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/sys/compat/linuxkpi/common/include/linux/spinlock.h b/sys/compat/linuxkpi/common/include/linux/spinlock.h
index dc10b0457153..341e89b6feed 100644
--- a/sys/compat/linuxkpi/common/include/linux/spinlock.h
+++ b/sys/compat/linuxkpi/common/include/linux/spinlock.h
@@ -178,4 +178,24 @@ _atomic_dec_and_lock_irqsave(atomic_t *cnt, spinlock_t *lock,
 	return (0);
 }
 
+/*
+ * struct raw_spinlock
+ */
+
+typedef struct raw_spinlock {
+	struct mtx	lock;
+} raw_spinlock_t;
+
+#define	raw_spin_lock_init(rlock) \
+	mtx_init(&(rlock)->lock, spin_lock_name("lnxspin_raw"), \
+	    NULL, MTX_DEF | MTX_NOWITNESS | MTX_NEW)
+
+#define	raw_spin_lock(rl)	spin_lock(&(rl)->lock)
+#define	raw_spin_trylock(rl)	spin_trylock(&(rl)->lock)
+#define	raw_spin_unlock(rl)	spin_unlock(&(rl)->lock)
+
+#define	raw_spin_lock_irqsave(rl, f)		spin_lock_irqsave(&(rl)->lock, (f))
+#define	raw_spin_trylock_irqsave(rl, f)		spin_trylock_irqsave(&(rl)->lock, (f))
+#define	raw_spin_unlock_irqrestore(rl, f)	spin_unlock_irqrestore(&(rl)->lock, (f))
+
 #endif					/* _LINUXKPI_LINUX_SPINLOCK_H_ */