1 /* 2 * Sleepable Read-Copy Update mechanism for mutual exclusion 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 * 18 * Copyright (C) IBM Corporation, 2006 19 * 20 * Author: Paul McKenney <[email protected]> 21 * 22 * For detailed explanation of Read-Copy Update mechanism see - 23 * Documentation/RCU/ *.txt 24 * 25 */ 26 27 #ifndef _LINUX_SRCU_H 28 #define _LINUX_SRCU_H 29 30 struct srcu_struct_array { 31 int c[2]; 32 }; 33 34 struct srcu_struct { 35 int completed; 36 struct srcu_struct_array *per_cpu_ref; 37 struct mutex mutex; 38 }; 39 40 #ifndef CONFIG_PREEMPT 41 #define srcu_barrier() barrier() 42 #else /* #ifndef CONFIG_PREEMPT */ 43 #define srcu_barrier() 44 #endif /* #else #ifndef CONFIG_PREEMPT */ 45 46 int init_srcu_struct(struct srcu_struct *sp); 47 void cleanup_srcu_struct(struct srcu_struct *sp); 48 int srcu_read_lock(struct srcu_struct *sp) __acquires(sp); 49 void srcu_read_unlock(struct srcu_struct *sp, int idx) __releases(sp); 50 void synchronize_srcu(struct srcu_struct *sp); 51 long srcu_batches_completed(struct srcu_struct *sp); 52 53 #endif 54