Re: 2.5.73 -- Uninitialised timer! (i386)

Mikael Pettersson (mikpe@csd.uu.se)
Tue, 24 Jun 2003 23:35:07 +0200


Pete Clements writes:
> Quoting Andrew Morton
> >
> > Well it beats me. That timer is clearly initialised OK.
> >
> > What compiler version are you using? Can you try
> > a different one>?
>
> Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
> gcc version 2.95.4 20011002 (Debian prerelease)
>
> Only compiler currently installed. Have four systems (3 single
> processor, 1 dual) all running Debian--woody with same versions.
> On the UP systems, will see several of these traces during boot.
> After that, it is very seldom (0 to 3 in 12 hours). Have seen none
> on the SMP system. Recompiled one of the UP systems with SMP
> enabled and no longer saw the trace during boot and post. Have
> not seen this prior to 2.5.73.

Apply the patch below (which I posted to LKML yesterday btw).
2.5.73 incorrectly removed the workaround needed to prevent
gcc-2.95.x from miscompiling spinlocks on UP (they become
empty structs, and gcc-2.95.x has problems with those).

/Mikael

--- linux-2.5.73/include/linux/spinlock.h.~1~ 2003-06-23 13:07:39.000000000 +0200
+++ linux-2.5.73/include/linux/spinlock.h 2003-06-23 22:58:29.000000000 +0200
@@ -146,8 +146,13 @@
/*
* gcc versions before ~2.95 have a nasty bug with empty initializers.
*/
-typedef struct { } spinlock_t;
-#define SPIN_LOCK_UNLOCKED (spinlock_t) { }
+#if (__GNUC__ > 2)
+ typedef struct { } spinlock_t;
+ #define SPIN_LOCK_UNLOCKED (spinlock_t) { }
+#else
+ typedef struct { int gcc_is_buggy; } spinlock_t;
+ #define SPIN_LOCK_UNLOCKED (spinlock_t) { 0 }
+#endif

/*
* If CONFIG_SMP is unset, declare the _raw_* definitions as nops
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/