lkml.org 
[lkml]   [2008]   [Oct]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subjectsched: only update rq->clock while holding rq->lock
    From
    Date
    Vatsa,

    you said someone would send a patch to this effect, I don't want to
    steal credit, but I think this patch is better posted sooner rather than
    later.

    ---

    Subject: sched: only update rq->clock while holding rq->lock
    From: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Date: Wed Oct 15 20:30:26 CEST 2008

    Vatsa noticed rq->clock going funny and tracked it down to an update_rq_clock()
    outside a rq->lock section.

    This is a problem because things like double_rq_lock() update the rq->clock
    value for both rqs. Therefore disabling interrupts isn't strong enough.

    Reported-by: Srivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>
    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    ---
    kernel/sched.c | 6 +-----
    1 file changed, 1 insertion(+), 5 deletions(-)

    Index: linux-2.6/kernel/sched.c
    ===================================================================
    --- linux-2.6.orig/kernel/sched.c
    +++ linux-2.6/kernel/sched.c
    @@ -4448,12 +4448,8 @@ need_resched_nonpreemptible:
    if (sched_feat(HRTICK))
    hrtick_clear(rq);

    - /*
    - * Do the rq-clock update outside the rq lock:
    - */
    - local_irq_disable();
    + spin_lock_irq(&rq->lock);
    update_rq_clock(rq);
    - spin_lock(&rq->lock);
    clear_tsk_need_resched(prev);

    if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {



    \
     
     \ /
      Last update: 2008-10-15 20:39    [W:0.028 / U:62.796 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site