diff -Naurp -X /home/jbarnes/dontdiff 180-tg3-hack.patch/include/asm-ia64/delay.h 200-udelay-preempt-fix.patch/include/asm-ia64/delay.h
--- 180-tg3-hack.patch/include/asm-ia64/delay.h	Tue Feb 17 19:57:12 2004
+++ 200-udelay-preempt-fix.patch/include/asm-ia64/delay.h	Wed Feb 18 10:34:00 2004
@@ -15,6 +15,7 @@
 #include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
+#include <linux/preempt.h>
 #include <linux/compiler.h>
 
 #include <asm/intrinsics.h>
@@ -81,11 +82,14 @@ __delay (unsigned long loops)
 static __inline__ void
 udelay (unsigned long usecs)
 {
-	unsigned long start = ia64_get_itc();
-	unsigned long cycles = usecs*local_cpu_data->cyc_per_usec;
+	unsigned long start, cycles;
 
+	preempt_disable();
+	start = ia64_get_itc();
+	cycles = usecs*local_cpu_data->cyc_per_usec;
 	while (ia64_get_itc() - start < cycles)
 		/* skip */;
+	preempt_enable();
 }
 
 #endif /* _ASM_IA64_DELAY_H */
