From d7aa3637f48918f1dd33ee96f025a920efa9152f Mon Sep 17 00:00:00 2001 From: Peter Zijlstra Date: Fri, 25 Jan 2008 21:08:32 +0100 Subject: [PATCH] --- yaml --- r: 76185 b: refs/heads/master c: 37bb6cb4097e29ffee970065b74499cbf10603a3 h: refs/heads/master i: 76183: b3e691c064ab7032ba23c803096aa12684b36b7d v: v3 --- [refs] | 2 +- trunk/kernel/hrtimer.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 15213c52f4f6..c228fee69440 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d3d74453c34f8fd87674a8cf5b8a327c68f22e99 +refs/heads/master: 37bb6cb4097e29ffee970065b74499cbf10603a3 diff --git a/trunk/kernel/hrtimer.c b/trunk/kernel/hrtimer.c index 061ae28a36a0..bd5d6b5060bc 100644 --- a/trunk/kernel/hrtimer.c +++ b/trunk/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();