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.