On Jan 29, 2008 11:30 PM, Guillaume Chazarain <[EMAIL PROTECTED]> wrote: > ======================= > gnome-termina S 00000027 0 2201 1 > f6711fb0 00200082 cb330d62 00000027 f664105c 00000b1e 00000000 cb331880 > 00000027 f660d780 009e3840 080ab7d8 080ab298 f6711000 c0103e7e 009e3840 > 000e0002 00000002 080ab7d8 080ab298 bfb41be8 080ab7d8 0000007b c010007b > Call Trace: > [<c0103e7e>] work_resched+0x5/0x16 > ======================= > > This corresponds to the cli instruction: > c0103e7e: fa cli
I bisected it, and the resulting commit is appended. Rerverting this commit applies cleanly on today's git (dd430ca20c40ecccd6954a7efd13d4398f507728) and makes the hang go away -:) commit 37bb6cb4097e29ffee970065b74499cbf10603a3 Author: Peter Zijlstra <[EMAIL PROTECTED]> Date: Fri Jan 25 21:08:32 2008 +0100 hrtimer: unlock hrtimer_wakeup hrtimer_wakeup creates a base->lock rq->lock lock dependancy. Avoid this by switching to HRTIMER_CB_IRQSAFE_NO_SOFTIRQ which doesn't hold base->lock. This fully untangles hrtimer locks from the scheduler locks, and allows hrtimer usage in the scheduler proper. Signed-off-by: Peter Zijlstra <[EMAIL PROTECTED]> Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]> diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index 061ae28..bd5d6b5 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c @@ -1293,7 +1293,7 @@ void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, struct task_struct *task) sl->timer.function = hrtimer_wakeup; sl->task = task; #ifdef CONFIG_HIGH_RES_TIMERS - sl->timer.cb_mode = HRTIMER_CB_IRQSAFE_NO_RESTART; + sl->timer.cb_mode = HRTIMER_CB_IRQSAFE_NO_SOFTIRQ; #endif } @@ -1304,6 +1304,8 @@ static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mod do { set_current_state(TASK_INTERRUPTIBLE); hrtimer_start(&t->timer, t->timer.expires, mode); + if (!hrtimer_active(&t->timer)) + t->task = NULL; if (likely(t->task)) schedule(); -- Guillaume -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/