lkml.org 
[lkml]   [2008]   [May]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: sysbench+mysql(oltp, readonly) 30% regression with 2.6.26-rc1

    * Ingo Molnar <mingo@elte.hu> wrote:

    > - down(&kernel_sem);
    > + if (panic_timeout) {
    > + while (down_trylock(&kernel_sem))
    > + cpu_relax();

    updated one below - this will work fine in the !panic_timeout case too
    ;-)

    Ingo

    Index: linux/lib/kernel_lock.c
    ===================================================================
    --- linux.orig/lib/kernel_lock.c
    +++ linux/lib/kernel_lock.c
    @@ -46,7 +46,12 @@ int __lockfunc __reacquire_kernel_lock(v
    task->lock_depth = -1;
    preempt_enable_no_resched();

    - down(&kernel_sem);
    + if (panic_timeout) {
    + while (down_trylock(&kernel_sem))
    + cpu_relax();
    + } else {
    + down(&kernel_sem);
    + }

    preempt_disable();
    task->lock_depth = saved_lock_depth;
    @@ -67,11 +72,17 @@ void __lockfunc lock_kernel(void)
    struct task_struct *task = current;
    int depth = task->lock_depth + 1;

    - if (likely(!depth))
    + if (likely(!depth)) {
    /*
    * No recursion worries - we set up lock_depth _after_
    */
    - down(&kernel_sem);
    + if (panic_timeout) {
    + while (down_trylock(&kernel_sem))
    + cpu_relax();
    + } else {
    + down(&kernel_sem);
    + }
    + }

    task->lock_depth = depth;
    }

    \
     
     \ /
      Last update: 2008-05-08 11:29    [W:0.023 / U:154.424 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site