Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Sep 2025 23:29:05 GMT
From:      "Bjoern A. Zeeb" <bz@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 3f48a0fe53ca - main - LinuxKPI: add DEFINE_LOCK_GUARD_0 for rcu
Message-ID:  <202509052329.585NT5Wn029401@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by bz:

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

commit 3f48a0fe53ca7e001852f4a406c1bdfab1cd2f6d
Author:     Bjoern A. Zeeb <bz@FreeBSD.org>
AuthorDate: 2025-09-04 20:25:30 +0000
Commit:     Bjoern A. Zeeb <bz@FreeBSD.org>
CommitDate: 2025-09-05 23:24:15 +0000

    LinuxKPI: add DEFINE_LOCK_GUARD_0 for rcu
    
    This adds guard support for non-real-types like rcu locking meaning
    that we need to keep the lock state separately ourselves.  _T is still
    special and needs to be updated.  Given it may not be used it needs
    an __unused attribute (we are using the LinuxKPI __maybe_unused which
    indeed is more expressive in this case).
    
    Sponsored by:   The FreeBSD Foundation (initially)
    MFC after:      3 days
    Reviewed by:    dumbbell
    Differential Revision:  https://reviews.freebsd.org/D52076
---
 sys/compat/linuxkpi/common/include/linux/cleanup.h | 35 ++++++++++++++++++++++
 .../linuxkpi/common/include/linux/rcupdate.h       |  5 +++-
 2 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/sys/compat/linuxkpi/common/include/linux/cleanup.h b/sys/compat/linuxkpi/common/include/linux/cleanup.h
index 45c2a2359ddf..5bb146f082ed 100644
--- a/sys/compat/linuxkpi/common/include/linux/cleanup.h
+++ b/sys/compat/linuxkpi/common/include/linux/cleanup.h
@@ -55,4 +55,39 @@
 
 #define	__free(_n)		__cleanup(__free_##_n)
 
+/*
+ * Given this is a _0 version it should likely be broken up into parts.
+ * But we have no idead what a _1, _2, ... version would do different
+ * until we see a call.
+ * This is used for a not-real-type (rcu).   We use a bool to "simulate"
+ * the lock held.  Also _T still special, may not always be used, so tag
+ * with __unused (or better the LinuxKPI __maybe_unused).
+ */
+#define	DEFINE_LOCK_GUARD_0(_n, _lock, _unlock, ...)			\
+									\
+    typedef struct {							\
+	bool lock;							\
+	__VA_ARGS__;							\
+    } guard_ ## _n ## _t;	    					\
+									\
+    static inline void							\
+    guard_ ## _n ## _destroy(guard_ ## _n ## _t *_T)			\
+    {									\
+	if (_T->lock) {							\
+	    _unlock;							\
+	}								\
+    }									\
+									\
+    static inline guard_ ## _n ## _t					\
+    guard_ ## _n ## _create(void)					\
+    {									\
+	guard_ ## _n ## _t _tmp;					\
+	guard_ ## _n ## _t *_T __maybe_unused;				\
+									\
+	_tmp.lock = true;						\
+	_T = &_tmp;							\
+	_lock;								\
+	return (_tmp);							\
+    }
+
 #endif	/* _LINUXKPI_LINUX_CLEANUP_H */
diff --git a/sys/compat/linuxkpi/common/include/linux/rcupdate.h b/sys/compat/linuxkpi/common/include/linux/rcupdate.h
index 85d766c8dbc9..4aceb7296cd6 100644
--- a/sys/compat/linuxkpi/common/include/linux/rcupdate.h
+++ b/sys/compat/linuxkpi/common/include/linux/rcupdate.h
@@ -1,7 +1,7 @@
 /*-
  * Copyright (c) 2016-2017 Mellanox Technologies, Ltd.
  * All rights reserved.
- * Copyright (c) 2024 The FreeBSD Foundation
+ * Copyright (c) 2024-2025 The FreeBSD Foundation
  *
  * Portions of this software were developed by Björn Zeeb
  * under sponsorship from the FreeBSD Foundation.
@@ -35,6 +35,7 @@
 #include <linux/compiler.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
+#include <linux/cleanup.h>
 
 #include <machine/atomic.h>
 
@@ -162,4 +163,6 @@ void linux_synchronize_rcu(unsigned type);
 #define	init_rcu_head_on_stack(...)
 #define	destroy_rcu_head_on_stack(...)
 
+DEFINE_LOCK_GUARD_0(rcu, rcu_read_lock(), rcu_read_unlock())
+
 #endif					/* _LINUXKPI_LINUX_RCUPDATE_H_ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202509052329.585NT5Wn029401>