Module Name:    src
Committed By:   riastradh
Date:           Sun Dec 19 11:35:18 UTC 2021

Modified Files:
        src/sys/external/bsd/common/include/linux: rcupdate.h
        src/sys/external/bsd/common/linux: linux_rcu.c

Log Message:
linux: Add cond_synchronize_rcu.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/common/include/linux/rcupdate.h
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/common/linux/linux_rcu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/common/include/linux/rcupdate.h
diff -u src/sys/external/bsd/common/include/linux/rcupdate.h:1.6 src/sys/external/bsd/common/include/linux/rcupdate.h:1.7
--- src/sys/external/bsd/common/include/linux/rcupdate.h:1.6	Sun Dec 19 11:33:17 2021
+++ src/sys/external/bsd/common/include/linux/rcupdate.h	Sun Dec 19 11:35:17 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: rcupdate.h,v 1.6 2021/12/19 11:33:17 riastradh Exp $	*/
+/*	$NetBSD: rcupdate.h,v 1.7 2021/12/19 11:35:17 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -75,8 +75,10 @@ struct rcu_head {
 
 #define	_kfree_rcu		linux__kfree_rcu
 #define	call_rcu		linux_call_rcu
+#define	cond_synchronize_rcu	linux_cond_synchronize_rcu
 #define	destroy_rcu_head	linux_destroy_rcu_head
 #define	init_rcu_head		linux_init_rcu_head
+#define	get_state_synchronize_rcu linux_get_state_synchronize_rcu
 #define	rcu_barrier		linux_rcu_barrier
 #define	synchronize_rcu		linux_synchronize_rcu
 
@@ -90,6 +92,9 @@ void	call_rcu(struct rcu_head *, void (*
 void	rcu_barrier(void);
 void	synchronize_rcu(void);
 
+unsigned long get_state_synchronize_rcu(void);
+void	cond_synchronize_rcu(unsigned long);
+
 void	_kfree_rcu(struct rcu_head *, void *);
 
 static inline void

Index: src/sys/external/bsd/common/linux/linux_rcu.c
diff -u src/sys/external/bsd/common/linux/linux_rcu.c:1.2 src/sys/external/bsd/common/linux/linux_rcu.c:1.3
--- src/sys/external/bsd/common/linux/linux_rcu.c:1.2	Sun Dec 19 11:31:04 2021
+++ src/sys/external/bsd/common/linux/linux_rcu.c	Sun Dec 19 11:35:17 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_rcu.c,v 1.2 2021/12/19 11:31:04 riastradh Exp $	*/
+/*	$NetBSD: linux_rcu.c,v 1.3 2021/12/19 11:35:17 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_rcu.c,v 1.2 2021/12/19 11:31:04 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_rcu.c,v 1.3 2021/12/19 11:35:17 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -96,6 +96,29 @@ synchronize_rcu(void)
 }
 
 /*
+ * cookie = get_state_synchronize_rcu(), cond_synchronize_rcu(cookie)
+ *
+ *	Optimization for synchronize_rcu -- skip if it has already
+ *	happened between get_state_synchronize_rcu and
+ *	cond_synchronize_rcu.  get_state_synchronize_rcu implies a full
+ *	SMP memory barrier (membar_sync).
+ */
+unsigned long
+get_state_synchronize_rcu(void)
+{
+
+	membar_sync();
+	return 0;
+}
+
+void
+cond_synchronize_rcu(unsigned long cookie)
+{
+
+	synchronize_rcu();
+}
+
+/*
  * rcu_barrier()
  *
  *	Wait for all pending RCU callbacks to complete.

Reply via email to