Messages in this thread Patch in this message | | | Subject | [patch] high-res timers: core, do itimer rearming in process context, fix2 | From | Thomas Gleixner <> | Date | Thu, 21 Dec 2006 08:15:25 +0100 |
| |
Subject: [patch] high-res timers: core, do itimer rearming in process context, fix2 From: Thomas Gleixner <tglx@linutronix.de>
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 <tglx@linutronix.de>
--- 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 majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |