lkml.org 
[lkml]   [2006]   [Dec]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[patch] high-res timers: core, do itimer rearming in process context, fix2
    From
    Date
    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/

    \
     
     \ /
      Last update: 2006-12-21 08:15    [W:3.723 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site