2008-02-28 03:52:31 +03:00
|
|
|
#ifndef _SPL_CALLB_H
|
|
|
|
#define _SPL_CALLB_H
|
2008-02-26 23:36:04 +03:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2008-02-27 22:09:51 +03:00
|
|
|
#include <linux/module.h>
|
2008-03-01 03:45:59 +03:00
|
|
|
#include <sys/mutex.h>
|
2008-02-26 23:36:04 +03:00
|
|
|
|
|
|
|
#define DEBUG_CALLB
|
|
|
|
|
|
|
|
#ifndef DEBUG_CALLB
|
2008-04-21 21:29:47 +04:00
|
|
|
#define CALLB_CPR_ASSERT(cp) ASSERT(MUTEX_HELD((cp)->cc_lockp));
|
2008-02-26 23:36:04 +03:00
|
|
|
#else
|
|
|
|
#define CALLB_CPR_ASSERT(cp)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct callb_cpr {
|
|
|
|
kmutex_t *cc_lockp;
|
|
|
|
} callb_cpr_t;
|
|
|
|
|
|
|
|
#define CALLB_CPR_INIT(cp, lockp, func, name) { \
|
|
|
|
(cp)->cc_lockp = lockp; \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define CALLB_CPR_SAFE_BEGIN(cp) { \
|
|
|
|
CALLB_CPR_ASSERT(cp); \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define CALLB_CPR_SAFE_END(cp, lockp) { \
|
|
|
|
CALLB_CPR_ASSERT(cp); \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define CALLB_CPR_EXIT(cp) { \
|
|
|
|
ASSERT(MUTEX_HELD((cp)->cc_lockp)); \
|
|
|
|
mutex_exit((cp)->cc_lockp); \
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2008-02-28 03:52:31 +03:00
|
|
|
#endif /* _SPL_CALLB_H */
|
2008-02-26 23:36:04 +03:00
|
|
|
|