diff --git a/en_US.ISO8859-1/books/arch-handbook/locking/chapter.sgml b/en_US.ISO8859-1/books/arch-handbook/locking/chapter.sgml
index 54448a06ef..993d649ffc 100644
--- a/en_US.ISO8859-1/books/arch-handbook/locking/chapter.sgml
+++ b/en_US.ISO8859-1/books/arch-handbook/locking/chapter.sgml
@@ -1,312 +1,333 @@
Locking Notes
This chapter is maintained by the FreeBSD SMP Next
Generation Project
freebsd-smp@FreeBSD.org.
This document outlines the locking used in the FreeBSD kernel
to permit effective multi-processing within the kernel. Locking
can be achieved via several means. Data structures can be
protected by mutexes or &man.lockmgr.9; locks. A few variables
are protected simply by always using atomic operations to access
them.
Mutexes
A mutex is simply a lock used to guarantee mutual exclusion.
Specifically, a mutex may only be owned by one entity at a time.
If another entity wishes to obtain a mutex that is already
owned, it must wait until the mutex is released. In the FreeBSD
kernel, mutexes are owned by processes.
Mutexes may be recursively acquired, but they are intended
to be held for a short period of time. Specifically, one may
not sleep while holding a mutex. If you need to hold a lock
across a sleep, use a &man.lockmgr.9; lock.
Each mutex has several properties of interest:
Variable Name
The name of the struct mtx variable in
the kernel source.
Logical Name
The name of the mutex assigned to it by
mtx_init. This name is displayed in
KTR trace messages and witness errors and warnings and is
used to distinguish mutexes in the witness code.
Type
The type of the mutex in terms of the
MTX_* flags. The meaning for each
flag is related to its meaning as documented in
&man.mutex.9;.
MTX_DEF
A sleep mutex
MTX_SPIN
A spin mutex
MTX_COLD
This mutex is initialized very early. Thus, it
must be declared via
MUTEX_DECLARE, and the
MTX_COLD flag must be passed to
mtx_init.
MTX_TOPHALF
This spin mutex does not disable
interrupts.
MTX_NORECURSE
This mutex is not allowed to recurse.
Protectees
A list of data structures or data structure members
that this entry protects. For data structure members, the
name will be in the form of
Dependent Functions
Functions that can only be called if this mutex is
held.
Mutex List
Variable Name
Logical Name
Type
Protectees
Dependent Functions
sched_lock
sched lock
MTX_SPIN |
MTX_COLD
_gmonparam,
cnt.v_swtch,
cp_time,
curpriority,
P_PROFIL XXX,
P_INMEM,
P_SINTR,
P_TIMEOUT,
P_SWAPINREQ XXX,
P_INMEN XXX),
p_prof/,
p_ru/,
statclock),
pscnt,
slpque,
itqueuebits,
itqueues,
rtqueuebits,
rtqueues,
queuebits,
queues,
idqueuebits,
idqueues,
- callwheel,
- nextsoftcheck,
switchtime,
- softticks,
- ticks
setrunqueue,
remrunqueue,
mi_switch,
chooseproc,
schedclock,
resetpriority,
updatepri,
maybe_resched,
cpu_switch,
cpu_throw
vm86pcb_lock
vm86pcb lock
MTX_DEF |
MTX_COLD
vm86pcb
vm86_bioscall
Giant
Giant
MTX_DEF |
MTX_COLD
nearly everything
lots
+
+
+
+ callout_lock
+ callout lock
+
+ MTX_SPIN
+
+
+ callfree,
+ callwheel,
+ nextsoftcheck,
+ softticks,
+ ticks
+
+
+
+
Lock Manager Locks
Locks that are provided via the &man.lockmgr.9; interface
are lock manager locks. These locks are reader-writer locks and
may be held by a sleeping process.
&man.lockmgr.9; Lock List
Variable Name
Protectees
allproc_lock
allproc
zombproc
pidhashtbl
nextpid
+ proctree_lock
+
+
Atomically Protected Variables
An atomically protected variable is a special variable that
is not protected by an explicit lock. Instead, all data
accesses to the variables use special atomic operations as
described in &man.atomic.9;. Very few variables are treated
this way, although other synchronization primitives such as
mutexes are implemented with atomically protected
variables.
astpending
diff --git a/en_US.ISO8859-1/books/developers-handbook/locking/chapter.sgml b/en_US.ISO8859-1/books/developers-handbook/locking/chapter.sgml
index 54448a06ef..993d649ffc 100644
--- a/en_US.ISO8859-1/books/developers-handbook/locking/chapter.sgml
+++ b/en_US.ISO8859-1/books/developers-handbook/locking/chapter.sgml
@@ -1,312 +1,333 @@
Locking Notes
This chapter is maintained by the FreeBSD SMP Next
Generation Project
freebsd-smp@FreeBSD.org.
This document outlines the locking used in the FreeBSD kernel
to permit effective multi-processing within the kernel. Locking
can be achieved via several means. Data structures can be
protected by mutexes or &man.lockmgr.9; locks. A few variables
are protected simply by always using atomic operations to access
them.
Mutexes
A mutex is simply a lock used to guarantee mutual exclusion.
Specifically, a mutex may only be owned by one entity at a time.
If another entity wishes to obtain a mutex that is already
owned, it must wait until the mutex is released. In the FreeBSD
kernel, mutexes are owned by processes.
Mutexes may be recursively acquired, but they are intended
to be held for a short period of time. Specifically, one may
not sleep while holding a mutex. If you need to hold a lock
across a sleep, use a &man.lockmgr.9; lock.
Each mutex has several properties of interest:
Variable Name
The name of the struct mtx variable in
the kernel source.
Logical Name
The name of the mutex assigned to it by
mtx_init. This name is displayed in
KTR trace messages and witness errors and warnings and is
used to distinguish mutexes in the witness code.
Type
The type of the mutex in terms of the
MTX_* flags. The meaning for each
flag is related to its meaning as documented in
&man.mutex.9;.
MTX_DEF
A sleep mutex
MTX_SPIN
A spin mutex
MTX_COLD
This mutex is initialized very early. Thus, it
must be declared via
MUTEX_DECLARE, and the
MTX_COLD flag must be passed to
mtx_init.
MTX_TOPHALF
This spin mutex does not disable
interrupts.
MTX_NORECURSE
This mutex is not allowed to recurse.
Protectees
A list of data structures or data structure members
that this entry protects. For data structure members, the
name will be in the form of
Dependent Functions
Functions that can only be called if this mutex is
held.
Mutex List
Variable Name
Logical Name
Type
Protectees
Dependent Functions
sched_lock
sched lock
MTX_SPIN |
MTX_COLD
_gmonparam,
cnt.v_swtch,
cp_time,
curpriority,
P_PROFIL XXX,
P_INMEM,
P_SINTR,
P_TIMEOUT,
P_SWAPINREQ XXX,
P_INMEN XXX),
p_prof/,
p_ru/,
statclock),
pscnt,
slpque,
itqueuebits,
itqueues,
rtqueuebits,
rtqueues,
queuebits,
queues,
idqueuebits,
idqueues,
- callwheel,
- nextsoftcheck,
switchtime,
- softticks,
- ticks
setrunqueue,
remrunqueue,
mi_switch,
chooseproc,
schedclock,
resetpriority,
updatepri,
maybe_resched,
cpu_switch,
cpu_throw
vm86pcb_lock
vm86pcb lock
MTX_DEF |
MTX_COLD
vm86pcb
vm86_bioscall
Giant
Giant
MTX_DEF |
MTX_COLD
nearly everything
lots
+
+
+
+ callout_lock
+ callout lock
+
+ MTX_SPIN
+
+
+ callfree,
+ callwheel,
+ nextsoftcheck,
+ softticks,
+ ticks
+
+
+
+
Lock Manager Locks
Locks that are provided via the &man.lockmgr.9; interface
are lock manager locks. These locks are reader-writer locks and
may be held by a sleeping process.
&man.lockmgr.9; Lock List
Variable Name
Protectees
allproc_lock
allproc
zombproc
pidhashtbl
nextpid
+ proctree_lock
+
+
Atomically Protected Variables
An atomically protected variable is a special variable that
is not protected by an explicit lock. Instead, all data
accesses to the variables use special atomic operations as
described in &man.atomic.9;. Very few variables are treated
this way, although other synchronization primitives such as
mutexes are implemented with atomically protected
variables.
astpending
diff --git a/en_US.ISO_8859-1/books/developers-handbook/locking/chapter.sgml b/en_US.ISO_8859-1/books/developers-handbook/locking/chapter.sgml
index 54448a06ef..993d649ffc 100644
--- a/en_US.ISO_8859-1/books/developers-handbook/locking/chapter.sgml
+++ b/en_US.ISO_8859-1/books/developers-handbook/locking/chapter.sgml
@@ -1,312 +1,333 @@
Locking Notes
This chapter is maintained by the FreeBSD SMP Next
Generation Project
freebsd-smp@FreeBSD.org.
This document outlines the locking used in the FreeBSD kernel
to permit effective multi-processing within the kernel. Locking
can be achieved via several means. Data structures can be
protected by mutexes or &man.lockmgr.9; locks. A few variables
are protected simply by always using atomic operations to access
them.
Mutexes
A mutex is simply a lock used to guarantee mutual exclusion.
Specifically, a mutex may only be owned by one entity at a time.
If another entity wishes to obtain a mutex that is already
owned, it must wait until the mutex is released. In the FreeBSD
kernel, mutexes are owned by processes.
Mutexes may be recursively acquired, but they are intended
to be held for a short period of time. Specifically, one may
not sleep while holding a mutex. If you need to hold a lock
across a sleep, use a &man.lockmgr.9; lock.
Each mutex has several properties of interest:
Variable Name
The name of the struct mtx variable in
the kernel source.
Logical Name
The name of the mutex assigned to it by
mtx_init. This name is displayed in
KTR trace messages and witness errors and warnings and is
used to distinguish mutexes in the witness code.
Type
The type of the mutex in terms of the
MTX_* flags. The meaning for each
flag is related to its meaning as documented in
&man.mutex.9;.
MTX_DEF
A sleep mutex
MTX_SPIN
A spin mutex
MTX_COLD
This mutex is initialized very early. Thus, it
must be declared via
MUTEX_DECLARE, and the
MTX_COLD flag must be passed to
mtx_init.
MTX_TOPHALF
This spin mutex does not disable
interrupts.
MTX_NORECURSE
This mutex is not allowed to recurse.
Protectees
A list of data structures or data structure members
that this entry protects. For data structure members, the
name will be in the form of
Dependent Functions
Functions that can only be called if this mutex is
held.
Mutex List
Variable Name
Logical Name
Type
Protectees
Dependent Functions
sched_lock
sched lock
MTX_SPIN |
MTX_COLD
_gmonparam,
cnt.v_swtch,
cp_time,
curpriority,
P_PROFIL XXX,
P_INMEM,
P_SINTR,
P_TIMEOUT,
P_SWAPINREQ XXX,
P_INMEN XXX),
p_prof/,
p_ru/,
statclock),
pscnt,
slpque,
itqueuebits,
itqueues,
rtqueuebits,
rtqueues,
queuebits,
queues,
idqueuebits,
idqueues,
- callwheel,
- nextsoftcheck,
switchtime,
- softticks,
- ticks
setrunqueue,
remrunqueue,
mi_switch,
chooseproc,
schedclock,
resetpriority,
updatepri,
maybe_resched,
cpu_switch,
cpu_throw
vm86pcb_lock
vm86pcb lock
MTX_DEF |
MTX_COLD
vm86pcb
vm86_bioscall
Giant
Giant
MTX_DEF |
MTX_COLD
nearly everything
lots
+
+
+
+ callout_lock
+ callout lock
+
+ MTX_SPIN
+
+
+ callfree,
+ callwheel,
+ nextsoftcheck,
+ softticks,
+ ticks
+
+
+
+
Lock Manager Locks
Locks that are provided via the &man.lockmgr.9; interface
are lock manager locks. These locks are reader-writer locks and
may be held by a sleeping process.
&man.lockmgr.9; Lock List
Variable Name
Protectees
allproc_lock
allproc
zombproc
pidhashtbl
nextpid
+ proctree_lock
+
+
Atomically Protected Variables
An atomically protected variable is a special variable that
is not protected by an explicit lock. Instead, all data
accesses to the variables use special atomic operations as
described in &man.atomic.9;. Very few variables are treated
this way, although other synchronization primitives such as
mutexes are implemented with atomically protected
variables.
astpending