diff options
author | Chuck Ebbert <76306.1226@compuserve.com> | 2006-09-29 01:59:14 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-29 09:18:06 -0700 |
commit | c22f008ba226e2ff25ee1a56abd9c5fd355828fc (patch) | |
tree | ffa01da1cf0dec73de897889a1aa5f354f521df1 /lib/spinlock_debug.c | |
parent | 92a0f861fe1790dad55ea249169d94f2dc88d696 (diff) | |
download | op-kernel-dev-c22f008ba226e2ff25ee1a56abd9c5fd355828fc.zip op-kernel-dev-c22f008ba226e2ff25ee1a56abd9c5fd355828fc.tar.gz |
[PATCH] spinlock_debug: don't recompute (jiffies_per_loop * HZ) in spinloop
In spinlock_debug.c, the spinloops call __delay() on every iteration.
Because that is an external function, (jiffies_per_loop * HZ), the loop's
iteration limit, gets recomputed every time. Caching it explicitly
prevents that.
Signed-off-by: Chuck Ebbert <76306.1226@compuserve.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'lib/spinlock_debug.c')
-rw-r--r-- | lib/spinlock_debug.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/spinlock_debug.c b/lib/spinlock_debug.c index 58c577d..dafaf1d 100644 --- a/lib/spinlock_debug.c +++ b/lib/spinlock_debug.c @@ -99,11 +99,12 @@ static inline void debug_spin_unlock(spinlock_t *lock) static void __spin_lock_debug(spinlock_t *lock) { - int print_once = 1; u64 i; + u64 loops = loops_per_jiffy * HZ; + int print_once = 1; for (;;) { - for (i = 0; i < loops_per_jiffy * HZ; i++) { + for (i = 0; i < loops; i++) { if (__raw_spin_trylock(&lock->raw_lock)) return; __delay(1); @@ -165,11 +166,12 @@ static void rwlock_bug(rwlock_t *lock, const char *msg) #if 0 /* __write_lock_debug() can lock up - maybe this can too? */ static void __read_lock_debug(rwlock_t *lock) { - int print_once = 1; u64 i; + u64 loops = loops_per_jiffy * HZ; + int print_once = 1; for (;;) { - for (i = 0; i < loops_per_jiffy * HZ; i++) { + for (i = 0; i < loops; i++) { if (__raw_read_trylock(&lock->raw_lock)) return; __delay(1); @@ -239,11 +241,12 @@ static inline void debug_write_unlock(rwlock_t *lock) #if 0 /* This can cause lockups */ static void __write_lock_debug(rwlock_t *lock) { - int print_once = 1; u64 i; + u64 loops = loops_per_jiffy * HZ; + int print_once = 1; for (;;) { - for (i = 0; i < loops_per_jiffy * HZ; i++) { + for (i = 0; i < loops; i++) { if (__raw_write_trylock(&lock->raw_lock)) return; __delay(1); |