1
0
Files
linux/kernel
David Miller 419ca3f135 lockdep: fix combinatorial explosion in lock subgraph traversal
When we traverse the graph, either forwards or backwards, we
are interested in whether a certain property exists somewhere
in a node reachable in the graph.

Therefore it is never necessary to traverse through a node more
than once to get a correct answer to the given query.

Take advantage of this property using a global ID counter so that we
need not clear all the markers in all the lock_class entries before
doing a traversal.  A new ID is choosen when we start to traverse, and
we continue through a lock_class only if it's ID hasn't been marked
with the new value yet.

This short-circuiting is essential especially for high CPU count
systems.  The scheduler has a runqueue per cpu, and needs to take
two runqueue locks at a time, which leads to long chains of
backwards and forwards subgraphs from these runqueue lock nodes.
Without the short-circuit implemented here, a graph traversal on
a runqueue lock can take up to (1 << (N - 1)) checks on a system
with N cpus.

For anything more than 16 cpus or so, lockdep will eventually bring
the machine to a complete standstill.

Signed-off-by: David S. Miller <davem@davemloft.net>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-31 18:38:28 +02:00
..
2008-07-26 12:00:07 -07:00
2008-07-28 23:32:00 +02:00
2008-07-23 17:47:32 -07:00
2008-07-28 23:32:00 +02:00
2008-07-25 10:53:38 -07:00
2008-07-26 20:53:20 -04:00
2008-07-28 16:30:21 -07:00
2008-07-26 12:00:04 -07:00
2008-06-24 10:52:55 -05:00
2008-07-26 12:00:09 -07:00
2008-07-02 15:06:24 -06:00
2008-07-25 10:53:29 -07:00
2008-07-26 12:00:09 -07:00
2008-07-26 12:00:09 -07:00
2008-07-26 12:00:09 -07:00
2008-07-26 12:00:04 -07:00
2008-07-25 10:53:45 -07:00
2008-07-27 09:45:34 -07:00