mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-04-14 10:16:04 +00:00
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.
|
- semantics and behavior of local atomic operations.
|
||||||
lockdep-design.txt
|
lockdep-design.txt
|
||||||
- documentation on the runtime locking correctness validator.
|
- documentation on the runtime locking correctness validator.
|
||||||
|
locking/
|
||||||
|
- directory with info about kernel locking primitives
|
||||||
lockstat.txt
|
lockstat.txt
|
||||||
- info on collecting statistics on locks (and contention).
|
- info on collecting statistics on locks (and contention).
|
||||||
lockup-watchdogs.txt
|
lockup-watchdogs.txt
|
||||||
|
|
|
@ -1972,7 +1972,7 @@ machines due to caching.
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<filename>Documentation/spinlocks.txt</filename>:
|
<filename>Documentation/locking/spinlocks.txt</filename>:
|
||||||
Linus Torvalds' spinlocking tutorial in the kernel sources.
|
Linus Torvalds' spinlocking tutorial in the kernel sources.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
|
@ -12,7 +12,7 @@ Because things like lock contention can severely impact performance.
|
||||||
- HOW
|
- HOW
|
||||||
|
|
||||||
Lockdep already has hooks in the lock functions and maps lock instances to
|
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
|
The graph below shows the relation between the lock functions and the various
|
||||||
hooks therein.
|
hooks therein.
|
||||||
|
|
|
@ -105,9 +105,9 @@ never used in interrupt handlers, you can use the non-irq versions:
|
||||||
spin_unlock(&lock);
|
spin_unlock(&lock);
|
||||||
|
|
||||||
(and the equivalent read-write versions too, of course). The spinlock will
|
(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
|
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
|
The reasons you mustn't use these versions if you have interrupts that
|
||||||
play with the spinlock is that you can get deadlocks:
|
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
|
interrupt happens on the same CPU that already holds the lock, because the
|
||||||
lock will obviously never be released (because the interrupt is waiting
|
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
|
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
|
(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
|
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
|
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
|
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
|
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
|
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
|
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.
|
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.
|
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
|
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
|
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
|
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
|
L: linux-kernel@vger.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/locking
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/locking
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/lockdep*.txt
|
F: Documentation/locking/lockdep*.txt
|
||||||
F: Documentation/lockstat.txt
|
F: Documentation/locking/lockstat.txt
|
||||||
F: include/linux/lockdep.h
|
F: include/linux/lockdep.h
|
||||||
F: kernel/locking/
|
F: kernel/locking/
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
* of extra utility/tracking out of our acquire-ctx. This is provided
|
* of extra utility/tracking out of our acquire-ctx. This is provided
|
||||||
* by drm_modeset_lock / drm_modeset_acquire_ctx.
|
* 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:
|
* The basic usage pattern is to:
|
||||||
*
|
*
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* Copyright (C) 2006,2007 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
|
* Copyright (C) 2006,2007 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
|
||||||
* Copyright (C) 2007 Red Hat, Inc., Peter Zijlstra <pzijlstr@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
|
#ifndef __LINUX_LOCKDEP_H
|
||||||
#define __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.
|
* 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
|
#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
||||||
extern void mutex_lock_nested(struct mutex *lock, unsigned int subclass);
|
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
|
* static then another method for expressing nested locking is
|
||||||
* the explicit definition of lock class keys and the use of
|
* the explicit definition of lock class keys and the use of
|
||||||
* lockdep_set_class() at lock initialization time.
|
* 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_read_nested(struct rw_semaphore *sem, int subclass);
|
||||||
extern void down_write_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
|
* by Steven Rostedt, based on work by Gregory Haskins, Peter Morreale
|
||||||
* and Sven Dietrich.
|
* and Sven Dietrich.
|
||||||
*
|
*
|
||||||
* Also see Documentation/mutex-design.txt.
|
* Also see Documentation/locking/mutex-design.txt.
|
||||||
*/
|
*/
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
#include <linux/ww_mutex.h>
|
#include <linux/ww_mutex.h>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* Copyright (C) 2005 Kihon Technologies Inc., Steven Rostedt
|
* Copyright (C) 2005 Kihon Technologies Inc., Steven Rostedt
|
||||||
* Copyright (C) 2006 Esben Nielsen
|
* 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/spinlock.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
|
|
|
@ -924,7 +924,7 @@ config PROVE_LOCKING
|
||||||
the proof of observed correctness is also maintained for an
|
the proof of observed correctness is also maintained for an
|
||||||
arbitrary combination of these separate locking variants.
|
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
|
config LOCKDEP
|
||||||
bool
|
bool
|
||||||
|
@ -945,7 +945,7 @@ config LOCK_STAT
|
||||||
help
|
help
|
||||||
This feature enables tracking lock contention points
|
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",
|
This also enables lock events required by "perf lock",
|
||||||
subcommand of perf.
|
subcommand of perf.
|
||||||
|
|
Loading…
Add table
Reference in a new issue