Subject: [patch] high-res timers: core, do itimer rearming in process context, fix2 From: Thomas Gleixner <[EMAIL PROTECTED]>
The rearming code in signal.c has to read the time and can not rely on the timer->base->softirq time anymore, as it is not longer running in softirq context. Ensure, that the it_real_incr variable in the shared signal struct is set to zero, when setitimer disables the itimer. Otherwise it could happen that an inactive itimer gets rearmed by a SIGALRM. Signed-off-by: Thomas Gleixner <[EMAIL PROTECTED]> --- kernel/signal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: 2.6.19-git19/kernel/signal.c =================================================================== --- 2.6.19-git19.orig/kernel/signal.c +++ 2.6.19-git19/kernel/signal.c @@ -477,7 +477,7 @@ int dequeue_signal(struct task_struct *t if (!hrtimer_is_queued(tmr) && tsk->signal->it_real_incr.tv64 != 0) { - hrtimer_forward(tmr, hrtimer_cb_get_time(tmr), + hrtimer_forward(tmr, tmr->base->get_time(), tsk->signal->it_real_incr); hrtimer_restart(tmr); } Index: 2.6.19-git19/kernel/itimer.c =================================================================== --- 2.6.19-git19.orig/kernel/itimer.c +++ 2.6.19-git19/kernel/itimer.c @@ -226,11 +226,14 @@ again: spin_unlock_irq(&tsk->sighand->siglock); goto again; } - tsk->signal->it_real_incr = - timeval_to_ktime(value->it_interval); expires = timeval_to_ktime(value->it_value); - if (expires.tv64 != 0) + if (expires.tv64 != 0) { + tsk->signal->it_real_incr = + timeval_to_ktime(value->it_interval); hrtimer_start(timer, expires, HRTIMER_MODE_REL); + } else + tsk->signal->it_real_incr.tv64 = 0; + spin_unlock_irq(&tsk->sighand->siglock); break; case ITIMER_VIRTUAL: - 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/