From: Manfred Spraul <manfred@colorfullife.com>
To: Jens Axboe <axboe@suse.de>
Cc: linux-kernel@vger.kernel.org, Terje Eggestad <terje.eggestad@scali.com>
Subject: Re: any chance of 2.6.0-test*?
Date: Mon, 13 Jan 2003 21:37:39 +0100 [thread overview]
Message-ID: <3E232393.1010702@colorfullife.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 784 bytes --]
Jens wrote:
>On Mon, Jan 13 2003, Terje Eggestad wrote:
>> > > I have the console on a serial port, and a terminal server. With kdb,
>> > > you can enter the kernel i kdb even when deadlocked.
>> >
>> > Even if spinning with interrupt disabled?
>>
>> Haven't painted myself into that corner yet. Doubt it, very much.
>
>These are the nasty hangs, total lockup and no info at all if it wasn't
>for the nmi watchdog triggering. That alone is reason enough for me :-)
>
>
One alternative are the UP debug spinlocks: They detect double-locks.
2.4 contains macros, but I'm not sure if they work.
The macros were removed in 2.5, but if anyone is interested, I've
attached my debug spinlock patch: for double locks, it even prints the
filename/lineno of the offender.
--
Manfred
[-- Attachment #2: patch-debug-sp --]
[-- Type: text/plain, Size: 4189 bytes --]
--- 2.5/include/linux/spinlock.h 2002-12-14 10:06:57.000000000 +0100
+++ build-2.5/include/linux/spinlock.h 2002-12-21 14:36:42.000000000 +0100
@@ -37,30 +37,120 @@
#ifdef CONFIG_SMP
#include <asm/spinlock.h>
-/*
- * !CONFIG_SMP and spin_lock_init not previously defined
- * (e.g. by including include/asm/spinlock.h)
- */
-#elif !defined(spin_lock_init)
+#else
-#ifndef CONFIG_PREEMPT
+#if !defined(CONFIG_PREEMPT) && !defined(CONFIG_DEBUG_SPINLOCK)
# define atomic_dec_and_lock(atomic,lock) atomic_dec_and_test(atomic)
# define ATOMIC_DEC_AND_LOCK
#endif
+#ifdef CONFIG_DEBUG_SPINLOCK
+
+#define SPINLOCK_MAGIC 0x1D244B3C
+typedef struct {
+ unsigned long magic;
+ volatile unsigned long lock;
+ volatile unsigned int babble;
+ const char *module;
+ char *owner;
+ int oline;
+} spinlock_t;
+#define SPIN_LOCK_UNLOCKED (spinlock_t) { SPINLOCK_MAGIC, 0, 10, __FILE__ , NULL, 0}
+
+#define spin_lock_init(x) \
+ do { \
+ (x)->magic = SPINLOCK_MAGIC; \
+ (x)->lock = 0; \
+ (x)->babble = 5; \
+ (x)->module = __FILE__; \
+ (x)->owner = NULL; \
+ (x)->oline = 0; \
+ } while (0)
+
+#define CHECK_LOCK(x) \
+ do { \
+ if ((x)->magic != SPINLOCK_MAGIC) { \
+ printk(KERN_ERR "%s:%d: spin_is_locked on uninitialized spinlock %p.\n", \
+ __FILE__, __LINE__, (x)); \
+ } \
+ } while(0)
+
+#define _raw_spin_lock(x) \
+ do { \
+ CHECK_LOCK(x); \
+ if ((x)->lock&&(x)->babble) { \
+ printk("%s:%d: spin_lock(%s:%p) already locked by %s/%d\n", \
+ __FILE__,__LINE__, (x)->module, \
+ (x), (x)->owner, (x)->oline); \
+ (x)->babble--; \
+ } \
+ (x)->lock = 1; \
+ (x)->owner = __FILE__; \
+ (x)->oline = __LINE__; \
+ } while (0)
+
+/* without debugging, spin_is_locked on UP always says
+ * FALSE. --> printk if already locked. */
+#define spin_is_locked(x) \
+ ({ \
+ CHECK_LOCK(x); \
+ if ((x)->lock&&(x)->babble) { \
+ printk("%s:%d: spin_is_locked(%s:%p) already locked by %s/%d\n", \
+ __FILE__,__LINE__, (x)->module, \
+ (x), (x)->owner, (x)->oline); \
+ (x)->babble--; \
+ } \
+ 0; \
+ })
+
+/* without debugging, spin_trylock on UP always says
+ * TRUE. --> printk if already locked. */
+#define _raw_spin_trylock(x) \
+ ({ \
+ CHECK_LOCK(x); \
+ if ((x)->lock&&(x)->babble) { \
+ printk("%s:%d: spin_trylock(%s:%p) already locked by %s/%d\n", \
+ __FILE__,__LINE__, (x)->module, \
+ (x), (x)->owner, (x)->oline); \
+ (x)->babble--; \
+ } \
+ (x)->lock = 1; \
+ (x)->owner = __FILE__; \
+ (x)->oline = __LINE__; \
+ 1; \
+ })
+
+#define spin_unlock_wait(x) \
+ do { \
+ CHECK_LOCK(x); \
+ if ((x)->lock&&(x)->babble) { \
+ printk("%s:%d: spin_unlock_wait(%s:%p) owned by %s/%d\n", \
+ __FILE__,__LINE__, (x)->module, (x), \
+ (x)->owner, (x)->oline); \
+ (x)->babble--; \
+ }\
+ } while (0)
+
+#define _raw_spin_unlock(x) \
+ do { \
+ CHECK_LOCK(x); \
+ if (!(x)->lock&&(x)->babble) { \
+ printk("%s:%d: spin_unlock(%s:%p) not locked\n", \
+ __FILE__,__LINE__, (x)->module, (x));\
+ (x)->babble--; \
+ } \
+ (x)->lock = 0; \
+ } while (0)
+#else
/*
* gcc versions before ~2.95 have a nasty bug with empty initializers.
*/
#if (__GNUC__ > 2)
typedef struct { } spinlock_t;
- typedef struct { } rwlock_t;
#define SPIN_LOCK_UNLOCKED (spinlock_t) { }
- #define RW_LOCK_UNLOCKED (rwlock_t) { }
#else
typedef struct { int gcc_is_buggy; } spinlock_t;
- typedef struct { int gcc_is_buggy; } rwlock_t;
#define SPIN_LOCK_UNLOCKED (spinlock_t) { 0 }
- #define RW_LOCK_UNLOCKED (rwlock_t) { 0 }
#endif
/*
@@ -72,6 +162,18 @@
#define _raw_spin_trylock(lock) ((void)(lock), 1)
#define spin_unlock_wait(lock) do { (void)(lock); } while(0)
#define _raw_spin_unlock(lock) do { (void)(lock); } while(0)
+#endif /* CONFIG_DEBUG_SPINLOCK */
+
+/* RW spinlocks: No debug version */
+
+#if (__GNUC__ > 2)
+ typedef struct { } rwlock_t;
+ #define RW_LOCK_UNLOCKED (rwlock_t) { }
+#else
+ typedef struct { int gcc_is_buggy; } rwlock_t;
+ #define RW_LOCK_UNLOCKED (rwlock_t) { 0 }
+#endif
+
#define rwlock_init(lock) do { (void)(lock); } while(0)
#define _raw_read_lock(lock) do { (void)(lock); } while(0)
#define _raw_read_unlock(lock) do { (void)(lock); } while(0)
next reply other threads:[~2003-01-13 20:31 UTC|newest]
Thread overview: 188+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-01-13 20:37 Manfred Spraul [this message]
[not found] <20030113001006$005c@gated-at.bofh.it>
[not found] ` <20030113005007$4766@gated-at.bofh.it>
[not found] ` <20030113170014$20a1@gated-at.bofh.it>
2003-01-18 10:21 ` any chance of 2.6.0-test*? Kai Henningsen
[not found] <20030112193012$71b2@gated-at.bofh.it>
[not found] ` <20030113020015$6883@gated-at.bofh.it>
[not found] ` <20030113023015$66a6@gated-at.bofh.it>
[not found] ` <20030113030011$6563@gated-at.bofh.it>
[not found] ` <20030113035007$451e@gated-at.bofh.it>
2003-01-14 20:18 ` Kai Henningsen
[not found] <20030112205008$7a5d@gated-at.bofh.it>
[not found] ` <20030113112009$52fd@gated-at.bofh.it>
[not found] ` <20030113144017$68de@gated-at.bofh.it>
2003-01-14 20:01 ` Kai Henningsen
[not found] <20030112201009$1534@gated-at.bofh.it>
[not found] ` <20030112204005$7287@gated-at.bofh.it>
2003-01-14 19:53 ` Kai Henningsen
2003-01-15 15:07 ` Scott Robert Ladd
2003-01-15 15:18 ` Marcelo Pacheco
2003-01-18 10:12 ` Kai Henningsen
2003-01-15 19:44 ` Werner Almesberger
-- strict thread matches above, loose matches on Subject: below --
2003-01-13 22:37 Albert D. Cahalan
[not found] <3C6BEE8B5E1BAC42905A93F13004E8AB017DE60F@mailse01.axis.se>
2003-01-12 20:58 ` Rob Wilkens
2003-01-12 18:02 David Truog
[not found] <20030110165441$1a8a@gated-at.bofh.it>
[not found] ` <20030110165505$38d9@gated-at.bofh.it>
2003-01-11 12:27 ` Andi Kleen
2003-01-11 13:01 ` Russell King
2003-01-11 13:13 ` Andi Kleen
2003-01-11 14:39 ` Alan Cox
2003-01-11 14:06 ` Andi Kleen
2003-01-11 15:31 ` Alan Cox
2003-01-11 15:25 ` Andi Kleen
2003-01-11 19:18 ` Alan Cox
2003-01-13 3:33 ` Paul Mackerras
2003-01-13 14:59 ` Alan Cox
2003-01-13 18:36 ` Benjamin Herrenschmidt
2003-01-19 16:05 ` Pavel Machek
[not found] <20030110144325.T26554@parcelfarce.linux.theplanet.co.uk>
[not found] ` <20030110.130023.08256524.davem@redhat.com>
2003-01-10 21:48 ` Matthew Wilcox
2003-01-10 16:39 Shawn Starr
2003-01-10 17:00 ` Dave Jones
2003-01-11 20:10 ` Horst von Brand
2003-01-10 16:10 William Lee Irwin III
2003-01-10 16:28 ` Dave Jones
2003-01-10 16:41 ` Zwane Mwaikambo
2003-01-10 17:08 ` Dave Jones
2003-01-10 17:19 ` Alan Cox
2003-01-10 16:40 ` Jeff Garzik
2003-01-10 17:06 ` Dave Jones
2003-01-10 17:25 ` Jeff Garzik
2003-01-10 17:29 ` Linus Torvalds
2003-01-10 18:47 ` J.A. Magallon
2003-01-10 19:37 ` Matthew D. Pitts
2003-01-10 19:51 ` Jeff Garzik
2003-01-14 1:39 ` James H. Cloos Jr.
2003-01-10 18:16 ` Alan Cox
2003-01-10 17:37 ` Jochen Friedrich
2003-01-10 17:38 ` Linus Torvalds
2003-01-12 9:27 ` Greg KH
2003-01-12 16:55 ` Alan Cox
2003-01-12 17:05 ` Linus Torvalds
2003-01-12 17:17 ` Christoph Hellwig
2003-01-12 19:15 ` Linus Torvalds
2003-01-12 19:34 ` Rob Wilkens
2003-01-12 19:37 ` Rob Wilkens
2003-01-12 19:53 ` Tomas Szepe
2003-01-12 20:03 ` Rob Wilkens
2003-01-13 15:43 ` Terje Eggestad
2003-01-13 15:49 ` Jens Axboe
2003-01-13 16:25 ` Terje Eggestad
2003-01-13 16:26 ` Jens Axboe
2003-01-13 16:41 ` Terje Eggestad
2003-01-13 16:43 ` Jens Axboe
2003-01-13 17:00 ` Zwane Mwaikambo
2003-01-13 18:48 ` Jens Axboe
2003-01-13 22:14 ` Keith Owens
2003-01-13 22:42 ` John Levon
2003-01-13 22:49 ` Zwane Mwaikambo
2003-01-13 23:32 ` Valdis.Kletnieks
2003-01-13 23:43 ` Zwane Mwaikambo
2003-01-12 20:44 ` Alan Cox
2003-01-12 21:22 ` David Woodhouse
2003-01-12 20:45 ` William Lee Irwin III
2003-01-13 13:14 ` Bernd Schmidt
2003-01-18 13:04 ` Folkert van Heusden
2003-01-12 19:38 ` Linus Torvalds
2003-01-12 19:59 ` Rob Wilkens
2003-01-12 20:18 ` Valdis.Kletnieks
2003-01-12 20:23 ` yodaiken
2003-01-12 20:26 ` Tomas Szepe
2003-01-12 20:32 ` Sean Neakums
2003-01-12 20:51 ` Valdis.Kletnieks
2003-01-13 0:54 ` Randy Dunlap
2003-01-12 20:46 ` Kevin Puetz
2003-01-13 0:48 ` Randy Dunlap
2003-01-18 13:07 ` Folkert van Heusden
2003-01-12 20:20 ` David Ford
2003-01-12 20:22 ` Linus Torvalds
2003-01-12 20:33 ` Robert Love
2003-01-12 20:33 ` Linus Torvalds
2003-01-13 10:54 ` Horst von Brand
2003-01-13 11:09 ` Eric W. Biederman
2003-01-13 14:34 ` Terje Eggestad
2003-01-13 23:23 ` Bob Taylor
2003-01-12 20:48 ` Rob Wilkens
2003-01-12 20:59 ` Dimitrie O. Paun
2003-01-13 11:07 ` Helge Hafting
2003-01-13 3:30 ` yodaiken
2003-01-12 21:29 ` Rik van Riel
2003-01-13 0:03 ` Scott Robert Ladd
2003-01-13 0:38 ` Rob Wilkens
2003-01-13 16:51 ` Emiliano Gabrielli
2003-01-13 0:38 ` Randy Dunlap
2003-01-12 19:41 ` Christoph Hellwig
2003-01-12 19:41 ` Rob Wilkens
2003-01-12 19:58 ` David Ford
2003-01-12 20:07 ` Rob Wilkens
2003-01-12 20:31 ` Oliver Neukum
2003-01-12 20:34 ` David Ford
2003-01-12 20:31 ` Robert Love
2003-01-12 21:02 ` Rob Wilkens
2003-01-12 21:15 ` Matti Aarnio
2003-01-12 21:27 ` Rob Wilkens
2003-01-12 21:40 ` Rik van Riel
2003-01-12 21:44 ` Rob Wilkens
2003-01-12 21:49 ` Aaron Lehmann
2003-01-12 22:07 ` Rob Wilkens
2003-01-12 22:18 ` Aaron Lehmann
2003-01-12 22:34 ` Rob Wilkens
2003-01-12 22:52 ` Aaron Lehmann
2003-01-12 23:11 ` Rob Wilkens
2003-01-12 23:31 ` Oliver Neukum
2003-01-12 23:39 ` Emiliano Gabrielli
2003-01-12 23:46 ` Rob Wilkens
2003-01-12 23:57 ` Emiliano Gabrielli
2003-01-13 0:08 ` Rob Wilkens
2003-01-13 16:02 ` Terje Eggestad
2003-01-12 22:53 ` Sean Neakums
2003-01-12 23:06 ` Oliver Neukum
2003-01-12 23:48 ` Rik van Riel
2003-01-12 21:58 ` Emiliano Gabrielli
2003-01-12 22:12 ` Rob Wilkens
2003-01-12 22:29 ` Olivier Galibert
2003-01-12 23:21 ` Alan Cox
2003-01-12 22:12 ` Oliver Neukum
2003-01-12 22:18 ` Aaron Lehmann
2003-01-12 22:35 ` Rob Wilkens
2003-01-13 8:15 ` Jens Axboe
2003-01-12 21:49 ` David Ford
2003-01-12 21:59 ` Adam Kropelin
2003-01-12 22:21 ` Rob Wilkens
2003-01-12 22:33 ` Tomas Szepe
2003-01-12 22:36 ` Emiliano Gabrielli
2003-01-12 22:38 ` Oliver Neukum
2003-01-12 22:42 ` romieu
2003-01-13 1:06 ` Randy Dunlap
2003-01-13 1:21 ` Rob Wilkens
2003-01-13 1:51 ` Nuno Monteiro
2003-01-13 2:19 ` Rob Wilkens
2003-01-13 2:51 ` Marcelo Pacheco
2003-01-13 3:37 ` Rob Wilkens
2003-01-13 4:53 ` Billy Rose
2003-01-13 3:06 ` Jochen Striepe
2003-01-13 3:40 ` Rob Wilkens
2003-01-13 9:45 ` Matti Aarnio
2003-01-13 3:48 ` Ryan Anderson
2003-01-13 4:37 ` Billy Rose
2003-01-12 22:06 ` Oliver Neukum
2003-01-12 22:22 ` Rob Wilkens
2003-01-12 22:43 ` Oliver Neukum
2003-01-12 22:51 ` Rob Wilkens
2003-01-12 23:00 ` Robert Love
2003-01-12 23:16 ` Rob Wilkens
2003-01-12 23:16 ` Nicolas Pitre
2003-01-12 23:05 ` Emiliano Gabrielli
2003-01-12 23:23 ` Oliver Neukum
2003-01-12 23:45 ` Emiliano Gabrielli
2003-01-12 23:45 ` Emiliano Gabrielli
2003-01-13 20:01 ` Horst von Brand
2003-01-12 23:16 ` Oliver Neukum
2003-01-13 2:00 ` Ryan Anderson
2003-01-13 3:09 ` Rob Wilkens
2003-01-14 2:13 ` Rik van Riel
2003-01-12 22:58 ` Robert Love
2003-01-12 22:28 ` Matti Aarnio
2003-01-13 1:26 ` David Lang
2003-01-13 2:00 ` William Lee Irwin III
2003-01-13 22:02 ` Val Henson
2003-01-13 13:08 ` Dave Jones
2003-01-13 13:40 ` Andrew Walrond
2003-01-13 13:49 ` Oliver Neukum
2003-01-14 6:52 ` Bruce Harada
2003-01-14 7:12 ` Brian Tinsley
2003-01-13 15:23 ` Richard B. Johnson
2003-01-13 6:23 ` Greg KH
2003-01-13 16:35 ` Linus Torvalds
2003-01-13 18:33 ` Alan Cox
2003-01-13 18:01 ` Linus Torvalds
2003-01-13 19:17 ` Andrew McGregor
2003-01-12 17:37 ` Russell King
2003-01-13 1:08 ` Michael Kingsbury
2003-01-13 1:52 ` William Lee Irwin III
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=3E232393.1010702@colorfullife.com \
--to=manfred@colorfullife.com \
--cc=axboe@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=terje.eggestad@scali.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.