1*eda14cbcSMatt Macy /* 2*eda14cbcSMatt Macy * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. 3*eda14cbcSMatt Macy * Copyright (C) 2007 The Regents of the University of California. 4*eda14cbcSMatt Macy * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). 5*eda14cbcSMatt Macy * Written by Brian Behlendorf <behlendorf1@llnl.gov>. 6*eda14cbcSMatt Macy * UCRL-CODE-235197 7*eda14cbcSMatt Macy * 8*eda14cbcSMatt Macy * This file is part of the SPL, Solaris Porting Layer. 9*eda14cbcSMatt Macy * 10*eda14cbcSMatt Macy * The SPL is free software; you can redistribute it and/or modify it 11*eda14cbcSMatt Macy * under the terms of the GNU General Public License as published by the 12*eda14cbcSMatt Macy * Free Software Foundation; either version 2 of the License, or (at your 13*eda14cbcSMatt Macy * option) any later version. 14*eda14cbcSMatt Macy * 15*eda14cbcSMatt Macy * The SPL is distributed in the hope that it will be useful, but WITHOUT 16*eda14cbcSMatt Macy * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 17*eda14cbcSMatt Macy * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 18*eda14cbcSMatt Macy * for more details. 19*eda14cbcSMatt Macy * 20*eda14cbcSMatt Macy * You should have received a copy of the GNU General Public License along 21*eda14cbcSMatt Macy * with the SPL. If not, see <http://www.gnu.org/licenses/>. 22*eda14cbcSMatt Macy */ 23*eda14cbcSMatt Macy 24*eda14cbcSMatt Macy #ifndef _SPL_CALLB_H 25*eda14cbcSMatt Macy #define _SPL_CALLB_H 26*eda14cbcSMatt Macy 27*eda14cbcSMatt Macy #include <linux/module.h> 28*eda14cbcSMatt Macy #include <sys/mutex.h> 29*eda14cbcSMatt Macy 30*eda14cbcSMatt Macy #define CALLB_CPR_ASSERT(cp) ASSERT(MUTEX_HELD((cp)->cc_lockp)); 31*eda14cbcSMatt Macy 32*eda14cbcSMatt Macy typedef struct callb_cpr { 33*eda14cbcSMatt Macy kmutex_t *cc_lockp; 34*eda14cbcSMatt Macy } callb_cpr_t; 35*eda14cbcSMatt Macy 36*eda14cbcSMatt Macy #define CALLB_CPR_INIT(cp, lockp, func, name) { \ 37*eda14cbcSMatt Macy (cp)->cc_lockp = lockp; \ 38*eda14cbcSMatt Macy } 39*eda14cbcSMatt Macy 40*eda14cbcSMatt Macy #define CALLB_CPR_SAFE_BEGIN(cp) { \ 41*eda14cbcSMatt Macy CALLB_CPR_ASSERT(cp); \ 42*eda14cbcSMatt Macy } 43*eda14cbcSMatt Macy 44*eda14cbcSMatt Macy #define CALLB_CPR_SAFE_END(cp, lockp) { \ 45*eda14cbcSMatt Macy CALLB_CPR_ASSERT(cp); \ 46*eda14cbcSMatt Macy } 47*eda14cbcSMatt Macy 48*eda14cbcSMatt Macy #define CALLB_CPR_EXIT(cp) { \ 49*eda14cbcSMatt Macy ASSERT(MUTEX_HELD((cp)->cc_lockp)); \ 50*eda14cbcSMatt Macy mutex_exit((cp)->cc_lockp); \ 51*eda14cbcSMatt Macy } 52*eda14cbcSMatt Macy 53*eda14cbcSMatt Macy #endif /* _SPL_CALLB_H */ 54