diff -Naurp -X /home/jbarnes/dontdiff 180-tg3-hack.patch/arch/ia64/sn/kernel/sn2/sn_proc_fs.c 200-udelay-preempt-fix.patch/arch/ia64/sn/kernel/sn2/sn_proc_fs.c
--- 180-tg3-hack.patch/arch/ia64/sn/kernel/sn2/sn_proc_fs.c	Mon Feb  9 19:01:23 2004
+++ 200-udelay-preempt-fix.patch/arch/ia64/sn/kernel/sn2/sn_proc_fs.c	Thu Feb 12 11:17:09 2004
@@ -165,7 +165,7 @@ register_sn_procfs(void) {
 	register_sn_partition_id();
 	register_sn_serial_numbers();
 	register_sn_force_interrupt();
-	register_sn_linkstats();
+	/* register_sn_linkstats(); */
 }
 
 #endif /* CONFIG_PROC_FS */
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	Mon Feb  9 19:00:01 2004
+++ 200-udelay-preempt-fix.patch/include/asm-ia64/delay.h	Thu Feb 12 11:17:09 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 */
