Files
kernel-tenderloin-3.0/include/linux
Mathieu Desnoyers 551d55a944 tree/tiny rcu: Add debug RCU head objects
Helps finding racy users of call_rcu(), which results in hangs because list
entries are overwritten and/or skipped.

Changelog since v4:
- Bissectability is now OK
- Now generate a WARN_ON_ONCE() for non-initialized rcu_head passed to
  call_rcu(). Statically initialized objects are detected with
  object_is_static().
- Rename rcu_head_init_on_stack to init_rcu_head_on_stack.
- Remove init_rcu_head() completely.

Changelog since v3:
- Include comments from Lai Jiangshan

This new patch version is based on the debugobjects with the newly introduced
"active state" tracker.

Non-initialized entries are all considered as "statically initialized". An
activation fixup (triggered by call_rcu()) takes care of performing the debug
object initialization without issuing any warning. Since we cannot increase the
size of struct rcu_head, I don't see much room to put an identifier for
statically initialized rcu_head structures. So for now, we have to live without
"activation without explicit init" detection. But the main purpose of this debug
option is to detect double-activations (double call_rcu() use of a rcu_head
before the callback is executed), which is correctly addressed here.

This also detects potential internal RCU callback corruption, which would cause
the callbacks to be executed twice.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
CC: David S. Miller <davem@davemloft.net>
CC: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
CC: akpm@linux-foundation.org
CC: mingo@elte.hu
CC: laijs@cn.fujitsu.com
CC: dipankar@in.ibm.com
CC: josh@joshtriplett.org
CC: dvhltc@us.ibm.com
CC: niv@us.ibm.com
CC: tglx@linutronix.de
CC: peterz@infradead.org
CC: rostedt@goodmis.org
CC: Valdis.Kletnieks@vt.edu
CC: dhowells@redhat.com
CC: eric.dumazet@gmail.com
CC: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Lai Jiangshan <laijs@cn.fujitsu.com>
2010-06-14 16:37:26 -07:00
..
2010-05-17 22:39:48 -07:00
2010-05-28 01:38:00 +02:00
2010-05-03 08:33:00 -04:00
2010-03-12 15:53:10 -08:00
2010-05-14 17:08:01 -04:00
2010-05-27 09:12:53 -07:00
2010-05-19 13:38:54 -04:00
2010-02-05 07:35:05 -08:00
2010-05-19 22:41:57 -04:00
2010-05-10 16:08:01 -07:00
2009-12-10 23:52:01 +00:00
2010-05-17 16:30:58 -07:00
2010-05-21 19:30:44 +02:00
2010-06-01 11:12:28 +02:00
2009-12-15 08:53:33 -08:00
2010-04-09 08:36:07 +02:00
2009-12-23 13:33:54 +01:00
2010-05-27 22:05:02 -04:00
2010-03-16 08:55:32 +01:00
2010-05-25 08:07:01 -07:00
2010-05-27 09:12:42 -07:00
2010-05-21 09:34:29 -07:00
2010-02-09 11:13:56 +01:00
2010-03-07 22:17:09 +01:00
2010-03-02 12:23:42 +01:00
2010-02-02 07:32:29 -08:00
2010-01-11 16:28:01 -08:00
2010-03-03 11:26:01 +01:00
2010-05-11 12:01:10 -07:00
2010-03-12 15:52:40 -08:00
2010-05-11 14:40:55 +02:00
2010-05-03 11:50:57 +02:00
2010-04-23 02:08:44 +02:00
2010-05-21 09:37:29 -07:00
2009-12-16 06:56:12 -08:00
2010-05-14 15:09:32 -04:00
2010-05-17 12:17:10 +03:00
2010-04-03 14:56:05 -07:00
2009-12-26 20:40:34 -08:00
2010-02-03 17:39:50 +11:00
2010-02-09 11:13:56 +01:00
2010-02-19 03:35:12 -05:00
2010-03-12 15:52:28 -08:00
2009-12-12 13:08:15 +01:00
2010-05-11 14:40:55 +02:00
2010-04-13 14:49:34 -07:00
2010-02-10 23:49:08 +09:00
2010-05-17 05:27:42 +02:00
2010-05-19 13:44:27 +10:00
2010-06-07 16:03:10 -04:00
2010-04-02 14:30:39 -07:00
2010-05-10 23:08:19 +02:00
2010-03-12 15:53:11 -08:00
2009-12-03 11:43:23 +00:00
2009-12-02 09:55:33 +01:00
2010-02-10 17:47:17 -08:00
2010-05-03 15:53:54 -07:00
2010-03-12 15:52:44 -08:00
2010-03-02 14:28:49 -05:00
2010-05-27 09:12:50 -07:00
2010-05-30 09:02:47 -07:00
2010-05-11 10:09:47 +02:00
2010-03-12 15:53:10 -08:00
2010-05-06 10:56:07 +10:00
2010-05-25 11:41:43 -04:00
2009-11-30 12:02:53 +09:00
2010-03-12 15:52:44 -08:00
2010-04-03 15:09:04 -07:00
2009-12-16 22:32:29 -05:00
2010-05-10 11:08:35 -07:00
2010-01-14 22:38:09 -05:00
2010-05-27 09:12:43 -07:00
2010-05-15 23:28:39 -07:00
2010-02-18 15:43:09 -08:00
2010-03-25 17:18:43 -07:00
2010-04-13 12:43:42 +02:00
2010-03-23 17:19:38 +01:00
2010-05-12 23:02:23 -07:00
2010-05-21 09:34:29 -07:00
2010-05-19 22:40:47 -04:00
2010-06-03 13:13:34 +10:00
2010-05-19 22:15:46 +09:30
2010-04-06 20:35:58 +04:00