public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC] replace assorted ASSERT()s by something officially  sanctioned
@ 2004-06-23 18:49 Dean Nelson
  2004-06-23 19:02 ` Michael Buesch
  2004-06-23 19:46 ` Jeff Garzik
  0 siblings, 2 replies; 4+ messages in thread
From: Dean Nelson @ 2004-06-23 18:49 UTC (permalink / raw)
  To: linux-kernel

It doesn't appear that an officially 'sanctioned' version of ASSERT() or
an ASSERT()-like macro exists.

And by the proliferation of its use in the linux 2.6 kernel (I saw over
3000 references to it), it would seem that BUG_ON() does not satisfy all
of the requirements of the community.

One problem with BUG_ON() is that it is always enabled. And even though
the compiler does a good job of minimizing the impact of the conditional
expression, there are times when the conditional check requires the
accessing of a cacheline that would not get accessed had the BUG_ON() not
been enabled. And if that cacheline were one that is hotly contended for,
one's performance can be adversely affected.

For debugging purposes it would be nice to have a version of BUG_ON() that
was only enabled if DEBUG was set. This is what appears to be behind the use
of the ASSERT()-like macros.

As an example of what I have in mind, I've included the following quilt
patch.

Thanks,
Dean


Index: linux/include/asm-i386/bug.h
===================================================================
--- linux.orig/include/asm-i386/bug.h
+++ linux/include/asm-i386/bug.h
@@ -21,6 +21,12 @@
 
 #define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0)
 
+#ifdef DEBUG
+#define DBUG_ON(condition)	BUG_ON(condition)
+#else
+#define DBUG_ON(condition)
+#endif
+
 #define PAGE_BUG(page) do { \
 	BUG(); \
 } while (0)

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

end of thread, other threads:[~2004-06-28 17:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-06-23 18:49 [RFC] replace assorted ASSERT()s by something officially sanctioned Dean Nelson
2004-06-23 19:02 ` Michael Buesch
2004-06-23 19:46 ` Jeff Garzik
2004-06-28 17:27   ` Dean Nelson

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