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 <paulmck@us.ibm.com> 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 30struct srcu_struct_array { 31 int c[2]; 32}; 33 34struct 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 46int init_srcu_struct(struct srcu_struct *sp); 47void cleanup_srcu_struct(struct srcu_struct *sp); 48int srcu_read_lock(struct srcu_struct *sp) __acquires(sp); 49void srcu_read_unlock(struct srcu_struct *sp, int idx) __releases(sp); 50void synchronize_srcu(struct srcu_struct *sp); 51long srcu_batches_completed(struct srcu_struct *sp); 52 53#endif 54