locking/Documentation: Move locking related docs into Documentation/locking/
Specifically: Documentation/locking/lockdep-design.txt Documentation/locking/lockstat.txt Documentation/locking/mutex-design.txt Documentation/locking/rt-mutex-design.txt Documentation/locking/rt-mutex.txt Documentation/locking/spinlocks.txt Documentation/locking/ww-mutex-design.txt Signed-off-by: Davidlohr Bueso <davidlohr@hp.com> Acked-by: Randy Dunlap <rdunlap@infradead.org> Signed-off-by: Peter Zijlstra <peterz@infradead.org> Cc: jason.low2@hp.com Cc: aswin@hp.com Cc: Alexei Starovoitov <ast@plumgrid.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Chris Mason <clm@fb.com> Cc: Dan Streetman <ddstreet@ieee.org> Cc: David Airlie <airlied@linux.ie> Cc: Davidlohr Bueso <davidlohr@hp.com> Cc: David S. Miller <davem@davemloft.net> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Jason Low <jason.low2@hp.com> Cc: Josef Bacik <jbacik@fusionio.com> Cc: Kees Cook <keescook@chromium.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Lubomir Rintel <lkundrak@v3.sk> Cc: Masanari Iida <standby24x7@gmail.com> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Randy Dunlap <rdunlap@infradead.org> Cc: Tim Chen <tim.c.chen@linux.intel.com> Cc: Vineet Gupta <vgupta@synopsys.com> Cc: fengguang.wu@intel.com Link: http://lkml.kernel.org/r/1406752916-3341-6-git-send-email-davidlohr@hp.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
7608a43d8f
commit
214e0aed63
17 changed files with 21 additions and 19 deletions
|
@ -287,6 +287,8 @@ local_ops.txt
|
|||
- semantics and behavior of local atomic operations.
|
||||
lockdep-design.txt
|
||||
- documentation on the runtime locking correctness validator.
|
||||
locking/
|
||||
- directory with info about kernel locking primitives
|
||||
lockstat.txt
|
||||
- info on collecting statistics on locks (and contention).
|
||||
lockup-watchdogs.txt
|
||||
|
|
|
@ -1972,7 +1972,7 @@ machines due to caching.
|
|||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
<filename>Documentation/spinlocks.txt</filename>:
|
||||
<filename>Documentation/locking/spinlocks.txt</filename>:
|
||||
Linus Torvalds' spinlocking tutorial in the kernel sources.
|
||||
</para>
|
||||
</listitem>
|
||||
|
|
|
@ -12,7 +12,7 @@ Because things like lock contention can severely impact performance.
|
|||
- HOW
|
||||
|
||||
Lockdep already has hooks in the lock functions and maps lock instances to
|
||||
lock classes. We build on that (see Documentation/lockdep-design.txt).
|
||||
lock classes. We build on that (see Documentation/lokcing/lockdep-design.txt).
|
||||
The graph below shows the relation between the lock functions and the various
|
||||
hooks therein.
|
||||
|
|
@ -105,9 +105,9 @@ never used in interrupt handlers, you can use the non-irq versions:
|
|||
spin_unlock(&lock);
|
||||
|
||||
(and the equivalent read-write versions too, of course). The spinlock will
|
||||
guarantee the same kind of exclusive access, and it will be much faster.
|
||||
guarantee the same kind of exclusive access, and it will be much faster.
|
||||
This is useful if you know that the data in question is only ever
|
||||
manipulated from a "process context", ie no interrupts involved.
|
||||
manipulated from a "process context", ie no interrupts involved.
|
||||
|
||||
The reasons you mustn't use these versions if you have interrupts that
|
||||
play with the spinlock is that you can get deadlocks:
|
||||
|
@ -122,21 +122,21 @@ the other interrupt happens on another CPU, but it is _not_ ok if the
|
|||
interrupt happens on the same CPU that already holds the lock, because the
|
||||
lock will obviously never be released (because the interrupt is waiting
|
||||
for the lock, and the lock-holder is interrupted by the interrupt and will
|
||||
not continue until the interrupt has been processed).
|
||||
not continue until the interrupt has been processed).
|
||||
|
||||
(This is also the reason why the irq-versions of the spinlocks only need
|
||||
to disable the _local_ interrupts - it's ok to use spinlocks in interrupts
|
||||
on other CPU's, because an interrupt on another CPU doesn't interrupt the
|
||||
CPU that holds the lock, so the lock-holder can continue and eventually
|
||||
releases the lock).
|
||||
releases the lock).
|
||||
|
||||
Note that you can be clever with read-write locks and interrupts. For
|
||||
example, if you know that the interrupt only ever gets a read-lock, then
|
||||
you can use a non-irq version of read locks everywhere - because they
|
||||
don't block on each other (and thus there is no dead-lock wrt interrupts.
|
||||
But when you do the write-lock, you have to use the irq-safe version.
|
||||
don't block on each other (and thus there is no dead-lock wrt interrupts.
|
||||
But when you do the write-lock, you have to use the irq-safe version.
|
||||
|
||||
For an example of being clever with rw-locks, see the "waitqueue_lock"
|
||||
For an example of being clever with rw-locks, see the "waitqueue_lock"
|
||||
handling in kernel/sched/core.c - nothing ever _changes_ a wait-queue from
|
||||
within an interrupt, they only read the queue in order to know whom to
|
||||
wake up. So read-locks are safe (which is good: they are very common
|
|
@ -5523,8 +5523,8 @@ M: Ingo Molnar <mingo@redhat.com>
|
|||
L: linux-kernel@vger.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/locking
|
||||
S: Maintained
|
||||
F: Documentation/lockdep*.txt
|
||||
F: Documentation/lockstat.txt
|
||||
F: Documentation/locking/lockdep*.txt
|
||||
F: Documentation/locking/lockstat.txt
|
||||
F: include/linux/lockdep.h
|
||||
F: kernel/locking/
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
* of extra utility/tracking out of our acquire-ctx. This is provided
|
||||
* by drm_modeset_lock / drm_modeset_acquire_ctx.
|
||||
*
|
||||
* For basic principles of ww_mutex, see: Documentation/ww-mutex-design.txt
|
||||
* For basic principles of ww_mutex, see: Documentation/locking/ww-mutex-design.txt
|
||||
*
|
||||
* The basic usage pattern is to:
|
||||
*
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright (C) 2006,2007 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
|
||||
* Copyright (C) 2007 Red Hat, Inc., Peter Zijlstra <pzijlstr@redhat.com>
|
||||
*
|
||||
* see Documentation/lockdep-design.txt for more details.
|
||||
* see Documentation/locking/lockdep-design.txt for more details.
|
||||
*/
|
||||
#ifndef __LINUX_LOCKDEP_H
|
||||
#define __LINUX_LOCKDEP_H
|
||||
|
|
|
@ -133,7 +133,7 @@ static inline int mutex_is_locked(struct mutex *lock)
|
|||
|
||||
/*
|
||||
* See kernel/locking/mutex.c for detailed documentation of these APIs.
|
||||
* Also see Documentation/mutex-design.txt.
|
||||
* Also see Documentation/locking/mutex-design.txt.
|
||||
*/
|
||||
#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
||||
extern void mutex_lock_nested(struct mutex *lock, unsigned int subclass);
|
||||
|
|
|
@ -149,7 +149,7 @@ extern void downgrade_write(struct rw_semaphore *sem);
|
|||
* static then another method for expressing nested locking is
|
||||
* the explicit definition of lock class keys and the use of
|
||||
* lockdep_set_class() at lock initialization time.
|
||||
* See Documentation/lockdep-design.txt for more details.)
|
||||
* See Documentation/locking/lockdep-design.txt for more details.)
|
||||
*/
|
||||
extern void down_read_nested(struct rw_semaphore *sem, int subclass);
|
||||
extern void down_write_nested(struct rw_semaphore *sem, int subclass);
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
* by Steven Rostedt, based on work by Gregory Haskins, Peter Morreale
|
||||
* and Sven Dietrich.
|
||||
*
|
||||
* Also see Documentation/mutex-design.txt.
|
||||
* Also see Documentation/locking/mutex-design.txt.
|
||||
*/
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/ww_mutex.h>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* Copyright (C) 2005 Kihon Technologies Inc., Steven Rostedt
|
||||
* Copyright (C) 2006 Esben Nielsen
|
||||
*
|
||||
* See Documentation/rt-mutex-design.txt for details.
|
||||
* See Documentation/locking/rt-mutex-design.txt for details.
|
||||
*/
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/export.h>
|
||||
|
|
|
@ -924,7 +924,7 @@ config PROVE_LOCKING
|
|||
the proof of observed correctness is also maintained for an
|
||||
arbitrary combination of these separate locking variants.
|
||||
|
||||
For more details, see Documentation/lockdep-design.txt.
|
||||
For more details, see Documentation/locking/lockdep-design.txt.
|
||||
|
||||
config LOCKDEP
|
||||
bool
|
||||
|
@ -945,7 +945,7 @@ config LOCK_STAT
|
|||
help
|
||||
This feature enables tracking lock contention points
|
||||
|
||||
For more details, see Documentation/lockstat.txt
|
||||
For more details, see Documentation/locking/lockstat.txt
|
||||
|
||||
This also enables lock events required by "perf lock",
|
||||
subcommand of perf.
|
||||
|
|
Loading…
Reference in a new issue