lkml.org 
[lkml]   [2009]   [Mar]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 01/11] sched: remove extra call overhead for schedule()
    Lai Jiangshan's patch reminded me that I promised Nick to remove that
    extra call overhead in schedule().

    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    ---
    kernel/mutex.c | 4 +++-
    kernel/sched.c | 12 ++++--------
    2 files changed, 7 insertions(+), 9 deletions(-)

    Index: linux-2.6/kernel/mutex.c
    ===================================================================
    --- linux-2.6.orig/kernel/mutex.c
    +++ linux-2.6/kernel/mutex.c
    @@ -248,7 +248,9 @@ __mutex_lock_common(struct mutex *lock,

    /* didnt get the lock, go to sleep: */
    spin_unlock_mutex(&lock->wait_lock, flags);
    - __schedule();
    + preempt_enable_no_resched();
    + schedule();
    + preempt_disable();
    spin_lock_mutex(&lock->wait_lock, flags);
    }

    Index: linux-2.6/kernel/sched.c
    ===================================================================
    --- linux-2.6.orig/kernel/sched.c
    +++ linux-2.6/kernel/sched.c
    @@ -4763,13 +4763,15 @@ pick_next_task(struct rq *rq)
    /*
    * schedule() is the main scheduler function.
    */
    -asmlinkage void __sched __schedule(void)
    +asmlinkage void __sched schedule(void)
    {
    struct task_struct *prev, *next;
    unsigned long *switch_count;
    struct rq *rq;
    int cpu;

    +need_resched:
    + preempt_disable();
    cpu = smp_processor_id();
    rq = cpu_rq(cpu);
    rcu_qsctr_inc(cpu);
    @@ -4827,15 +4829,9 @@ need_resched_nonpreemptible:

    if (unlikely(reacquire_kernel_lock(current) < 0))
    goto need_resched_nonpreemptible;
    -}

    -asmlinkage void __sched schedule(void)
    -{
    -need_resched:
    - preempt_disable();
    - __schedule();
    preempt_enable_no_resched();
    - if (unlikely(test_thread_flag(TIF_NEED_RESCHED)))
    + if (need_resched())
    goto need_resched;
    }
    EXPORT_SYMBOL(schedule);
    --



    \
     
     \ /
      Last update: 2009-03-13 12:27    [W:4.746 / U:0.788 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site