lkml.org 
[lkml]   [2011]   [Oct]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[GIT PULL] timer fix

    Linus,

    Please pull the latest timers-urgent-for-linus git tree from:

    git://tesla.tglx.de/git/linux-2.6-tip.git timers-urgent-for-linus

    Thanks,

    Ingo

    ------------------>
    Peter Zijlstra (1):
    cputimer: Cure lock inversion


    kernel/posix-cpu-timers.c | 7 ++++---
    1 files changed, 4 insertions(+), 3 deletions(-)

    diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c
    index c8008dd..640ded8 100644
    --- a/kernel/posix-cpu-timers.c
    +++ b/kernel/posix-cpu-timers.c
    @@ -274,9 +274,7 @@ void thread_group_cputimer(struct task_struct *tsk, struct task_cputime *times)
    struct task_cputime sum;
    unsigned long flags;

    - spin_lock_irqsave(&cputimer->lock, flags);
    if (!cputimer->running) {
    - cputimer->running = 1;
    /*
    * The POSIX timer interface allows for absolute time expiry
    * values through the TIMER_ABSTIME flag, therefore we have
    @@ -284,8 +282,11 @@ void thread_group_cputimer(struct task_struct *tsk, struct task_cputime *times)
    * it.
    */
    thread_group_cputime(tsk, &sum);
    + spin_lock_irqsave(&cputimer->lock, flags);
    + cputimer->running = 1;
    update_gt_cputime(&cputimer->cputime, &sum);
    - }
    + } else
    + spin_lock_irqsave(&cputimer->lock, flags);
    *times = cputimer->cputime;
    spin_unlock_irqrestore(&cputimer->lock, flags);
    }

    \
     
     \ /
      Last update: 2011-10-18 20:19    [W:0.022 / U:90.032 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site