From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: tom.leiming@gmail.com
Cc: mingo@elte.hu, linux-kernel@vger.kernel.org, akpm@linux-foundation.org
Subject: Re: [PATCH 0/8] kernel:lockdep:replace DFS with BFS
Date: Mon, 08 Jun 2009 14:22:07 +0200 [thread overview]
Message-ID: <1244463727.13761.8700.camel@twins> (raw)
In-Reply-To: <1243781365-26814-1-git-send-email-tom.leiming@gmail.com>
On Sun, 2009-05-31 at 22:49 +0800, tom.leiming@gmail.com wrote:
> Hi,
> Currently lockdep uses recursion DFS(depth-first search) algorithm to
> search target in checking lock circle(check_noncircular()),irq-safe
> -> irq-unsafe(check_irq_usage()) and irq inversion when adding a new
> lock dependency. This patches replace the current DFS with BFS, based on
> the following consideration:
>
> 1,no loss of efficiency, no matter DFS or BFS, the running time
> are O(V+E) (V is vertex count, and E is edge count of one
> graph);
>
> 2,BFS may be easily implemented by circular queue and consumes
> much less kernel stack space than DFS for DFS is implemented by
> recursion.
>
> 3, The shortest path can be obtained by BFS if the target is
> found, but can't be got by DFS. By the shortest path, we can
> shorten the lock dependency chain and help to troubleshoot lock
> problem easier than before.
>
OK, so I applied the patches and the cleanup below.
mostly little style nits and moving the circular queue into lockdep.c
(nobody else uses it, so why share it?).
One thing though, macros with return statements?! that's seriously bad
style, don't do that.
One thing that worries me a little is that we loose DaveM's
lockdep_dependency_visit() optimization. My brain seems unwilling to
co-operate on determining if BFS would make that redundant, so a little
word on that would be appreciated.
Then I booted it and all hell broke loose, so either I wrecked something
or you did :-), would you terribly mind poking at that a little?
Over all I like that patches, but they need a little more work. Could
you send delta patches from now on?
---
[ 0.000999] =================================
[ 0.000999] [ BUG: bad contention detected! ]
[ 0.000999] ---------------------------------
[ 0.000999] swapper/0 is trying to contend lock (old_style_seqlock_init) at:
[ 0.000999] [<ffffffff8133a795>] _spin_lock+0x6d/0x75
[ 0.000999] but there are no locks held!
[ 0.000999]
[ 0.000999] other info that might help us debug this:
[ 0.000999] 1 lock held by swapper/0:
[ 0.000999] #0: (xtime_lock){-.....}, at: [<ffffffff8106a360>] tick_periodic+0x1d/0x74
[ 0.000999]
[ 0.000999] stack backtrace:
[ 0.000999] Pid: 0, comm: swapper Not tainted 2.6.30-rc8-tip #1049
[ 0.000999] Call Trace:
[ 0.000999] <IRQ> [<ffffffff81071bd8>] print_lock_contention_bug+0x100/0x110
[ 0.000999] [<ffffffff81071ce0>] lock_acquired+0xf8/0x2b4
[ 0.000999] [<ffffffff81010221>] ? update_vsyscall+0x2d/0xd0
[ 0.000999] [<ffffffff8133a795>] _spin_lock+0x6d/0x75
[ 0.000999] [<ffffffff81010221>] ? update_vsyscall+0x2d/0xd0
[ 0.000999] [<ffffffff81010221>] update_vsyscall+0x2d/0xd0
[ 0.000999] [<ffffffff81067469>] update_wall_time+0x4c1/0x4cc
[ 0.000999] [<ffffffff8105274b>] do_timer+0x15/0x1c
[ 0.000999] [<ffffffff8106a37e>] tick_periodic+0x3b/0x74
[ 0.000999] [<ffffffff8106a3db>] tick_handle_periodic+0x24/0x71
[ 0.000999] [<ffffffff8100ea23>] timer_interrupt+0x1f/0x26
[ 0.000999] [<ffffffff8109348b>] handle_IRQ_event+0x8e/0x19c
[ 0.000999] [<ffffffff8109501e>] handle_level_irq+0x9d/0xf3
[ 0.000999] [<ffffffff8100e24b>] handle_irq+0x24/0x2c
[ 0.000999] [<ffffffff8133f55b>] do_IRQ+0x63/0xc2
[ 0.000999] [<ffffffff8100c713>] ret_from_intr+0x0/0xf
[ 0.000999] <EOI> [<ffffffff8133a538>] ? _spin_unlock_irqrestore+0x47/0x6d
[ 0.000999] [<ffffffff81093eea>] ? __setup_irq+0x1ea/0x277
[ 0.000999] [<ffffffff81094120>] ? setup_irq+0x25/0x2a
[ 0.000999] [<ffffffff8158e63e>] ? hpet_time_init+0x20/0x22
[ 0.000999] [<ffffffff8158bbcc>] ? start_kernel+0x2ee/0x37a
[ 0.000999] [<ffffffff8158b29a>] ? x86_64_start_reservations+0xaa/0xae
[ 0.000999] [<ffffffff8158b37f>] ? x86_64_start_kernel+0xe1/0xe8
And ended in a stuck boot at:
[ 65.411804] rmmod R running task 0 616 1 0x00000008
[ 65.411804] ffff8800023c41a0 ffffea0003336ba8 ffff88007e3a3c08 ffffffff8106f71a
[ 65.411804] ffff88007e3a3c48 0000000000000202 ffff88007f821600 0000000000001823
[ 65.411804] ffff88007e109d20 ffff88007f8b5c80 0000000000000000 ffff88007e3a3d18
[ 65.411804] Call Trace:
[ 65.411804] [<ffffffff8106f71a>] ? trace_hardirqs_on+0xd/0xf
[ 65.411804] [<ffffffff8113f1b6>] ? release_sysfs_dirent+0x91/0xb1
[ 65.411804] [<ffffffff81071af6>] ? print_lock_contention_bug+0x1e/0x110
[ 65.411804] [<ffffffff81071af6>] ? print_lock_contention_bug+0x1e/0x110
[ 65.411804] [<ffffffff8113eff3>] ? sysfs_addrm_start+0x7d/0xaa
[ 65.411804] [<ffffffff81071af6>] ? print_lock_contention_bug+0x1e/0x110
[ 65.411804] [<ffffffff810113ff>] ? alternatives_smp_module_del+0x37/0xd0
[ 65.411804] [<ffffffff810e61ee>] ? free_percpu+0x38/0xf8
[ 65.411804] [<ffffffff8106f71a>] ? trace_hardirqs_on+0xd/0xf
[ 65.411804] [<ffffffff8133a542>] ? _spin_unlock_irqrestore+0x51/0x6d
[ 65.411804] [<ffffffff810e62a5>] ? free_percpu+0xef/0xf8
[ 65.411804] [<ffffffff8107ade5>] ? free_module+0x104/0x118
[ 65.411804] [<ffffffff8107b0a8>] ? sys_delete_module+0x20c/0x22e
[ 65.411804] [<ffffffff81339f88>] ? trace_hardirqs_on_thunk+0x3a/0x3f
[ 65.411804] [<ffffffff8100bcdb>] ? system_call_fastpath+0x16/0x1b
( I can send you my .config if you cannot reproduce, but I don't think
its anything special )
---
Subject: lockdep: clean up after BFS patches
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
Date: Mon Jun 08 13:32:31 CEST 2009
LKML-Reference: <new-submission>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
---
include/linux/lockdep.h | 7 -
kernel/lockdep.c | 232 +++++++++++++++++++++++++++------------------
kernel/lockdep_internals.h | 97 ------------------
3 files changed, 147 insertions(+), 189 deletions(-)
===================================================================
===================================================================
--- linux-2.6.orig/include/linux/lockdep.h
+++ linux-2.6/include/linux/lockdep.h
@@ -58,7 +58,6 @@ struct lock_class {
struct lockdep_subclass_key *key;
unsigned int subclass;
- unsigned int dep_gen_id;
/*
* IRQ/softirq usage tracking bits:
@@ -150,9 +149,9 @@ struct lock_list {
struct stack_trace trace;
int distance;
- /*The parent field is used to implement breadth-first search,and
- *the bit 0 is reused to indicate if the lock has been accessed
- *in BFS.
+ /*
+ * The parent field is used to implement breadth-first search, and the
+ * bit 0 is reused to indicate if the lock has been accessed in BFS.
*/
struct lock_list *parent;
};
===================================================================
--- linux-2.6.orig/kernel/lockdep.c
+++ linux-2.6/kernel/lockdep.c
@@ -43,6 +43,7 @@
#include <linux/ftrace.h>
#include <linux/stringify.h>
#include <linux/bitops.h>
+
#include <asm/sections.h>
#include "lockdep_internals.h"
@@ -118,7 +119,7 @@ static inline int debug_locks_off_graph_
static int lockdep_initialized;
unsigned long nr_list_entries;
-struct lock_list list_entries[MAX_LOCKDEP_ENTRIES];
+static struct lock_list list_entries[MAX_LOCKDEP_ENTRIES];
/*
* All data structures here are protected by the global debug_lock.
@@ -390,19 +391,6 @@ unsigned int nr_process_chains;
unsigned int max_lockdep_depth;
unsigned int max_recursion_depth;
-static unsigned int lockdep_dependency_gen_id;
-
-static bool lockdep_dependency_visit(struct lock_class *source,
- unsigned int depth)
-{
- if (!depth)
- lockdep_dependency_gen_id++;
- if (source->dep_gen_id == lockdep_dependency_gen_id)
- return true;
- source->dep_gen_id = lockdep_dependency_gen_id;
- return false;
-}
-
#ifdef CONFIG_DEBUG_LOCKDEP
/*
* We cannot printk in early bootup code. Not even early_printk()
@@ -575,64 +563,6 @@ static void print_lock_class_header(stru
print_ip_sym((unsigned long)class->key);
}
-/*
- * printk the shortest lock dependencies from @start to @end in reverse order:
- */
-static void __used
-print_shortest_lock_dependencies(struct lock_list *leaf,
- struct lock_list *root)
-{
- struct lock_list *entry = leaf;
- int depth;
-
- /*compute depth from generated tree by BFS*/
- depth = get_lock_depth(leaf);
-
- do {
- print_lock_class_header(entry->class, depth);
- printk("%*s ... acquired at:\n", depth, "");
- print_stack_trace(&entry->trace, 2);
- printk("\n");
-
- if (depth == 0 && (entry != root)) {
- printk("lockdep:%s bad BFS generated tree\n", __func__);
- break;
- }
-
- entry = get_lock_parent(entry);
- depth--;
- } while (entry && (depth >= 0));
-
- return;
-}
-/*
- * printk all lock dependencies starting at <entry>:
- */
-static void __used
-print_lock_dependencies(struct lock_class *class, int depth)
-{
- struct lock_list *entry;
-
- if (lockdep_dependency_visit(class, depth))
- return;
-
- if (DEBUG_LOCKS_WARN_ON(depth >= 20))
- return;
-
- print_lock_class_header(class, depth);
-
- list_for_each_entry(entry, &class->locks_after, entry) {
- if (DEBUG_LOCKS_WARN_ON(!entry->class))
- return;
-
- print_lock_dependencies(entry->class, depth + 1);
-
- printk("%*s ... acquired at:\n",depth,"");
- print_stack_trace(&entry->trace, 2);
- printk("\n");
- }
-}
-
static void print_kernel_version(void)
{
printk("%s %.*s\n", init_utsname()->release,
@@ -927,14 +857,106 @@ static int add_lock_to_list(struct lock_
return 1;
}
-unsigned long bfs_accessed[BITS_TO_LONGS(MAX_LOCKDEP_ENTRIES)];
-static struct circular_queue lock_cq;
+/*For good efficiency of modular, we use power of 2*/
+#define MAX_CIRCULAR_QUEUE_SIZE 4096UL
+#define CQ_MASK (MAX_CIRCULAR_QUEUE_SIZE-1)
+
+/* The circular_queue and helpers is used to implement the
+ * breadth-first search(BFS)algorithem, by which we can build
+ * the shortest path from the next lock to be acquired to the
+ * previous held lock if there is a circular between them.
+ * */
+struct circular_queue {
+ unsigned long element[MAX_CIRCULAR_QUEUE_SIZE];
+ unsigned int front, rear;
+};
+
+static struct circular_queue lock_cq;
+static unsigned long bfs_accessed[BITS_TO_LONGS(MAX_LOCKDEP_ENTRIES)];
+
unsigned int max_bfs_queue_depth;
+
+static inline void __cq_init(struct circular_queue *cq)
+{
+ cq->front = cq->rear = 0;
+ bitmap_zero(bfs_accessed, MAX_LOCKDEP_ENTRIES);
+}
+
+static inline int __cq_empty(struct circular_queue *cq)
+{
+ return (cq->front == cq->rear);
+}
+
+static inline int __cq_full(struct circular_queue *cq)
+{
+ return ((cq->rear + 1) & CQ_MASK) == cq->front;
+}
+
+static inline int __cq_enqueue(struct circular_queue *cq, unsigned long elem)
+{
+ if (__cq_full(cq))
+ return -1;
+
+ cq->element[cq->rear] = elem;
+ cq->rear = (cq->rear + 1) & CQ_MASK;
+ return 0;
+}
+
+static inline int __cq_dequeue(struct circular_queue *cq, unsigned long *elem)
+{
+ if (__cq_empty(cq))
+ return -1;
+
+ *elem = cq->element[cq->front];
+ cq->front = (cq->front + 1) & CQ_MASK;
+ return 0;
+}
+
+static inline unsigned int __cq_get_elem_count(struct circular_queue *cq)
+{
+ return (cq->rear - cq->front) & CQ_MASK;
+}
+
+static inline void mark_lock_accessed(struct lock_list *lock,
+ struct lock_list *parent)
+{
+ unsigned long nr;
+ nr = lock - list_entries;
+ WARN_ON(nr >= nr_list_entries);
+ lock->parent = parent;
+ set_bit(nr, bfs_accessed);
+}
+
+static inline unsigned long lock_accessed(struct lock_list *lock)
+{
+ unsigned long nr;
+ nr = lock - list_entries;
+ WARN_ON(nr >= nr_list_entries);
+ return test_bit(nr, bfs_accessed);
+}
+
+static inline struct lock_list *get_lock_parent(struct lock_list *child)
+{
+ return child->parent;
+}
+
+static inline int get_lock_depth(struct lock_list *child)
+{
+ int depth = 0;
+ struct lock_list *parent;
+
+ while ((parent = get_lock_parent(child))) {
+ child = parent;
+ depth++;
+ }
+ return depth;
+}
+
static int __bfs(struct lock_list *source_entry,
- void *data,
- int (*match)(struct lock_list *entry, void *data),
- struct lock_list **target_entry,
- int forward)
+ void *data,
+ int (*match)(struct lock_list *entry, void *data),
+ struct lock_list **target_entry,
+ int forward)
{
struct lock_list *entry;
struct list_head *head;
@@ -1202,14 +1224,6 @@ check_noncircular(struct lock_list *root
* without creating any illegal irq-safe -> irq-unsafe lock dependency.
*/
-
-#define BFS_PROCESS_RET(ret) do { \
- if (ret < 0) \
- return print_bfs_bug(ret); \
- if (ret == 1) \
- return 1; \
- } while (0)
-
static inline int usage_match(struct lock_list *entry, void *bit)
{
return entry->class->usage_mask & (1 << (enum lock_usage_bit)bit);
@@ -1236,6 +1250,8 @@ find_usage_forwards(struct lock_list *ro
debug_atomic_inc(&nr_find_usage_forwards_checks);
result = __bfs_forwards(root, (void *)bit, usage_match, target_entry);
+ if (result < 0)
+ return print_bfs_bug(result);
return result;
}
@@ -1259,10 +1275,42 @@ find_usage_backwards(struct lock_list *r
debug_atomic_inc(&nr_find_usage_backwards_checks);
result = __bfs_backwards(root, (void *)bit, usage_match, target_entry);
+ if (result < 0)
+ return print_bfs_bug(result);
return result;
}
+/*
+ * printk the shortest lock dependencies from @start to @end in reverse order:
+ */
+static void __used
+print_shortest_lock_dependencies(struct lock_list *leaf,
+ struct lock_list *root)
+{
+ struct lock_list *entry = leaf;
+ int depth;
+
+ /*compute depth from generated tree by BFS*/
+ depth = get_lock_depth(leaf);
+
+ do {
+ print_lock_class_header(entry->class, depth);
+ printk("%*s ... acquired at:\n", depth, "");
+ print_stack_trace(&entry->trace, 2);
+ printk("\n");
+
+ if (depth == 0 && (entry != root)) {
+ printk("lockdep:%s bad BFS generated tree\n", __func__);
+ break;
+ }
+
+ entry = get_lock_parent(entry);
+ depth--;
+ } while (entry && (depth >= 0));
+
+ return;
+}
static int
print_bad_irq_dependency(struct task_struct *curr,
@@ -1349,12 +1397,14 @@ check_usage(struct task_struct *curr, st
this.class = hlock_class(prev);
ret = find_usage_backwards(&this, bit_backwards, &target_entry);
- BFS_PROCESS_RET(ret);
+ if (!ret || ret == 1)
+ return ret;
that.parent = NULL;
that.class = hlock_class(next);
ret = find_usage_forwards(&that, bit_forwards, &target_entry1);
- BFS_PROCESS_RET(ret);
+ if (!ret || ret == 1)
+ return ret;
return print_bad_irq_dependency(curr, &this, &that,
target_entry, target_entry1,
@@ -2038,7 +2088,8 @@ check_usage_forwards(struct task_struct
root.parent = NULL;
root.class = hlock_class(this);
ret = find_usage_forwards(&root, bit, &target_entry);
- BFS_PROCESS_RET(ret);
+ if (!ret || ret == 1)
+ return ret;
return print_irq_inversion_bug(curr, &root, target_entry,
this, 1, irqclass);
@@ -2059,7 +2110,8 @@ check_usage_backwards(struct task_struct
root.parent = NULL;
root.class = hlock_class(this);
ret = find_usage_backwards(&root, bit, &target_entry);
- BFS_PROCESS_RET(ret);
+ if (!ret || ret == 1)
+ return ret;
return print_irq_inversion_bug(curr, &root, target_entry,
this, 1, irqclass);
===================================================================
--- linux-2.6.orig/kernel/lockdep_internals.h
+++ linux-2.6/kernel/lockdep_internals.h
@@ -91,6 +91,8 @@ extern unsigned int nr_process_chains;
extern unsigned int max_lockdep_depth;
extern unsigned int max_recursion_depth;
+extern unsigned int max_bfs_queue_depth;
+
#ifdef CONFIG_PROVE_LOCKING
extern unsigned long lockdep_count_forward_deps(struct lock_class *);
extern unsigned long lockdep_count_backward_deps(struct lock_class *);
@@ -136,98 +138,3 @@ extern atomic_t nr_find_usage_backwards_
# define debug_atomic_dec(ptr) do { } while (0)
# define debug_atomic_read(ptr) 0
#endif
-
-
-extern unsigned int max_bfs_queue_depth;
-extern unsigned long nr_list_entries;
-extern struct lock_list list_entries[MAX_LOCKDEP_ENTRIES];
-extern unsigned long bfs_accessed[];
-
-/*For good efficiency of modular, we use power of 2*/
-#define MAX_CIRCULAR_QUE_SIZE 4096UL
-
-/* The circular_queue and helpers is used to implement the
- * breadth-first search(BFS)algorithem, by which we can build
- * the shortest path from the next lock to be acquired to the
- * previous held lock if there is a circular between them.
- * */
-struct circular_queue{
- unsigned long element[MAX_CIRCULAR_QUE_SIZE];
- unsigned int front, rear;
-};
-
-static inline void __cq_init(struct circular_queue *cq)
-{
- cq->front = cq->rear = 0;
- bitmap_zero(bfs_accessed, MAX_LOCKDEP_ENTRIES);
-}
-
-static inline int __cq_empty(struct circular_queue *cq)
-{
- return (cq->front == cq->rear);
-}
-
-static inline int __cq_full(struct circular_queue *cq)
-{
- return ((cq->rear + 1)&(MAX_CIRCULAR_QUE_SIZE-1)) == cq->front;
-}
-
-static inline int __cq_enqueue(struct circular_queue *cq, unsigned long elem)
-{
- if (__cq_full(cq))
- return -1;
-
- cq->element[cq->rear] = elem;
- cq->rear = (cq->rear + 1)&(MAX_CIRCULAR_QUE_SIZE-1);
- return 0;
-}
-
-static inline int __cq_dequeue(struct circular_queue *cq, unsigned long *elem)
-{
- if (__cq_empty(cq))
- return -1;
-
- *elem = cq->element[cq->front];
- cq->front = (cq->front + 1)&(MAX_CIRCULAR_QUE_SIZE-1);
- return 0;
-}
-
-static inline unsigned int __cq_get_elem_count(struct circular_queue *cq)
-{
- return (cq->rear - cq->front)&(MAX_CIRCULAR_QUE_SIZE-1);
-}
-
-static inline void mark_lock_accessed(struct lock_list *lock,
- struct lock_list *parent)
-{
- unsigned long nr;
- nr = lock - list_entries;
- WARN_ON(nr >= nr_list_entries);
- lock->parent = parent;
- set_bit(nr, bfs_accessed);
-}
-
-static inline unsigned long lock_accessed(struct lock_list *lock)
-{
- unsigned long nr;
- nr = lock - list_entries;
- WARN_ON(nr >= nr_list_entries);
- return test_bit(nr, bfs_accessed);
-}
-
-static inline struct lock_list *get_lock_parent(struct lock_list *child)
-{
- return child->parent;
-}
-
-static inline int get_lock_depth(struct lock_list *child)
-{
- int depth = 0;
- struct lock_list *parent;
-
- while ((parent = get_lock_parent(child))) {
- child = parent;
- depth++;
- }
- return depth;
-}
next prev parent reply other threads:[~2009-06-08 12:22 UTC|newest]
Thread overview: 228+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <yes>
2009-01-16 18:08 ` Quota fixes and improvements Jan Kara
2009-01-16 18:08 ` [PATCH 01/11] quota: Improve locking Jan Kara
2009-01-16 18:08 ` [PATCH 02/11] ocfs2: Remove ocfs2_dquot_initialize() and ocfs2_dquot_drop() Jan Kara
2009-01-16 18:08 ` [PATCH 03/11] ocfs2: Push out dropping of dentry lock to ocfs2_wq Jan Kara
2009-01-16 18:08 ` [PATCH 04/11] ocfs2: Fix possible deadlock in ocfs2_write_dquot() Jan Kara
2009-01-16 18:08 ` [PATCH 05/11] quota: Add quota reservation support Jan Kara
2009-01-16 18:08 ` [PATCH 06/11] quota: Add quota reservation claim and released operations Jan Kara
2009-01-16 18:08 ` [PATCH 07/11] quota: Use inode->i_blkbits to get block bits Jan Kara
2009-01-16 18:08 ` [PATCH 08/11] quota: Move EXPORT_SYMBOL immediately next to the functions/varibles Jan Kara
2009-01-16 18:08 ` [PATCH 09/11] ext3: Remove unnecessary quota functions Jan Kara
2009-01-16 18:08 ` [PATCH 10/11] ext4: " Jan Kara
2009-01-16 18:08 ` [PATCH 11/11] reiserfs: " Jan Kara
2009-01-20 21:41 ` [PATCH 10/11] ext4: " Mingming Cao
2009-01-20 21:41 ` [PATCH 09/11] ext3: " Mingming Cao
2009-01-24 7:49 ` [PATCH 01/11] quota: Improve locking Andrew Morton
2009-01-26 10:04 ` Jan Kara
2009-05-31 14:49 ` [PATCH 0/8] kernel:lockdep:replace DFS with BFS tom.leiming
2009-05-31 14:49 ` [PATCH 1/8] kernel:lockdep:improve implementation of BFS tom.leiming
2009-05-31 14:49 ` [PATCH 2/8] kernel:lockdep: introduce match function to BFS tom.leiming
2009-05-31 14:49 ` [PATCH 3/8] kernel:lockdep:implement check_noncircular() by BFS tom.leiming
2009-05-31 14:49 ` [PATCH 4/8] kernel:lockdep:implement find_usage_*wards " tom.leiming
2009-05-31 14:49 ` [PATCH 5/8] kernel:lockdep:introduce print_shortest_lock_dependencies tom.leiming
2009-05-31 14:49 ` [PATCH 6/8] kernel:lockdep: implement lockdep_count_*ward_deps by BFS tom.leiming
2009-05-31 14:49 ` [PATCH 7/8] kernel:lockdep: update memory usage introduced " tom.leiming
2009-05-31 14:49 ` [PATCH 8/8] kernel:lockdep:add statistics info for max bfs queue depth tom.leiming
2009-05-31 15:14 ` [PATCH 4/8] kernel:lockdep:implement find_usage_*wards by BFS Daniel Walker
2009-06-01 0:14 ` Ming Lei
2009-06-08 12:22 ` Peter Zijlstra [this message]
2009-06-08 13:38 ` [PATCH 0/8] kernel:lockdep:replace DFS with BFS Ming Lei
2009-06-08 13:58 ` Ming Lei
2009-06-08 14:04 ` Peter Zijlstra
2009-06-08 15:50 ` Ming Lei
2009-06-09 12:52 ` Ming Lei
2009-10-07 13:49 ` [PATCH 1/1] perf tools: Up the verbose level for some really verbose stuff Arnaldo Carvalho de Melo
2009-10-08 17:31 ` [tip:perf/core] " tip-bot for Arnaldo Carvalho de Melo
2010-06-22 15:20 ` [RFC][PATCH 00/10] cifs: local caching support using FS-Cache Suresh Jayaraman
2010-06-22 15:22 ` [RFC][PATCH 01/10] cifs: add kernel config option for CIFS Client caching support Suresh Jayaraman
2010-06-22 15:22 ` [RFC][PATCH 02/10] cifs: guard cifsglob.h against multiple inclusion Suresh Jayaraman
2010-06-22 21:37 ` Jeff Layton
2010-06-22 15:23 ` [RFC][PATCH 03/10] cifs: register CIFS for caching Suresh Jayaraman
2010-06-23 16:51 ` David Howells
2010-06-25 10:56 ` Suresh Jayaraman
2010-06-22 15:23 ` [RFC][PATCH 04/10] cifs: define server-level cache index objects and register them with FS-Cache Suresh Jayaraman
2010-06-22 21:52 ` Jeff Layton
2010-06-23 5:34 ` Suresh Jayaraman
2010-06-23 16:54 ` David Howells
2010-06-22 15:23 ` [RFC][PATCH 05/10] cifs: define superblock-level cache index objects and register them Suresh Jayaraman
2010-06-23 16:58 ` David Howells
2010-06-25 12:44 ` Suresh Jayaraman
2010-06-25 12:58 ` David Howells
2010-06-25 13:26 ` David Howells
2010-06-28 12:53 ` Suresh Jayaraman
2010-06-28 13:24 ` David Howells
2010-06-22 15:23 ` [RFC][PATCH 06/10] cifs: define inode-level cache object " Suresh Jayaraman
2010-06-23 17:02 ` David Howells
2010-06-25 12:50 ` Suresh Jayaraman
2010-06-25 12:55 ` David Howells
2010-06-25 16:53 ` Jeff Layton
2010-06-25 21:46 ` David Howells
2010-06-25 22:26 ` Jeff Layton
2010-06-25 23:04 ` David Howells
2010-06-25 23:05 ` Steve French
[not found] ` <OFB55E8EC7.E8DD23D5-ON8725774E.0004921E-8825774E.0004CC31@us.ibm.com>
2010-06-27 18:17 ` Aneesh Kumar K. V
2010-06-27 18:22 ` Christoph Hellwig
2010-06-22 15:23 ` [RFC][PATCH 07/10] cifs: FS-Cache page management Suresh Jayaraman
2010-06-23 17:05 ` David Howells
2010-06-22 15:24 ` [RFC][PATCH 08/10] cifs: store pages into local cache Suresh Jayaraman
2010-06-23 17:06 ` David Howells
2010-06-22 15:24 ` [RFC][PATCH 09/10] cifs: read pages from FS-Cache Suresh Jayaraman
2010-06-23 17:07 ` David Howells
2010-06-22 15:25 ` [RFC][PATCH 10/10] cifs: add mount option to enable local caching Suresh Jayaraman
2010-06-23 17:08 ` David Howells
2010-06-23 18:32 ` Scott Lovenberg
2010-06-25 10:48 ` Suresh Jayaraman
2011-06-15 0:46 ` [PATCH] Add ok2440 development board support Wu DaoGuang
2011-10-03 0:32 ` [PATCH 1/1] ARM: Make debug UART optional for S3C devices Thiago A. Correa
2011-10-10 14:44 ` Thiago A. Corrêa
2011-12-11 13:10 ` [PATCH] block: Needn't read the size of device or partition again taco
2012-06-08 17:23 ` [PATCH 1/4] slub: change declare of get_slab() to inline at all times Joonsoo Kim
2012-06-08 17:23 ` [PATCH 2/4] slub: use __cmpxchg_double_slab() at interrupt disabled place Joonsoo Kim
2012-06-08 17:23 ` [PATCH 3/4] slub: refactoring unfreeze_partials() Joonsoo Kim
2012-06-20 7:19 ` Pekka Enberg
2012-06-08 17:23 ` [PATCH 4/4] slub: deactivate freelist of kmem_cache_cpu all at once in deactivate_slab() Joonsoo Kim
2012-06-08 19:04 ` Christoph Lameter
2012-06-10 10:27 ` JoonSoo Kim
2012-06-22 18:34 ` JoonSoo Kim
2012-06-08 19:02 ` [PATCH 1/4] slub: change declare of get_slab() to inline at all times Christoph Lameter
2012-06-09 15:57 ` JoonSoo Kim
2012-06-11 15:04 ` Christoph Lameter
2012-06-22 18:22 ` [PATCH 1/3] slub: prefetch next freelist pointer in __slab_alloc() Joonsoo Kim
2012-06-22 18:22 ` [PATCH 2/3] slub: reduce failure of this_cpu_cmpxchg in put_cpu_partial() after unfreezing Joonsoo Kim
2012-07-04 13:05 ` Pekka Enberg
2012-07-05 14:20 ` Christoph Lameter
2012-08-16 7:06 ` Pekka Enberg
2012-06-22 18:22 ` [PATCH 3/3] slub: release a lock if freeing object with a lock is failed in __slab_free() Joonsoo Kim
2012-07-04 13:10 ` Pekka Enberg
2012-07-04 14:48 ` JoonSoo Kim
2012-07-05 14:26 ` Christoph Lameter
2012-07-06 14:19 ` JoonSoo Kim
2012-07-06 14:34 ` Christoph Lameter
2012-07-06 14:59 ` JoonSoo Kim
2012-07-06 15:10 ` Christoph Lameter
2012-07-08 16:19 ` JoonSoo Kim
2012-06-22 18:45 ` [PATCH 1/3 v2] slub: prefetch next freelist pointer in __slab_alloc() Joonsoo Kim
2012-07-04 12:58 ` JoonSoo Kim
2012-07-04 13:00 ` Pekka Enberg
2012-07-04 14:30 ` JoonSoo Kim
2012-07-04 15:08 ` Pekka Enberg
2012-07-04 15:26 ` Eric Dumazet
2012-07-04 15:48 ` JoonSoo Kim
2012-07-04 16:15 ` Eric Dumazet
2012-07-04 16:24 ` JoonSoo Kim
2012-07-04 15:45 ` JoonSoo Kim
2012-07-04 15:59 ` Pekka Enberg
2012-07-04 16:04 ` JoonSoo Kim
[not found] ` <1360258447-27247-1-git-send-email-yes>
2013-02-07 17:34 ` [PATCH 04/10] USB: EHCI: make ehci-orion a separate driver manjunath.goudar
2013-02-07 19:41 ` Arnd Bergmann
2013-02-08 10:38 ` Florian Fainelli
2013-02-07 17:34 ` [PATCH 05/10] USB: EHCI: make ehci-atmel " manjunath.goudar
2013-02-08 2:58 ` Bo Shen
2013-06-12 11:53 ` Jean-Christophe PLAGNIOL-VILLARD
2013-02-07 17:34 ` [PATCH 07/10] USB: EHCI: make ehci-mv " manjunath.goudar
2013-02-07 17:34 ` [PATCH 08/10] USB: EHCI: make ehci-vt8500 " manjunath.goudar
2013-02-07 18:54 ` Tony Prisk
2013-02-07 17:34 ` [PATCH 09/10] USB: EHCI: make ehci-msm " manjunath.goudar
2013-02-07 18:48 ` Stephen Warren
2013-02-07 19:05 ` David Brown
2013-02-07 17:34 ` [PATCH 10/10] USB: EHCI: make ehci-w90X900 " manjunath.goudar
2013-06-10 9:17 ` [PATCH v2 00/11] ARM:STixxxx: Add STixxxx platform and board support Srinivas KANDAGATLA
2013-06-10 9:21 ` [PATCH v2 01/11] serial:st-asc: Add ST ASC driver Srinivas KANDAGATLA
2013-06-10 9:35 ` Russell King - ARM Linux
2013-06-10 11:53 ` Srinivas KANDAGATLA
2013-06-10 9:21 ` [PATCH v2 02/11] clocksource:global_timer: Add ARM global timer support Srinivas KANDAGATLA
[not found] ` <CACRpkdbQCRKBzRF4HzNsXHwXCLJJcFZ9T36GPmmYsnX1OfgGRg@mail.gmail.com>
[not found] ` <51B5D7A6.1020101@st.com>
[not found] ` <51B72E9A.6070006@st.com>
[not found] ` <CACRpkdbppRqnMYknbBy8JpAVtujMOEQvyczXTmpvkQuxgikFog@mail.gmail.com>
2013-06-12 10:45 ` Srinivas KANDAGATLA
2013-06-10 9:21 ` [PATCH v2 03/11] regmap: Add regmap_field APIs Srinivas KANDAGATLA
2013-06-11 10:48 ` Mark Brown
2013-06-11 11:36 ` Srinivas KANDAGATLA
2013-06-10 9:22 ` [PATCH v2 04/11] mfd:stixxxx-syscfg: Add ST System Configuration support Srinivas KANDAGATLA
[not found] ` <CACRpkdaW2ALTWCB7Rd8m=aAGQwh3T_dJVncxJn_eXer4X3J6_g@mail.gmail.com>
2013-06-10 13:52 ` Srinivas KANDAGATLA
2013-06-10 14:02 ` Arnd Bergmann
2013-06-10 15:51 ` Srinivas KANDAGATLA
2013-06-11 7:41 ` Srinivas KANDAGATLA
2013-06-10 9:22 ` [PATCH v2 05/11] pinctrl:stixxxx: Add pinctrl and pinconf support Srinivas KANDAGATLA
2013-06-10 9:26 ` =?yes?q?=5BPATCH=20v2=2006/11=5D=20ARM=3Astixxxx=3A=20Add=20STiH415=20SOC=20support?= Srinivas KANDAGATLA
2013-06-10 9:55 ` [PATCH v2 06/11] ARM:stixxxx: Add STiH415 SOC support Michal Simek
2013-06-10 11:08 ` Michal Simek
[not found] ` <CAHTX3d+dk3W_9b7SVUokWq4KYXnj=Z1=WPj5zJ-gUvJqqwE=+Q@mail.gmail.com>
2013-06-10 11:46 ` Srinivas KANDAGATLA
2013-06-10 23:19 ` Russell King - ARM Linux
2013-06-11 6:50 ` Srinivas KANDAGATLA
2013-06-13 11:56 ` Russell King - ARM Linux
2013-06-13 12:41 ` Srinivas KANDAGATLA
2013-06-13 12:47 ` Linus Walleij
2013-06-10 9:27 ` [PATCH v2 07/11] ARM:stixxxx: Add STiH416 " Srinivas KANDAGATLA
2013-06-10 13:52 ` Arnd Bergmann
2013-06-10 16:17 ` Srinivas KANDAGATLA
2013-06-14 7:12 ` Srinivas KANDAGATLA
2013-06-10 9:27 ` [PATCH v2 08/11] ARM:stixxxx: Add DEBUG_LL console support Srinivas KANDAGATLA
2013-06-10 9:27 ` [PATCH v2 09/11] ARM:stixxxx: Add stixxxx options to multi_v7_defconfig Srinivas KANDAGATLA
2013-06-10 10:40 ` Mark Rutland
2013-06-10 10:58 ` Srinivas KANDAGATLA
2013-06-10 13:15 ` Mark Rutland
2013-06-13 9:24 ` Srinivas KANDAGATLA
2013-06-17 9:32 ` Mark Rutland
2013-06-10 9:28 ` [PATCH v2 10/11] ARM:stih41x: Add B2000 board support Srinivas KANDAGATLA
2013-06-10 9:28 ` [PATCH v2 11/11] ARM:stih41x: Add B2020 " Srinivas KANDAGATLA
2014-08-12 6:40 ` [PATCH v3] uas: replace WARN_ON_ONCE() with lockdep_assert_held() Sanjeev Sharma
2014-08-12 6:28 ` Hans de Goede
2014-08-12 6:37 ` Sharma, Sanjeev
2014-08-19 6:33 ` Sharma, Sanjeev
2014-08-19 9:30 ` gregkh
2014-08-19 9:38 ` Sharma, Sanjeev
2014-09-04 7:06 ` Sharma, Sanjeev
2014-09-04 13:50 ` [PATCH] Staging: rtl8192u: fix brace style coding issue in r819xU_firmware.c linux.delve
2014-09-04 13:51 ` [PATCH] Staging: rtl8192u: fix brace style coding issue in r819xU_firmware.c This is a patch to the file r819xU_firmware.c that fixes a brace warning found by checkpatch.pl tool linux.delve
2014-09-04 14:09 ` [PATCH] Staging: rtl8192u: fix brace style coding issue in r819xU_firmware.c Chaitra Ramaiah
2014-09-04 14:09 ` [PATCH] Staging: rtl8192u: fix brace style coding issue in r819xU_firmware.c This is a patch to the file r819xU_firmware.c that fixes a brace warning found by checkpatch.pl tool Chaitra Ramaiah
2014-09-04 14:28 ` Greg KH
2014-09-04 14:33 ` Dan Carpenter
2014-09-04 14:27 ` [PATCH] Staging: rtl8192u: fix brace style coding issue in r819xU_firmware.c Greg KH
2014-10-29 20:28 ` [PATCH v2 0/4] Enable PCI controller for Keystone SoCs Murali Karicheri
2014-10-29 20:28 ` [PATCH v2 1/4] ARM: keystone: add pcie related options Murali Karicheri
2014-10-29 20:28 ` [PATCH v2 2/4] ARM: keystone: defconfig: add options to enable PCI controller Murali Karicheri
2014-10-29 20:28 ` [PATCH v2 3/4] ARM: dts: keystone: add DT bindings for PCI controller for port 0 Murali Karicheri
2014-10-29 20:28 ` [PATCH v2 4/4] ARM: dts: keystone-k2e: add DT bindings for PCI controller for port 1 Murali Karicheri
2014-10-29 21:10 ` [PATCH v2 0/4] Enable PCI controller for Keystone SoCs santosh shilimkar
2015-10-19 2:27 ` [RFC PATCH] qspinlock: Improve performance by reducing load instruction rollback ling.ma.program
2015-10-19 7:58 ` Ingo Molnar
2015-10-19 9:34 ` Peter Zijlstra
2015-10-19 11:24 ` Ingo Molnar
2015-10-19 17:24 ` Waiman Long
2015-10-20 2:57 ` Ling Ma
2015-10-20 8:48 ` Ingo Molnar
2015-10-21 5:28 ` Ling Ma
2015-10-21 7:54 ` Peter Zijlstra
2015-10-20 9:15 ` Peter Zijlstra
2015-10-19 9:33 ` Peter Zijlstra
2015-10-19 17:20 ` Waiman Long
2015-10-20 3:00 ` Ling Ma
2015-10-19 9:46 ` Peter Zijlstra
2015-10-20 3:03 ` Ling Ma
2015-10-20 3:24 ` Ling Ma
2015-10-20 9:16 ` Peter Zijlstra
2015-10-21 5:30 ` Ling Ma
2015-10-19 17:18 ` Waiman Long
2015-10-20 3:12 ` Ling Ma
2015-10-20 18:55 ` Waiman Long
2015-10-21 5:43 ` Ling Ma
2015-12-31 8:09 ` [RFC PATCH] alispinlock: acceleration from lock integration on multi-core platform ling.ma.program
2016-01-05 18:46 ` Waiman Long
2016-01-08 22:48 ` Ling Ma
2016-01-05 21:18 ` Peter Zijlstra
2016-01-05 21:42 ` One Thousand Gnomes
2016-01-06 8:16 ` Peter Zijlstra
2016-01-06 8:21 ` Peter Zijlstra
2016-01-06 11:24 ` One Thousand Gnomes
2016-01-08 22:44 ` Ling Ma
2016-01-12 13:50 ` One Thousand Gnomes
2016-01-14 8:10 ` Ling Ma
2016-01-19 8:52 ` Ling Ma
2016-01-19 15:36 ` Waiman Long
2016-02-03 4:40 ` Ling Ma
2016-02-03 6:00 ` Ling Ma
2016-02-03 21:42 ` Waiman Long
2016-02-04 7:07 ` Ling Ma
2016-04-05 3:44 ` Ling Ma
2016-04-11 8:00 ` Ling Ma
2016-01-08 23:01 ` Ling Ma
2016-01-08 22:56 ` Ling Ma
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1244463727.13761.8700.camel@twins \
--to=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tom.leiming@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox