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    [from the cache]
©2003-2011 Jasper Spaans