public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jan-Benedict Glaw <jbglaw@lug-owl.de>
To: linux-kernel@vger.kernel.org
Subject: Re: [PATCH][RFC] Spinlock-timeout
Date: Sat, 5 Jun 2004 22:51:17 +0200	[thread overview]
Message-ID: <20040605205117.GD20632@lug-owl.de> (raw)
In-Reply-To: <1086467486.20906.59.camel@dhcp-client215.upt.austin.ibm.com>

[-- Attachment #1: Type: text/plain, Size: 2581 bytes --]

On Sat, 2004-06-05 15:31:26 -0500, Jake Moilanen <moilanen@austin.ibm.com>
wrote in message <1086467486.20906.59.camel@dhcp-client215.upt.austin.ibm.com>:
> Here's a patch that will BUG() when a spinlock is held for longer then X
> seconds.  It is useful for catching deadlocks since not all archs have a
> NMI watchdog.  

I like the idea. However, I don't like touching all arch's Kconfig
files. I think it's better to either put this into ./lib/Kconfig (well,
doesn't really fit there), ot (even better:) put it into the Debug
Kconfig file.

> diff -Nru a/include/linux/spinlock.h b/include/linux/spinlock.h
> --- a/include/linux/spinlock.h	Sat Jun  5 14:25:51 2004
> +++ b/include/linux/spinlock.h	Sat Jun  5 14:25:51 2004
> @@ -38,6 +38,16 @@
>  #ifdef CONFIG_SMP
>  #include <asm/spinlock.h>
>  
> +#if defined(CONFIG_SPINLOCK_TIMEOUT)
> +
> +#include <asm/param.h>
> +
> +#define SPINLOCK_TIMEOUT CONFIG_SPINLOCK_TIMEOUT_TIME
> +extern unsigned long volatile jiffies;
> +
> +#endif /* CONFIG_SPINLOCK_TIMEOUT */
> +
> +
>  #else
>  
>  #define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)

I'd say just include <linux/jiffies.h> and drop the whole #ifdef/#endif
block.

> @@ -218,11 +228,27 @@
>  } while (0)
>  
>  #else
> +#if defined(CONFIG_SPINLOCK_TIMEOUT)
> +
> +static inline void spin_lock(spinlock_t * lock) {
> +	unsigned long jiffy_timeout = jiffies + (SPINLOCK_TIMEOUT * HZ); 
> +
> +	preempt_disable(); 
> +	do { 
> +		if (jiffies >= jiffy_timeout) 
> +		        BUG();
> +	} while (!_raw_spin_trylock(lock)); 
> +}
> +
> +#else /* CONFIG_SPINLOCK_TIMEOUT */
> +
>  #define spin_lock(lock)	\
>  do { \
>  	preempt_disable(); \
>  	_raw_spin_lock(lock); \
>  } while(0)
> +
> +#endif /* CONFIG_SPINLOCK_TIMEOUT */
>  
>  #define write_lock(lock) \
>  do { \

Also, printing out ->module, ->owner and ->oline might help additionally
to just BUG()ing. So you see the (former) owner of the lock.

> @@ -3967,6 +3971,10 @@
>  		while (spin_is_locked(lock))
>  			cpu_relax();
>  		preempt_disable();
> +#if defined(CONFIG_SPINLOCK_TIMEOUT)
> +		if (jiffies > = jiffy_timeout)
> +			BUG();
> +#endif
>  	} while (!_raw_spin_trylock(lock));
>  }
>  

Dito.

MfG, JBG

-- 
   Jan-Benedict Glaw       jbglaw@lug-owl.de    . +49-172-7608481
   "Eine Freie Meinung in  einem Freien Kopf    | Gegen Zensur | Gegen Krieg
    fuer einen Freien Staat voll Freier Bürger" | im Internet! |   im Irak!
   ret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA));

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

  reply	other threads:[~2004-06-05 20:51 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-05 20:31 [PATCH][RFC] Spinlock-timeout Jake Moilanen
2004-06-05 20:51 ` Jan-Benedict Glaw [this message]
2004-06-10 18:44   ` Jake Moilanen
2004-06-10 19:24     ` Jan-Benedict Glaw
2004-06-10 21:00       ` Randy.Dunlap
2004-06-06 10:13 ` Paul Mackerras
2004-06-06 22:23 ` Benjamin Herrenschmidt
2004-06-11 14:05   ` Jake Moilanen
2004-06-11 15:49     ` Benjamin Herrenschmidt
2004-06-11 21:19       ` moilanen
2004-06-11 22:08         ` Benjamin Herrenschmidt
2004-06-14 13:12           ` Jake Moilanen
2004-06-11 21:22       ` moilanen
2004-06-11 22:09         ` Benjamin Herrenschmidt
2004-06-14 13:13           ` Jake Moilanen
2004-06-11 14:08   ` Jake Moilanen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040605205117.GD20632@lug-owl.de \
    --to=jbglaw@lug-owl.de \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox