1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _LINUX_SCHED_RCUPDATE_WAIT_H 3#define _LINUX_SCHED_RCUPDATE_WAIT_H 4 5/* 6 * RCU synchronization types and methods: 7 */ 8 9#include <linux/rcupdate.h> 10#include <linux/completion.h> 11 12/* 13 * Structure allowing asynchronous waiting on RCU. 14 */ 15struct rcu_synchronize { 16 struct rcu_head head; 17 struct completion completion; 18}; 19void wakeme_after_rcu(struct rcu_head *head); 20 21void __wait_rcu_gp(bool checktiny, int n, call_rcu_func_t *crcu_array, 22 struct rcu_synchronize *rs_array); 23 24#define _wait_rcu_gp(checktiny, ...) \ 25do { \ 26 call_rcu_func_t __crcu_array[] = { __VA_ARGS__ }; \ 27 struct rcu_synchronize __rs_array[ARRAY_SIZE(__crcu_array)]; \ 28 __wait_rcu_gp(checktiny, ARRAY_SIZE(__crcu_array), \ 29 __crcu_array, __rs_array); \ 30} while (0) 31 32#define wait_rcu_gp(...) _wait_rcu_gp(false, __VA_ARGS__) 33 34#endif /* _LINUX_SCHED_RCUPDATE_WAIT_H */ 35