lkml.org 
[lkml]   [2008]   [Jan]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 05/11] hrtimer: unlock hrtimer_wakeup
    hrtimer_wakeup creates a

    base->lock
    rq->lock

    lock dependancy. Avoid this by switching to HRTIMER_CB_IRQSAFE_NO_SOFTIRQ
    which doesn't hold base->lock.

    This fully untangles hrtimer locks from the scheduler locks, and allows
    hrtimer usage in the scheduler proper.

    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    ---
    kernel/hrtimer.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    Index: linux-2.6/kernel/hrtimer.c
    ===================================================================
    --- linux-2.6.orig/kernel/hrtimer.c
    +++ linux-2.6/kernel/hrtimer.c
    @@ -1296,7 +1296,7 @@ void hrtimer_init_sleeper(struct hrtimer
    sl->timer.function = hrtimer_wakeup;
    sl->task = task;
    #ifdef CONFIG_HIGH_RES_TIMERS
    - sl->timer.cb_mode = HRTIMER_CB_IRQSAFE_NO_RESTART;
    + sl->timer.cb_mode = HRTIMER_CB_IRQSAFE_NO_SOFTIRQ;
    #endif
    }

    @@ -1307,6 +1307,8 @@ static int __sched do_nanosleep(struct h
    do {
    set_current_state(TASK_INTERRUPTIBLE);
    hrtimer_start(&t->timer, t->timer.expires, mode);
    + if (!hrtimer_active(&t->timer))
    + t->task = NULL;

    if (likely(t->task))
    schedule();
    --



    \
     
     \ /
      Last update: 2008-01-06 17:29    [W:0.019 / U:2.028 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site