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
		Add a link
		
	
		Reference in a new issue
	
	 Davidlohr Bueso
				Davidlohr Bueso