add RW_SYSINIT_FLAGS macro and rw_sysinit_flags initialization function

This commit is contained in:
kmacy 2008-12-08 21:46:55 +00:00
parent 2e6f1edb43
commit c510d681c9
2 changed files with 27 additions and 0 deletions

View File

@ -191,6 +191,14 @@ rw_sysinit(void *arg)
rw_init(args->ra_rw, args->ra_desc); rw_init(args->ra_rw, args->ra_desc);
} }
void
rw_sysinit_flags(void *arg)
{
struct rw_args_flags *args = arg;
rw_init_flags(args->ra_rw, args->ra_desc, args->ra_flags);
}
int int
rw_wowned(struct rwlock *rw) rw_wowned(struct rwlock *rw)
{ {

View File

@ -132,6 +132,7 @@
void rw_init_flags(struct rwlock *rw, const char *name, int opts); void rw_init_flags(struct rwlock *rw, const char *name, int opts);
void rw_destroy(struct rwlock *rw); void rw_destroy(struct rwlock *rw);
void rw_sysinit(void *arg); void rw_sysinit(void *arg);
void rw_sysinit_flags(void *arg);
int rw_wowned(struct rwlock *rw); int rw_wowned(struct rwlock *rw);
void _rw_wlock(struct rwlock *rw, const char *file, int line); void _rw_wlock(struct rwlock *rw, const char *file, int line);
int _rw_try_wlock(struct rwlock *rw, const char *file, int line); int _rw_try_wlock(struct rwlock *rw, const char *file, int line);
@ -187,6 +188,12 @@ struct rw_args {
const char *ra_desc; const char *ra_desc;
}; };
struct rw_args_flags {
struct rwlock *ra_rw;
const char *ra_desc;
int ra_flags;
};
#define RW_SYSINIT(name, rw, desc) \ #define RW_SYSINIT(name, rw, desc) \
static struct rw_args name##_args = { \ static struct rw_args name##_args = { \
(rw), \ (rw), \
@ -197,6 +204,18 @@ struct rw_args {
SYSUNINIT(name##_rw_sysuninit, SI_SUB_LOCK, SI_ORDER_MIDDLE, \ SYSUNINIT(name##_rw_sysuninit, SI_SUB_LOCK, SI_ORDER_MIDDLE, \
rw_destroy, (rw)) rw_destroy, (rw))
#define RW_SYSINIT_FLAGS(name, rw, desc, flags) \
static struct rw_args_flags name##_args = { \
(rw), \
(desc), \
(flags), \
}; \
SYSINIT(name##_rw_sysinit, SI_SUB_LOCK, SI_ORDER_MIDDLE, \
rw_sysinit_flags, &name##_args); \
SYSUNINIT(name##_rw_sysuninit, SI_SUB_LOCK, SI_ORDER_MIDDLE, \
rw_destroy, (rw))
/* /*
* Options passed to rw_init_flags(). * Options passed to rw_init_flags().
*/ */