public inbox for linux-arch@vger.kernel.org
 help / color / mirror / Atom feed
* RE: [patch 1/1] Fix spinlock debugging delays to not time out too early
@ 2006-02-07 18:20 Luck, Tony
  2006-02-07 18:29 ` Andi Kleen
  0 siblings, 1 reply; 6+ messages in thread
From: Luck, Tony @ 2006-02-07 18:20 UTC (permalink / raw)
  To: akpm, linux-arch; +Cc: mingo, ak

> The fix is to include a __delay(1) call in the loop, to correctly approximate
> the intended delay timeout of 1 second.  The code assumes that every
> architecture implements __delay(1) to last around 1/(loops_per_jiffy*HZ)
> seconds.

But we calculate loops_per_jiffy based on somewhat larger vales passed
to __delay() ... where the function call overhead is amortized away.

I'd expect that __delay(1) would last quite a bit longer than
1/(loops_per_jiffy * HZ) ... so we'll wait a lot more than a
second.

-Tony

^ permalink raw reply	[flat|nested] 6+ messages in thread
* [patch 1/1] Fix spinlock debugging delays to not time out too early
@ 2006-02-07 17:41 akpm
  0 siblings, 0 replies; 6+ messages in thread
From: akpm @ 2006-02-07 17:41 UTC (permalink / raw)
  To: linux-arch; +Cc: akpm, mingo, ak


From: Ingo Molnar <mingo@elte.hu>

The spinlock-debug wait-loop was using loops_per_jiffy to detect too long
spinlock waits - but on fast CPUs this led to a way too fast timeout and false
messages.

The fix is to include a __delay(1) call in the loop, to correctly approximate
the intended delay timeout of 1 second.  The code assumes that every
architecture implements __delay(1) to last around 1/(loops_per_jiffy*HZ)
seconds.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Cc: Andi Kleen <ak@muc.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 lib/spinlock_debug.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff -puN lib/spinlock_debug.c~fix-spinlock-debugging-delays-to-not-time-out-too-early lib/spinlock_debug.c
--- devel/lib/spinlock_debug.c~fix-spinlock-debugging-delays-to-not-time-out-too-early	2006-02-07 09:40:57.000000000 -0800
+++ devel-akpm/lib/spinlock_debug.c	2006-02-07 09:40:57.000000000 -0800
@@ -72,9 +72,9 @@ static void __spin_lock_debug(spinlock_t
 
 	for (;;) {
 		for (i = 0; i < loops_per_jiffy * HZ; i++) {
-			cpu_relax();
 			if (__raw_spin_trylock(&lock->raw_lock))
 				return;
+			__delay(1);
 		}
 		/* lockup suspected: */
 		if (print_once) {
@@ -144,9 +144,9 @@ static void __read_lock_debug(rwlock_t *
 
 	for (;;) {
 		for (i = 0; i < loops_per_jiffy * HZ; i++) {
-			cpu_relax();
 			if (__raw_read_trylock(&lock->raw_lock))
 				return;
+			__delay(1);
 		}
 		/* lockup suspected: */
 		if (print_once) {
@@ -217,9 +217,9 @@ static void __write_lock_debug(rwlock_t 
 
 	for (;;) {
 		for (i = 0; i < loops_per_jiffy * HZ; i++) {
-			cpu_relax();
 			if (__raw_write_trylock(&lock->raw_lock))
 				return;
+			__delay(1);
 		}
 		/* lockup suspected: */
 		if (print_once) {
_

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2006-02-07 19:38 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-07 18:20 [patch 1/1] Fix spinlock debugging delays to not time out too early Luck, Tony
2006-02-07 18:29 ` Andi Kleen
2006-02-07 18:44   ` Luck, Tony
2006-02-07 19:14     ` Ingo Molnar
2006-02-07 19:37       ` Andi Kleen
  -- strict thread matches above, loose matches on Subject: below --
2006-02-07 17:41 akpm

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox