Thomas Gleixner
0c96c5979a
hrtimer: raise softirq unlocked to avoid circular lock dependency
...
The scheduler hrtimer bits in 2.6.25 introduced a circular lock
dependency in a rare code path:
=======================================================
[ INFO: possible circular locking dependency detected ]
2.6.25-sched-devel.git-x86-latest.git #19
-------------------------------------------------------
X/2980 is trying to acquire lock:
(&rq->rq_lock_key#2){++..}, at: [<ffffffff80230146>] task_rq_lock+0x56/0xa0
but task is already holding lock:
(&cpu_base->lock){++..}, at: [<ffffffff80257ae1>] lock_hrtimer_base+0x31/0x60
which lock already depends on the new lock.
The scenario which leads to this is:
posix-timer signal is delivered
-> posix-timer is rearmed
timer is already expired in hrtimer_enqueue()
-> softirq is raised
To prevent this we need to move the raise of the softirq out of the
base->lock protected code path.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: stable@kernel.org
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl >
2008-04-28 22:22:21 +02:00
..
2008-04-19 19:44:58 +02:00
2008-04-28 08:58:36 -07:00
2008-04-25 00:25:08 +02:00
2008-02-09 23:27:01 -08:00
2008-03-24 19:22:20 -07:00
2008-02-14 21:13:33 -08:00
2008-04-19 09:52:37 +10:00
2008-04-19 09:53:46 +10:00
2008-04-19 09:59:43 +10:00
2008-04-19 09:59:43 +10:00
2008-01-30 13:33:08 +01:00
2008-04-28 08:58:22 -07:00
2008-02-05 09:44:20 -08:00
2007-10-19 11:53:36 -07:00
2008-04-18 08:17:57 -07:00
2008-04-19 19:44:59 +02:00
2007-05-09 12:30:49 -07:00
2008-04-19 19:44:58 +02:00
2008-04-28 08:58:23 -07:00
2007-10-18 14:37:28 -07:00
2007-10-18 14:37:24 -07:00
2007-10-18 14:37:26 -07:00
2008-04-28 08:58:23 -07:00
2008-01-29 17:13:18 +11:00
2008-04-28 08:58:23 -07:00
2008-03-30 14:18:41 -07:00
2008-03-30 14:18:41 -07:00
2008-04-28 22:22:21 +02:00
2008-02-08 09:22:29 -08:00
2008-02-06 10:41:01 -08:00
2008-01-25 21:08:29 +01:00
2008-03-10 18:01:20 -07:00
2008-04-28 08:58:23 -07:00
2007-07-16 09:05:50 -07:00
2008-04-17 20:05:43 +02:00
2008-04-19 19:44:58 +02:00
2008-04-28 08:58:32 -07:00
2008-01-24 20:40:40 -08:00
2008-04-21 15:41:27 -07:00
2008-04-19 19:44:57 +02:00
2007-10-11 22:11:11 +02:00
2008-02-25 23:03:02 +01:00
2008-04-18 08:37:01 -07:00
2008-04-02 15:28:19 -07:00
2008-04-18 22:17:04 -04:00
2008-02-08 09:22:31 -08:00
2008-02-08 09:22:31 -08:00
2008-02-06 10:41:02 -08:00
2007-10-19 11:53:37 -07:00
2008-02-08 09:22:23 -08:00
2008-02-06 22:07:51 -05:00
2008-02-08 09:22:41 -08:00
2008-02-08 09:22:23 -08:00
2008-02-08 09:22:31 -08:00
2008-02-05 09:44:22 -08:00
2008-04-17 12:22:30 +02:00
2008-04-18 22:17:04 -04:00
2008-04-15 13:09:54 -07:00
2008-04-18 22:17:04 -04:00
2008-04-21 15:53:41 -07:00
2008-01-25 21:08:24 +01:00
2008-02-13 16:21:18 -08:00
2008-01-25 21:08:24 +01:00
2008-04-19 19:44:59 +02:00
2008-04-19 19:44:58 +02:00
2008-03-26 12:04:09 +01:00
2008-03-04 16:35:09 -08:00
2008-04-20 21:47:08 -07:00
2008-02-08 09:22:41 -08:00
2008-02-08 09:22:41 -08:00
2008-01-24 20:40:40 -08:00
2008-02-13 15:45:36 +01:00
2007-12-18 15:21:13 +01:00
2008-04-19 19:45:01 +02:00
2008-04-19 19:45:00 +02:00
2008-04-19 19:45:00 +02:00
2008-01-25 21:08:29 +01:00
2008-04-19 19:45:00 +02:00
2008-04-19 19:44:59 +02:00
2008-04-25 12:50:00 -07:00
2007-07-16 09:05:50 -07:00
2008-04-17 10:43:01 -04:00
2008-04-21 22:15:06 +00:00
2008-04-19 19:44:58 +02:00
2008-02-29 18:46:53 +01:00
2008-01-30 13:31:20 +01:00
2008-02-06 10:41:02 -08:00
2008-04-21 16:36:46 -07:00
2008-02-05 09:44:07 -08:00
2008-04-28 08:58:26 -07:00
2008-02-08 09:22:31 -08:00
2008-04-19 19:44:57 +02:00
2007-11-14 18:45:44 -08:00
2008-02-06 10:41:11 -08:00
2008-04-21 19:45:12 -07:00
2008-02-12 14:29:26 -08:00
2008-04-17 12:22:31 +02:00
2007-10-18 14:37:28 -07:00
2008-04-10 17:28:26 -07:00
2008-02-08 09:22:23 -08:00
2008-04-19 19:45:00 +02:00
2007-11-29 09:24:53 -08:00
2007-09-19 11:24:17 -07:00
2008-02-08 09:22:31 -08:00
2008-04-17 12:22:30 +02:00