* [PATCH v7 0/2] lockdep: add support for queued rwlock @ 2014-08-06 17:22 Waiman Long 2014-08-06 17:22 ` [PATCH v7 1/2] locking/lockdep: Restrict the use of recursive read_lock() with qrwlock Waiman Long 2014-08-06 17:22 ` [PATCH v7 2/2] locking/selftest: Support queued rwlock Waiman Long 0 siblings, 2 replies; 6+ messages in thread From: Waiman Long @ 2014-08-06 17:22 UTC (permalink / raw) To: Ingo Molnar, Peter Zijlstra, Maarten Lankhorst, Rik van Riel Cc: linux-kernel, Scott J Norton, Fengguang Wu, Waiman Long v6->v7: - Add recursive read-lock with interrupt test in locking-selftest.c. v5->v6: - Unconditionally disallow the use of recursive read-lock in process context. - Promote read state 3 to 2 when in interrupt context instead of doing additional check in check_deadlock(). - Fix some comments in locking-selftest.c. v4->v5: - Add patch 2 to update the locking selftest code to handle recursive read_lock correctly. Patch 1 has no change. v3->v4: - Document the new read state and move the conditional compilation code to lockdep.h. v2->v3: - Add a new read mode (3) for rwlock (used in lock_acquire_shared_cond_recursive()) to avoid conflict with other use cases of lock_acquire_shared_recursive(). v1->v2: - Use less conditional & make it easier to read With the merging of qrwlock into 3.16, it was found that the btrfs filesystem hanged readily. A fix was devised and merged into rc2 and the use of recursive read_lock call was part of the problem. This patch series addes code to the lockdep subsystem to catch this kind of recursive read_lock calls in kernel code. It also updates the locking selftest to handle recursive read_lock correctly so that it won't complain about test failures. Waiman Long (2): locking/lockdep: Restrict the use of recursive read_lock() with qrwlock locking/selftest: Support queued rwlock include/linux/lockdep.h | 10 +++++++- kernel/locking/lockdep.c | 6 +++++ lib/locking-selftest.c | 56 ++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 64 insertions(+), 8 deletions(-) ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v7 1/2] locking/lockdep: Restrict the use of recursive read_lock() with qrwlock 2014-08-06 17:22 [PATCH v7 0/2] lockdep: add support for queued rwlock Waiman Long @ 2014-08-06 17:22 ` Waiman Long 2014-08-13 10:56 ` [tip:locking/core] " tip-bot for Waiman Long 2014-08-06 17:22 ` [PATCH v7 2/2] locking/selftest: Support queued rwlock Waiman Long 1 sibling, 1 reply; 6+ messages in thread From: Waiman Long @ 2014-08-06 17:22 UTC (permalink / raw) To: Ingo Molnar, Peter Zijlstra, Maarten Lankhorst, Rik van Riel Cc: linux-kernel, Scott J Norton, Fengguang Wu, Waiman Long, Peter Zijlstra Unlike the original unfair rwlock implementation, queued rwlock will grant lock according to the chronological sequence of the lock requests except when the lock requester is in the interrupt context. Consequently, recursive read_lock calls will now hang the process if there is a write_lock call somewhere in between the read_lock calls. This patch updates the lockdep implementation to look for recursive read_lock calls. A new read state (3) is used to mark those read_lock call that cannot be recursively called except in the interrupt context. The new read state does exhaust the 2 bits available in held_lock:read bit field. The addition of any new read state in the future may require a redesign of how all those bits are squeezed together in the held_lock structure. Signed-off-by: Waiman Long <Waiman.Long@hp.com> Signed-off-by: Peter Zijlstra <peterz@infradead.org> --- include/linux/lockdep.h | 10 +++++++++- kernel/locking/lockdep.c | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletions(-) diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index 008388f..dadd6ba 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h @@ -478,16 +478,24 @@ static inline void print_irqtrace_events(struct task_struct *curr) * on the per lock-class debug mode: */ +/* + * Read states in the 2-bit held_lock:read field: + * 0: Exclusive lock + * 1: Shareable lock, cannot be recursively called + * 2: Shareable lock, can be recursively called + * 3: Shareable lock, cannot be recursively called except in interrupt context + */ #define lock_acquire_exclusive(l, s, t, n, i) lock_acquire(l, s, t, 0, 1, n, i) #define lock_acquire_shared(l, s, t, n, i) lock_acquire(l, s, t, 1, 1, n, i) #define lock_acquire_shared_recursive(l, s, t, n, i) lock_acquire(l, s, t, 2, 1, n, i) +#define lock_acquire_shared_irecursive(l, s, t, n, i) lock_acquire(l, s, t, 3, 1, n, i) #define spin_acquire(l, s, t, i) lock_acquire_exclusive(l, s, t, NULL, i) #define spin_acquire_nest(l, s, t, n, i) lock_acquire_exclusive(l, s, t, n, i) #define spin_release(l, n, i) lock_release(l, n, i) #define rwlock_acquire(l, s, t, i) lock_acquire_exclusive(l, s, t, NULL, i) -#define rwlock_acquire_read(l, s, t, i) lock_acquire_shared_recursive(l, s, t, NULL, i) +#define rwlock_acquire_read(l, s, t, i) lock_acquire_shared_irecursive(l, s, t, NULL, i) #define rwlock_release(l, n, i) lock_release(l, n, i) #define seqcount_acquire(l, s, t, i) lock_acquire_exclusive(l, s, t, NULL, i) diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c index d24e433..097f8ad 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c @@ -3595,6 +3595,12 @@ void lock_acquire(struct lockdep_map *lock, unsigned int subclass, raw_local_irq_save(flags); check_flags(flags); + /* + * An interrupt recursive read in interrupt context can be considered + * to be the same as a recursive read from checking perspective. + */ + if ((read == 3) && in_interrupt()) + read = 2; current->lockdep_recursion = 1; trace_lock_acquire(lock, subclass, trylock, read, check, nest_lock, ip); __lock_acquire(lock, subclass, trylock, read, check, -- 1.7.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [tip:locking/core] locking/lockdep: Restrict the use of recursive read_lock() with qrwlock 2014-08-06 17:22 ` [PATCH v7 1/2] locking/lockdep: Restrict the use of recursive read_lock() with qrwlock Waiman Long @ 2014-08-13 10:56 ` tip-bot for Waiman Long 0 siblings, 0 replies; 6+ messages in thread From: tip-bot for Waiman Long @ 2014-08-13 10:56 UTC (permalink / raw) To: linux-tip-commits Cc: linux-kernel, hpa, mingo, torvalds, peterz, riel, Waiman.Long, tglx, fengguang.wu, scott.norton, maarten.lankhorst Commit-ID: f0bab73cb539fb803c4d419951e8d28aa4964f8f Gitweb: http://git.kernel.org/tip/f0bab73cb539fb803c4d419951e8d28aa4964f8f Author: Waiman Long <Waiman.Long@hp.com> AuthorDate: Wed, 6 Aug 2014 13:22:01 -0400 Committer: Ingo Molnar <mingo@kernel.org> CommitDate: Wed, 13 Aug 2014 10:33:34 +0200 locking/lockdep: Restrict the use of recursive read_lock() with qrwlock Unlike the original unfair rwlock implementation, queued rwlock will grant lock according to the chronological sequence of the lock requests except when the lock requester is in the interrupt context. Consequently, recursive read_lock calls will now hang the process if there is a write_lock call somewhere in between the read_lock calls. This patch updates the lockdep implementation to look for recursive read_lock calls. A new read state (3) is used to mark those read_lock call that cannot be recursively called except in the interrupt context. The new read state does exhaust the 2 bits available in held_lock:read bit field. The addition of any new read state in the future may require a redesign of how all those bits are squeezed together in the held_lock structure. Signed-off-by: Waiman Long <Waiman.Long@hp.com> Signed-off-by: Peter Zijlstra <peterz@infradead.org> Cc: Maarten Lankhorst <maarten.lankhorst@canonical.com> Cc: Rik van Riel <riel@redhat.com> Cc: Scott J Norton <scott.norton@hp.com> Cc: Fengguang Wu <fengguang.wu@intel.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Link: http://lkml.kernel.org/r/1407345722-61615-2-git-send-email-Waiman.Long@hp.com Signed-off-by: Ingo Molnar <mingo@kernel.org> --- include/linux/lockdep.h | 10 +++++++++- kernel/locking/lockdep.c | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index f388481..b5a84b62 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h @@ -478,16 +478,24 @@ static inline void print_irqtrace_events(struct task_struct *curr) * on the per lock-class debug mode: */ +/* + * Read states in the 2-bit held_lock:read field: + * 0: Exclusive lock + * 1: Shareable lock, cannot be recursively called + * 2: Shareable lock, can be recursively called + * 3: Shareable lock, cannot be recursively called except in interrupt context + */ #define lock_acquire_exclusive(l, s, t, n, i) lock_acquire(l, s, t, 0, 1, n, i) #define lock_acquire_shared(l, s, t, n, i) lock_acquire(l, s, t, 1, 1, n, i) #define lock_acquire_shared_recursive(l, s, t, n, i) lock_acquire(l, s, t, 2, 1, n, i) +#define lock_acquire_shared_irecursive(l, s, t, n, i) lock_acquire(l, s, t, 3, 1, n, i) #define spin_acquire(l, s, t, i) lock_acquire_exclusive(l, s, t, NULL, i) #define spin_acquire_nest(l, s, t, n, i) lock_acquire_exclusive(l, s, t, n, i) #define spin_release(l, n, i) lock_release(l, n, i) #define rwlock_acquire(l, s, t, i) lock_acquire_exclusive(l, s, t, NULL, i) -#define rwlock_acquire_read(l, s, t, i) lock_acquire_shared_recursive(l, s, t, NULL, i) +#define rwlock_acquire_read(l, s, t, i) lock_acquire_shared_irecursive(l, s, t, NULL, i) #define rwlock_release(l, n, i) lock_release(l, n, i) #define seqcount_acquire(l, s, t, i) lock_acquire_exclusive(l, s, t, NULL, i) diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c index 88d0d44..420ba68 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c @@ -3597,6 +3597,12 @@ void lock_acquire(struct lockdep_map *lock, unsigned int subclass, raw_local_irq_save(flags); check_flags(flags); + /* + * An interrupt recursive read in interrupt context can be considered + * to be the same as a recursive read from checking perspective. + */ + if ((read == 3) && in_interrupt()) + read = 2; current->lockdep_recursion = 1; trace_lock_acquire(lock, subclass, trylock, read, check, nest_lock, ip); __lock_acquire(lock, subclass, trylock, read, check, ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v7 2/2] locking/selftest: Support queued rwlock 2014-08-06 17:22 [PATCH v7 0/2] lockdep: add support for queued rwlock Waiman Long 2014-08-06 17:22 ` [PATCH v7 1/2] locking/lockdep: Restrict the use of recursive read_lock() with qrwlock Waiman Long @ 2014-08-06 17:22 ` Waiman Long 2014-08-07 9:58 ` Peter Zijlstra 2014-08-13 10:57 ` [tip:locking/core] " tip-bot for Waiman Long 1 sibling, 2 replies; 6+ messages in thread From: Waiman Long @ 2014-08-06 17:22 UTC (permalink / raw) To: Ingo Molnar, Peter Zijlstra, Maarten Lankhorst, Rik van Riel Cc: linux-kernel, Scott J Norton, Fengguang Wu, Waiman Long The queued rwlock does not support the use of recursive read-lock in the process context. With changes in the lockdep code to check and disallow recursive read-lock, it is also necessary for the locking selftest to be updated to change the process context recursive read locking results from SUCCESS to FAILURE for rwlock. Signed-off-by: Waiman Long <Waiman.Long@hp.com> --- lib/locking-selftest.c | 56 ++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 49 insertions(+), 7 deletions(-) diff --git a/lib/locking-selftest.c b/lib/locking-selftest.c index 872a15a..62af709 100644 --- a/lib/locking-selftest.c +++ b/lib/locking-selftest.c @@ -267,19 +267,46 @@ GENERATE_TESTCASE(AA_rsem) #undef E /* - * Special-case for read-locking, they are - * allowed to recurse on the same lock class: + * Special-case for read-locking, they are not allowed to + * recurse on the same lock class except under interrupt context: */ static void rlock_AA1(void) { RL(X1); - RL(X1); // this one should NOT fail + RL(X1); // this one should fail } static void rlock_AA1B(void) { RL(X1); - RL(X2); // this one should NOT fail + RL(X2); // this one should fail +} + +static void rlock_AHA1(void) +{ + RL(X1); + HARDIRQ_ENTER(); + RL(X1); // this one should NOT fail + HARDIRQ_EXIT(); +} + +static void rlock_AHA1B(void) +{ + RL(X1); + HARDIRQ_ENTER(); + RL(X2); // this one should NOT fail + HARDIRQ_EXIT(); +} + +static void rlock_ASAHA1(void) +{ + RL(X1); + SOFTIRQ_ENTER(); + RL(X1); // this one should NOT fail + HARDIRQ_ENTER(); + RL(X1); // this one should NOT fail + HARDIRQ_EXIT(); + SOFTIRQ_EXIT(); } static void rsem_AA1(void) @@ -1069,7 +1096,7 @@ static inline void print_testname(const char *testname) print_testname(desc); \ dotest(name##_spin, FAILURE, LOCKTYPE_SPIN); \ dotest(name##_wlock, FAILURE, LOCKTYPE_RWLOCK); \ - dotest(name##_rlock, SUCCESS, LOCKTYPE_RWLOCK); \ + dotest(name##_rlock, FAILURE, LOCKTYPE_RWLOCK); \ dotest(name##_mutex, FAILURE, LOCKTYPE_MUTEX); \ dotest(name##_wsem, FAILURE, LOCKTYPE_RWSEM); \ dotest(name##_rsem, FAILURE, LOCKTYPE_RWSEM); \ @@ -1830,14 +1857,14 @@ void locking_selftest(void) printk(" --------------------------------------------------------------------------\n"); print_testname("recursive read-lock"); printk(" |"); - dotest(rlock_AA1, SUCCESS, LOCKTYPE_RWLOCK); + dotest(rlock_AA1, FAILURE, LOCKTYPE_RWLOCK); printk(" |"); dotest(rsem_AA1, FAILURE, LOCKTYPE_RWSEM); printk("\n"); print_testname("recursive read-lock #2"); printk(" |"); - dotest(rlock_AA1B, SUCCESS, LOCKTYPE_RWLOCK); + dotest(rlock_AA1B, FAILURE, LOCKTYPE_RWLOCK); printk(" |"); dotest(rsem_AA1B, FAILURE, LOCKTYPE_RWSEM); printk("\n"); @@ -1856,6 +1883,21 @@ void locking_selftest(void) dotest(rsem_AA3, FAILURE, LOCKTYPE_RWSEM); printk("\n"); + print_testname("recursive rlock with interrupt"); + printk(" |"); + dotest(rlock_AHA1, SUCCESS, LOCKTYPE_RWLOCK); + printk("\n"); + + print_testname("recursive rlock with interrupt #2"); + printk(" |"); + dotest(rlock_AHA1B, SUCCESS, LOCKTYPE_RWLOCK); + printk("\n"); + + print_testname("recursive rlock with interrupt #3"); + printk(" |"); + dotest(rlock_ASAHA1, SUCCESS, LOCKTYPE_RWLOCK); + printk("\n"); + printk(" --------------------------------------------------------------------------\n"); /* -- 1.7.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v7 2/2] locking/selftest: Support queued rwlock 2014-08-06 17:22 ` [PATCH v7 2/2] locking/selftest: Support queued rwlock Waiman Long @ 2014-08-07 9:58 ` Peter Zijlstra 2014-08-13 10:57 ` [tip:locking/core] " tip-bot for Waiman Long 1 sibling, 0 replies; 6+ messages in thread From: Peter Zijlstra @ 2014-08-07 9:58 UTC (permalink / raw) To: Waiman Long Cc: Ingo Molnar, Maarten Lankhorst, Rik van Riel, linux-kernel, Scott J Norton, Fengguang Wu [-- Attachment #1: Type: text/plain, Size: 900 bytes --] On Wed, Aug 06, 2014 at 01:22:02PM -0400, Waiman Long wrote: > The queued rwlock does not support the use of recursive read-lock in > the process context. With changes in the lockdep code to check and > disallow recursive read-lock, it is also necessary for the locking > selftest to be updated to change the process context recursive read > locking results from SUCCESS to FAILURE for rwlock. > +static void rlock_AHA1(void) > +{ > + RL(X1); > + HARDIRQ_ENTER(); > + RL(X1); // this one should NOT fail > + HARDIRQ_EXIT(); > +} > + > +static void rlock_AHA1B(void) > +{ > + RL(X1); > + HARDIRQ_ENTER(); > + RL(X2); // this one should NOT fail > + HARDIRQ_EXIT(); > +} > + > +static void rlock_ASAHA1(void) > +{ > + RL(X1); > + SOFTIRQ_ENTER(); > + RL(X1); // this one should NOT fail > + HARDIRQ_ENTER(); > + RL(X1); // this one should NOT fail > + HARDIRQ_EXIT(); > + SOFTIRQ_EXIT(); > } Thanks! [-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* [tip:locking/core] locking/selftest: Support queued rwlock 2014-08-06 17:22 ` [PATCH v7 2/2] locking/selftest: Support queued rwlock Waiman Long 2014-08-07 9:58 ` Peter Zijlstra @ 2014-08-13 10:57 ` tip-bot for Waiman Long 1 sibling, 0 replies; 6+ messages in thread From: tip-bot for Waiman Long @ 2014-08-13 10:57 UTC (permalink / raw) To: linux-tip-commits Cc: linux-kernel, hpa, mingo, torvalds, peterz, riel, Waiman.Long, tglx, fengguang.wu, scott.norton, maarten.lankhorst Commit-ID: ae17ea0ec7d8fa64fbb773a52b2df5ba4766bcb8 Gitweb: http://git.kernel.org/tip/ae17ea0ec7d8fa64fbb773a52b2df5ba4766bcb8 Author: Waiman Long <Waiman.Long@hp.com> AuthorDate: Wed, 6 Aug 2014 13:22:02 -0400 Committer: Ingo Molnar <mingo@kernel.org> CommitDate: Wed, 13 Aug 2014 10:33:35 +0200 locking/selftest: Support queued rwlock The queued rwlock does not support the use of recursive read-lock in the process context. With changes in the lockdep code to check and disallow recursive read-lock, it is also necessary for the locking selftest to be updated to change the process context recursive read locking results from SUCCESS to FAILURE for rwlock. Signed-off-by: Waiman Long <Waiman.Long@hp.com> Signed-off-by: Peter Zijlstra <peterz@infradead.org> Cc: Maarten Lankhorst <maarten.lankhorst@canonical.com> Cc: Rik van Riel <riel@redhat.com> Cc: Scott J Norton <scott.norton@hp.com> Cc: Fengguang Wu <fengguang.wu@intel.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Link: http://lkml.kernel.org/r/1407345722-61615-3-git-send-email-Waiman.Long@hp.com Signed-off-by: Ingo Molnar <mingo@kernel.org> --- lib/locking-selftest.c | 56 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 7 deletions(-) diff --git a/lib/locking-selftest.c b/lib/locking-selftest.c index 872a15a..62af709 100644 --- a/lib/locking-selftest.c +++ b/lib/locking-selftest.c @@ -267,19 +267,46 @@ GENERATE_TESTCASE(AA_rsem) #undef E /* - * Special-case for read-locking, they are - * allowed to recurse on the same lock class: + * Special-case for read-locking, they are not allowed to + * recurse on the same lock class except under interrupt context: */ static void rlock_AA1(void) { RL(X1); - RL(X1); // this one should NOT fail + RL(X1); // this one should fail } static void rlock_AA1B(void) { RL(X1); - RL(X2); // this one should NOT fail + RL(X2); // this one should fail +} + +static void rlock_AHA1(void) +{ + RL(X1); + HARDIRQ_ENTER(); + RL(X1); // this one should NOT fail + HARDIRQ_EXIT(); +} + +static void rlock_AHA1B(void) +{ + RL(X1); + HARDIRQ_ENTER(); + RL(X2); // this one should NOT fail + HARDIRQ_EXIT(); +} + +static void rlock_ASAHA1(void) +{ + RL(X1); + SOFTIRQ_ENTER(); + RL(X1); // this one should NOT fail + HARDIRQ_ENTER(); + RL(X1); // this one should NOT fail + HARDIRQ_EXIT(); + SOFTIRQ_EXIT(); } static void rsem_AA1(void) @@ -1069,7 +1096,7 @@ static inline void print_testname(const char *testname) print_testname(desc); \ dotest(name##_spin, FAILURE, LOCKTYPE_SPIN); \ dotest(name##_wlock, FAILURE, LOCKTYPE_RWLOCK); \ - dotest(name##_rlock, SUCCESS, LOCKTYPE_RWLOCK); \ + dotest(name##_rlock, FAILURE, LOCKTYPE_RWLOCK); \ dotest(name##_mutex, FAILURE, LOCKTYPE_MUTEX); \ dotest(name##_wsem, FAILURE, LOCKTYPE_RWSEM); \ dotest(name##_rsem, FAILURE, LOCKTYPE_RWSEM); \ @@ -1830,14 +1857,14 @@ void locking_selftest(void) printk(" --------------------------------------------------------------------------\n"); print_testname("recursive read-lock"); printk(" |"); - dotest(rlock_AA1, SUCCESS, LOCKTYPE_RWLOCK); + dotest(rlock_AA1, FAILURE, LOCKTYPE_RWLOCK); printk(" |"); dotest(rsem_AA1, FAILURE, LOCKTYPE_RWSEM); printk("\n"); print_testname("recursive read-lock #2"); printk(" |"); - dotest(rlock_AA1B, SUCCESS, LOCKTYPE_RWLOCK); + dotest(rlock_AA1B, FAILURE, LOCKTYPE_RWLOCK); printk(" |"); dotest(rsem_AA1B, FAILURE, LOCKTYPE_RWSEM); printk("\n"); @@ -1856,6 +1883,21 @@ void locking_selftest(void) dotest(rsem_AA3, FAILURE, LOCKTYPE_RWSEM); printk("\n"); + print_testname("recursive rlock with interrupt"); + printk(" |"); + dotest(rlock_AHA1, SUCCESS, LOCKTYPE_RWLOCK); + printk("\n"); + + print_testname("recursive rlock with interrupt #2"); + printk(" |"); + dotest(rlock_AHA1B, SUCCESS, LOCKTYPE_RWLOCK); + printk("\n"); + + print_testname("recursive rlock with interrupt #3"); + printk(" |"); + dotest(rlock_ASAHA1, SUCCESS, LOCKTYPE_RWLOCK); + printk("\n"); + printk(" --------------------------------------------------------------------------\n"); /* ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-08-13 10:58 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2014-08-06 17:22 [PATCH v7 0/2] lockdep: add support for queued rwlock Waiman Long 2014-08-06 17:22 ` [PATCH v7 1/2] locking/lockdep: Restrict the use of recursive read_lock() with qrwlock Waiman Long 2014-08-13 10:56 ` [tip:locking/core] " tip-bot for Waiman Long 2014-08-06 17:22 ` [PATCH v7 2/2] locking/selftest: Support queued rwlock Waiman Long 2014-08-07 9:58 ` Peter Zijlstra 2014-08-13 10:57 ` [tip:locking/core] " tip-bot for Waiman Long
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.