FreeBSD kernel kern code
|
#include <sys/cdefs.h>
#include "opt_ddb.h"
#include "opt_hwpmc_hooks.h"
#include "opt_kdtrace.h"
#include "opt_no_adaptive_rwlocks.h"
#include <sys/param.h>
#include <sys/kdb.h>
#include <sys/ktr.h>
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/proc.h>
#include <sys/rwlock.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
#include <sys/turnstile.h>
#include <machine/cpu.h>
Go to the source code of this file.
Macros | |
#define | rw_wowner(rw) |
#define | rw_recursed(rw) ((rw)->rw_recurse != 0) |
#define | rw_wlocked(rw) (rw_wowner((rw)) == curthread) |
#define | rw_owner(rw) rw_wowner(rw) |
#define | _rw_assert(rw, what, file, line) |
#define | RW_CAN_READ(_rw) |
Functions | |
__FBSDID ("$BSDSUniX$") | |
static void | assert_rw (struct lock_object *lock, int what) |
static void | lock_rw (struct lock_object *lock, int how) |
static int | unlock_rw (struct lock_object *lock) |
void | rw_init_flags (struct rwlock *rw, const char *name, int opts) |
void | rw_destroy (struct rwlock *rw) |
void | rw_sysinit (void *arg) |
void | rw_sysinit_flags (void *arg) |
int | rw_wowned (struct rwlock *rw) |
void | _rw_wlock (struct rwlock *rw, const char *file, int line) |
int | _rw_try_wlock (struct rwlock *rw, const char *file, int line) |
void | _rw_wunlock (struct rwlock *rw, const char *file, int line) |
void | _rw_rlock (struct rwlock *rw, const char *file, int line) |
int | _rw_try_rlock (struct rwlock *rw, const char *file, int line) |
void | _rw_runlock (struct rwlock *rw, const char *file, int line) |
void | _rw_wlock_hard (struct rwlock *rw, uintptr_t tid, const char *file, int line) |
void | _rw_wunlock_hard (struct rwlock *rw, uintptr_t tid, const char *file, int line) |
int | _rw_try_upgrade (struct rwlock *rw, const char *file, int line) |
void | _rw_downgrade (struct rwlock *rw, const char *file, int line) |
Variables | |
struct lock_class | lock_class_rw |
#define _rw_assert | ( | rw, | |
what, | |||
file, | |||
line | |||
) |
Definition at line 120 of file kern_rwlock.c.
Referenced by _rw_downgrade(), _rw_runlock(), _rw_try_upgrade(), and _rw_wunlock().
#define RW_CAN_READ | ( | _rw | ) |
Definition at line 309 of file kern_rwlock.c.
Referenced by _rw_rlock().
#define rw_owner | ( | rw | ) | rw_wowner(rw) |
Definition at line 117 of file kern_rwlock.c.
Referenced by _rw_rlock(), and _rw_wlock_hard().
#define rw_recursed | ( | rw | ) | ((rw)->rw_recurse != 0) |
Definition at line 105 of file kern_rwlock.c.
Referenced by _rw_downgrade(), _rw_try_wlock(), _rw_wunlock(), and _rw_wunlock_hard().
#define rw_wlocked | ( | rw | ) | (rw_wowner((rw)) == curthread) |
Definition at line 110 of file kern_rwlock.c.
Referenced by _rw_try_wlock(), _rw_wlock_hard(), and _rw_wunlock_hard().
#define rw_wowner | ( | rw | ) |
Definition at line 97 of file kern_rwlock.c.
Referenced by _rw_rlock(), and rw_wowned().
__FBSDID | ( | "$BSDSUniX$" | ) |
void _rw_downgrade | ( | struct rwlock * | rw, |
const char * | file, | ||
int | line | ||
) |
Definition at line 1007 of file kern_rwlock.c.
References _rw_assert, panic(), rw_recursed, ts, turnstile_broadcast(), turnstile_chain_lock(), turnstile_chain_unlock(), turnstile_disown(), turnstile_lookup(), and turnstile_unpend().
void _rw_rlock | ( | struct rwlock * | rw, |
const char * | file, | ||
int | line | ||
) |
Definition at line 315 of file kern_rwlock.c.
References kdb_active, RW_CAN_READ, rw_owner, rw_wowner, ts, turnstile_cancel(), turnstile_trywait(), turnstile_wait(), and waittime.
void _rw_runlock | ( | struct rwlock * | rw, |
const char * | file, | ||
int | line | ||
) |
Definition at line 563 of file kern_rwlock.c.
References _rw_assert, ts, turnstile_broadcast(), turnstile_chain_lock(), turnstile_chain_unlock(), turnstile_lookup(), and turnstile_unpend().
int _rw_try_rlock | ( | struct rwlock * | rw, |
const char * | file, | ||
int | line | ||
) |
Definition at line 529 of file kern_rwlock.c.
References kdb_active.
int _rw_try_upgrade | ( | struct rwlock * | rw, |
const char * | file, | ||
int | line | ||
) |
Definition at line 934 of file kern_rwlock.c.
References _rw_assert, ts, turnstile_cancel(), turnstile_claim(), and turnstile_trywait().
int _rw_try_wlock | ( | struct rwlock * | rw, |
const char * | file, | ||
int | line | ||
) |
Definition at line 252 of file kern_rwlock.c.
References kdb_active, rw_recursed, and rw_wlocked.
void _rw_wlock | ( | struct rwlock * | rw, |
const char * | file, | ||
int | line | ||
) |
Definition at line 233 of file kern_rwlock.c.
References kdb_active.
void _rw_wlock_hard | ( | struct rwlock * | rw, |
uintptr_t | tid, | ||
const char * | file, | ||
int | line | ||
) |
Definition at line 677 of file kern_rwlock.c.
References rw_owner, rw_wlocked, ts, turnstile_cancel(), turnstile_claim(), turnstile_trywait(), turnstile_wait(), and waittime.
void _rw_wunlock | ( | struct rwlock * | rw, |
const char * | file, | ||
int | line | ||
) |
Definition at line 286 of file kern_rwlock.c.
References _rw_assert, and rw_recursed.
void _rw_wunlock_hard | ( | struct rwlock * | rw, |
uintptr_t | tid, | ||
const char * | file, | ||
int | line | ||
) |
Definition at line 869 of file kern_rwlock.c.
References rw_recursed, rw_wlocked, ts, turnstile_broadcast(), turnstile_chain_lock(), turnstile_chain_unlock(), turnstile_lookup(), and turnstile_unpend().
|
static |
Definition at line 124 of file kern_rwlock.c.
|
static |
Definition at line 131 of file kern_rwlock.c.
void rw_destroy | ( | struct rwlock * | rw | ) |
Definition at line 200 of file kern_rwlock.c.
References lock_destroy().
void rw_init_flags | ( | struct rwlock * | rw, |
const char * | name, | ||
int | opts | ||
) |
Definition at line 172 of file kern_rwlock.c.
References lock_class_rw, and lock_init().
Referenced by rw_sysinit_flags().
void rw_sysinit | ( | void * | arg | ) |
Definition at line 210 of file kern_rwlock.c.
void rw_sysinit_flags | ( | void * | arg | ) |
Definition at line 218 of file kern_rwlock.c.
References rw_init_flags().
int rw_wowned | ( | struct rwlock * | rw | ) |
Definition at line 226 of file kern_rwlock.c.
References rw_wowner.
|
static |
Definition at line 143 of file kern_rwlock.c.
struct lock_class lock_class_rw |
Definition at line 79 of file kern_rwlock.c.
Referenced by rw_init_flags().