fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / include / linux / delay.h
index acb7486..d5f0f01 100644 (file)
@@ -10,6 +10,7 @@
 extern unsigned long loops_per_jiffy;
 
 #include <asm/delay.h>
+#include <linux/hardirq.h>
 
 /*
  * Using udelay() for intervals greater than a few milliseconds can
@@ -25,14 +26,21 @@ extern unsigned long loops_per_jiffy;
 #define MAX_UDELAY_MS  5
 #endif
 
-#ifdef notdef
-#define mdelay(n) (\
-       {unsigned long __ms=(n); while (__ms--) udelay(1000);})
+#ifndef mdelay
+#ifdef CONFIG_DEBUG_SLEEP_IN_IRQ
+#define mdelay(n) (                       \
+{                                         \
+       static int warned=0;              \
+       unsigned long __ms=(n);           \
+       WARN_ON(in_irq() && !(warned++)); \
+       while (__ms--) udelay(1000);      \
+})
 #else
 #define mdelay(n) (\
        (__builtin_constant_p(n) && (n)<=MAX_UDELAY_MS) ? udelay((n)*1000) : \
        ({unsigned long __ms=(n); while (__ms--) udelay(1000);}))
 #endif
+#endif
 
 #ifndef ndelay
 #define ndelay(x)      udelay(((x)+999)/1000)