xref: /linux-6.15/include/linux/srcu.h (revision e6a92013)
1621934eeSPaul E. McKenney /*
2621934eeSPaul E. McKenney  * Sleepable Read-Copy Update mechanism for mutual exclusion
3621934eeSPaul E. McKenney  *
4621934eeSPaul E. McKenney  * This program is free software; you can redistribute it and/or modify
5621934eeSPaul E. McKenney  * it under the terms of the GNU General Public License as published by
6621934eeSPaul E. McKenney  * the Free Software Foundation; either version 2 of the License, or
7621934eeSPaul E. McKenney  * (at your option) any later version.
8621934eeSPaul E. McKenney  *
9621934eeSPaul E. McKenney  * This program is distributed in the hope that it will be useful,
10621934eeSPaul E. McKenney  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11621934eeSPaul E. McKenney  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12621934eeSPaul E. McKenney  * GNU General Public License for more details.
13621934eeSPaul E. McKenney  *
14621934eeSPaul E. McKenney  * You should have received a copy of the GNU General Public License
15621934eeSPaul E. McKenney  * along with this program; if not, write to the Free Software
16621934eeSPaul E. McKenney  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17621934eeSPaul E. McKenney  *
18621934eeSPaul E. McKenney  * Copyright (C) IBM Corporation, 2006
19621934eeSPaul E. McKenney  *
20621934eeSPaul E. McKenney  * Author: Paul McKenney <[email protected]>
21621934eeSPaul E. McKenney  *
22621934eeSPaul E. McKenney  * For detailed explanation of Read-Copy Update mechanism see -
23621934eeSPaul E. McKenney  * 		Documentation/RCU/ *.txt
24621934eeSPaul E. McKenney  *
25621934eeSPaul E. McKenney  */
26621934eeSPaul E. McKenney 
27eabc0694SAlan Stern #ifndef _LINUX_SRCU_H
28eabc0694SAlan Stern #define _LINUX_SRCU_H
29eabc0694SAlan Stern 
30621934eeSPaul E. McKenney struct srcu_struct_array {
31621934eeSPaul E. McKenney 	int c[2];
32621934eeSPaul E. McKenney };
33621934eeSPaul E. McKenney 
34621934eeSPaul E. McKenney struct srcu_struct {
35621934eeSPaul E. McKenney 	int completed;
36621934eeSPaul E. McKenney 	struct srcu_struct_array *per_cpu_ref;
37621934eeSPaul E. McKenney 	struct mutex mutex;
38621934eeSPaul E. McKenney };
39621934eeSPaul E. McKenney 
40621934eeSPaul E. McKenney #ifndef CONFIG_PREEMPT
41621934eeSPaul E. McKenney #define srcu_barrier() barrier()
42621934eeSPaul E. McKenney #else /* #ifndef CONFIG_PREEMPT */
43621934eeSPaul E. McKenney #define srcu_barrier()
44621934eeSPaul E. McKenney #endif /* #else #ifndef CONFIG_PREEMPT */
45621934eeSPaul E. McKenney 
46*e6a92013SAlan Stern int init_srcu_struct(struct srcu_struct *sp);
47621934eeSPaul E. McKenney void cleanup_srcu_struct(struct srcu_struct *sp);
48621934eeSPaul E. McKenney int srcu_read_lock(struct srcu_struct *sp) __acquires(sp);
49621934eeSPaul E. McKenney void srcu_read_unlock(struct srcu_struct *sp, int idx) __releases(sp);
50621934eeSPaul E. McKenney void synchronize_srcu(struct srcu_struct *sp);
51621934eeSPaul E. McKenney long srcu_batches_completed(struct srcu_struct *sp);
52eabc0694SAlan Stern 
53eabc0694SAlan Stern #endif
54