[PATCH] spinlock_debug: don't recompute (jiffies_per_loop * HZ) in spinloop
authorChuck Ebbert <76306.1226@compuserve.com>
Fri, 29 Sep 2006 08:59:14 +0000 (01:59 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 29 Sep 2006 16:18:06 +0000 (09:18 -0700)
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>
lib/spinlock_debug.c

index 58c577dd82e5240e551d151b73ea31c55de8c309..dafaf1de2491aedb0a323aed4951e5084e58e18c 100644 (file)
@@ -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);