## Automatically generated incremental diff
## From:   linux-2.5.68-bk3
## To:     linux-2.5.68-bk4
## Robot:  $Id: make-incremental-diff,v 1.11 2002/02/20 02:59:33 hpa Exp $

diff -urN linux-2.5.68-bk3/MAINTAINERS linux-2.5.68-bk4/MAINTAINERS
--- linux-2.5.68-bk3/MAINTAINERS	2003-04-19 19:50:01.000000000 -0700
+++ linux-2.5.68-bk4/MAINTAINERS	2003-04-23 04:33:58.000000000 -0700
@@ -651,9 +651,11 @@
 S:	Maintained
 
 ETHERNET BRIDGE
+P:	Stephen Hemminger
+M:	shemminger@osdl.org
 L:	bridge@math.leidenuniv.nl
 W:	http://bridge.sourceforge.net/
-S:	Unmaintained
+S:	Maintained
 
 ETHERTEAM 16I DRIVER
 P:	Mika Kuoppala
diff -urN linux-2.5.68-bk3/Makefile linux-2.5.68-bk4/Makefile
--- linux-2.5.68-bk3/Makefile	2003-04-23 04:33:55.000000000 -0700
+++ linux-2.5.68-bk4/Makefile	2003-04-23 04:33:58.000000000 -0700
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 5
 SUBLEVEL = 68
-EXTRAVERSION = -bk3
+EXTRAVERSION = -bk4
 
 # *DOCUMENTATION*
 # To see a list of typical targets execute "make help"
diff -urN linux-2.5.68-bk3/arch/sparc/kernel/pcic.c linux-2.5.68-bk4/arch/sparc/kernel/pcic.c
--- linux-2.5.68-bk3/arch/sparc/kernel/pcic.c	2003-04-23 04:33:55.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc/kernel/pcic.c	2003-04-23 04:33:58.000000000 -0700
@@ -828,13 +828,27 @@
 	 * made, and then undo it!
 	 */
 	tv->tv_usec -= do_gettimeoffset();
-	tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ);
+	tv->tv_usec -= (jiffies - wall_jiffies) * (USEC_PER_SEC / HZ);
 	while (tv->tv_usec < 0) {
-		tv->tv_usec += 1000000;
+		tv->tv_usec += USEC_PER_SEC;
 		tv->tv_sec--;
 	}
+	tv->tv_usec *= NSEC_PER_USEC;
+
+	wall_to_monotonic.tv_sec += xtime.tv_sec - tv->tv_sec;
+	wall_to_monotonic.tv_nsec += xtime.tv_nsec - tv->tv_usec;
+
+	if (wall_to_monotonic.tv_nsec > NSEC_PER_SEC) {
+		wall_to_monotonic.tv_nsec -= NSEC_PER_SEC;
+		wall_to_monotonic.tv_sec++;
+	}
+	if (wall_to_monotonic.tv_nsec < 0) {
+		wall_to_monotonic.tv_nsec += NSEC_PER_SEC;
+		wall_to_monotonic.tv_sec--;
+	}
+
 	xtime.tv_sec = tv->tv_sec;
-	xtime.tv_nsec = (tv->tv_usec * 1000);
+	xtime.tv_nsec = tv->tv_usec;
 	time_adjust = 0;		/* stop active adjtime() */
 	time_status |= STA_UNSYNC;
 	time_maxerror = NTP_PHASE_LIMIT;
diff -urN linux-2.5.68-bk3/arch/sparc/kernel/time.c linux-2.5.68-bk4/arch/sparc/kernel/time.c
--- linux-2.5.68-bk3/arch/sparc/kernel/time.c	2003-04-23 04:33:55.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc/kernel/time.c	2003-04-23 04:33:58.000000000 -0700
@@ -408,7 +408,9 @@
 	mon = MSTK_REG_MONTH(mregs);
 	year = MSTK_CVT_YEAR( MSTK_REG_YEAR(mregs) );
 	xtime.tv_sec = mktime(year, mon, day, hour, min, sec);
-	xtime.tv_nsec = 0;
+	wall_to_monotonic.tv_sec = -xtime.tv_sec + INITIAL_JIFFIES / HZ;
+	xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);
+	wall_to_monotonic.tv_nsec = 0;
 	mregs->creg &= ~MSTK_CREG_READ;
 	spin_unlock_irq(&mostek_lock);
 #ifdef CONFIG_SUN4
@@ -439,7 +441,9 @@
 		intersil_start(iregs);
 
 		xtime.tv_sec = mktime(year, mon, day, hour, min, sec);
-		xtime.tv_nsec = 0;
+		wall_to_monotonic.tv_sec = -xtime.tv_sec + INITIAL_JIFFIES / HZ;
+		xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);
+		wall_to_monotonic.tv_nsec = 0;
 		printk("%u/%u/%u %u:%u:%u\n",day,mon,year,hour,min,sec);
 	}
 #endif
@@ -512,13 +516,28 @@
 	 * made, and then undo it!
 	 */
 	tv->tv_usec -= do_gettimeoffset();
-	tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ);
+	tv->tv_usec -= (jiffies - wall_jiffies) * (USEC_PER_SEC / HZ);
+
 	while (tv->tv_usec < 0) {
-		tv->tv_usec += 1000000;
+		tv->tv_usec += USEC_PER_SEC;
 		tv->tv_sec--;
 	}
+	tv->tv_usec *= NSEC_PER_USEC;
+
+	wall_to_monotonic.tv_sec += xtime.tv_sec - tv->tv_sec;
+	wall_to_monotonic.tv_nsec += xtime.tv_nsec - tv->tv_usec;
+
+	if (wall_to_monotonic.tv_nsec > NSEC_PER_SEC) {
+		wall_to_monotonic.tv_nsec -= NSEC_PER_SEC;
+		wall_to_monotonic.tv_sec++;
+	}
+	if (wall_to_monotonic.tv_nsec < 0) {
+		wall_to_monotonic.tv_nsec += NSEC_PER_SEC;
+		wall_to_monotonic.tv_sec--;
+	}
+
 	xtime.tv_sec = tv->tv_sec;
-	xtime.tv_nsec = (tv->tv_usec * 1000);
+	xtime.tv_nsec = tv->tv_usec;
 	time_adjust = 0;		/* stop active adjtime() */
 	time_status |= STA_UNSYNC;
 	time_maxerror = NTP_PHASE_LIMIT;
diff -urN linux-2.5.68-bk3/arch/sparc64/defconfig linux-2.5.68-bk4/arch/sparc64/defconfig
--- linux-2.5.68-bk3/arch/sparc64/defconfig	2003-04-19 19:49:09.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/defconfig	2003-04-23 04:33:58.000000000 -0700
@@ -334,7 +334,30 @@
 #
 # IEEE 1394 (FireWire) support (EXPERIMENTAL)
 #
-# CONFIG_IEEE1394 is not set
+CONFIG_IEEE1394=m
+
+#
+# Subsystem Options
+#
+# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+CONFIG_IEEE1394_OUI_DB=y
+
+#
+# Device Drivers
+#
+CONFIG_IEEE1394_OHCI1394=m
+
+#
+# Protocol Drivers
+#
+CONFIG_IEEE1394_VIDEO1394=m
+CONFIG_IEEE1394_SBP2=m
+# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
+CONFIG_IEEE1394_ETH1394=m
+CONFIG_IEEE1394_DV1394=m
+CONFIG_IEEE1394_RAWIO=m
+CONFIG_IEEE1394_CMP=m
+CONFIG_IEEE1394_AMDTP=m
 
 #
 # Networking support
diff -urN linux-2.5.68-bk3/arch/sparc64/kernel/chmc.c linux-2.5.68-bk4/arch/sparc64/kernel/chmc.c
--- linux-2.5.68-bk3/arch/sparc64/kernel/chmc.c	2003-04-19 19:48:56.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/kernel/chmc.c	2003-04-23 04:33:58.000000000 -0700
@@ -224,7 +224,7 @@
 		int dimm;
 
 		/* Multi-bit error, we just dump out all the
-		 * dimm labels assosciated with this bank.
+		 * dimm labels associated with this bank.
 		 */
 		for (dimm = 0; dimm < CHMCTRL_NDIMMS; dimm++) {
 			sprintf(buf, "%s ",
diff -urN linux-2.5.68-bk3/arch/sparc64/kernel/entry.S linux-2.5.68-bk4/arch/sparc64/kernel/entry.S
--- linux-2.5.68-bk3/arch/sparc64/kernel/entry.S	2003-04-19 19:48:46.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/kernel/entry.S	2003-04-23 04:33:58.000000000 -0700
@@ -1264,7 +1264,7 @@
 	 * because corrupt data may have been placed there and we don't
 	 * want to reference it.
 	 *
-	 * %g1 is one if this trap occured at %tl >= 1.
+	 * %g1 is one if this trap occurred at %tl >= 1.
 	 *
 	 * Next, we turn off error reporting so that we don't recurse.
 	 */
diff -urN linux-2.5.68-bk3/arch/sparc64/kernel/head.S linux-2.5.68-bk4/arch/sparc64/kernel/head.S
--- linux-2.5.68-bk3/arch/sparc64/kernel/head.S	2003-04-19 19:49:10.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/kernel/head.S	2003-04-23 04:33:58.000000000 -0700
@@ -84,7 +84,7 @@
 	 nop
 
 cheetah_plus_boot:
-	/* Preserve OBP choosen DCU and DCR register settings.  */
+	/* Preserve OBP chosen DCU and DCR register settings.  */
 	ba,pt	%xcc, cheetah_generic_boot
 	 nop
 
diff -urN linux-2.5.68-bk3/arch/sparc64/kernel/ioctl32.c linux-2.5.68-bk4/arch/sparc64/kernel/ioctl32.c
--- linux-2.5.68-bk3/arch/sparc64/kernel/ioctl32.c	2003-04-19 19:50:46.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/kernel/ioctl32.c	2003-04-23 04:33:58.000000000 -0700
@@ -3137,7 +3137,7 @@
 #define DRM32_IOCTL_DMA	     DRM_IOWR(0x29, drm32_dma_t)
 
 /* RED PEN	The DRM layer blindly dereferences the send/request
- * 		indice/size arrays even though they are userland
+ * 		index/size arrays even though they are userland
  * 		pointers.  -DaveM
  */
 static int drm32_dma(unsigned int fd, unsigned int cmd, unsigned long arg)
@@ -4243,6 +4243,8 @@
 /* Big L */
 COMPATIBLE_IOCTL(LOOP_SET_FD)
 COMPATIBLE_IOCTL(LOOP_CLR_FD)
+COMPATIBLE_IOCTL(LOOP_SET_STATUS64)
+COMPATIBLE_IOCTL(LOOP_GET_STATUS64)
 /* Big A */
 COMPATIBLE_IOCTL(AUDIO_GETINFO)
 COMPATIBLE_IOCTL(AUDIO_SETINFO)
diff -urN linux-2.5.68-bk3/arch/sparc64/kernel/pci_common.c linux-2.5.68-bk4/arch/sparc64/kernel/pci_common.c
--- linux-2.5.68-bk3/arch/sparc64/kernel/pci_common.c	2003-04-19 19:48:56.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/kernel/pci_common.c	2003-04-23 04:33:58.000000000 -0700
@@ -145,7 +145,7 @@
 		 * there must be a damn good reason for it.
 		 *
 		 * So what we do is delete the device from the
-		 * PCI device tree completely.  This scenerio
+		 * PCI device tree completely.  This scenario
 		 * is seen, for example, on CP1500 for the
 		 * second EBUS/HappyMeal pair if the external
 		 * connector for it is not present.
diff -urN linux-2.5.68-bk3/arch/sparc64/kernel/pci_psycho.c linux-2.5.68-bk4/arch/sparc64/kernel/pci_psycho.c
--- linux-2.5.68-bk3/arch/sparc64/kernel/pci_psycho.c	2003-04-23 04:33:55.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/kernel/pci_psycho.c	2003-04-23 04:33:58.000000000 -0700
@@ -854,7 +854,7 @@
 }
 
 /* PCI Errors.  They are signalled by the PCI bus module since they
- * are assosciated with a specific bus segment.
+ * are associated with a specific bus segment.
  */
 #define PSYCHO_PCI_AFSR_A	0x2010UL
 #define PSYCHO_PCI_AFSR_B	0x4010UL
diff -urN linux-2.5.68-bk3/arch/sparc64/kernel/ptrace.c linux-2.5.68-bk4/arch/sparc64/kernel/ptrace.c
--- linux-2.5.68-bk3/arch/sparc64/kernel/ptrace.c	2003-04-19 19:51:13.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/kernel/ptrace.c	2003-04-23 04:33:58.000000000 -0700
@@ -6,7 +6,7 @@
  * Based upon code written by Ross Biro, Linus Torvalds, Bob Manson,
  * and David Mosberger.
  *
- * Added Linux support -miguel (weird, eh?, the orignal code was meant
+ * Added Linux support -miguel (weird, eh?, the original code was meant
  * to emulate SunOS).
  */
 
diff -urN linux-2.5.68-bk3/arch/sparc64/kernel/rtrap.S linux-2.5.68-bk4/arch/sparc64/kernel/rtrap.S
--- linux-2.5.68-bk3/arch/sparc64/kernel/rtrap.S	2003-04-19 19:49:26.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/kernel/rtrap.S	2003-04-23 04:33:58.000000000 -0700
@@ -210,7 +210,7 @@
 __handle_perfctrs_continue:
 		 andcc			%l1, %o0, %g0
 
-		/* This fpdepth clear is neccessary for non-syscall rtraps only */
+		/* This fpdepth clear is necessary for non-syscall rtraps only */
 user_nowork:
 		bne,pn			%xcc, __handle_userfpu
 		 stb			%g0, [%g6 + TI_FPDEPTH]
diff -urN linux-2.5.68-bk3/arch/sparc64/kernel/sbus.c linux-2.5.68-bk4/arch/sparc64/kernel/sbus.c
--- linux-2.5.68-bk3/arch/sparc64/kernel/sbus.c	2003-04-23 04:33:55.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/kernel/sbus.c	2003-04-23 04:33:58.000000000 -0700
@@ -728,7 +728,7 @@
 
 #define NUM_SYSIO_OFFSETS (sizeof(sysio_irq_offsets) / sizeof(sysio_irq_offsets[0]))
 
-/* Convert Interrupt Mapping register pointer to assosciated
+/* Convert Interrupt Mapping register pointer to associated
  * Interrupt Clear register pointer, SYSIO specific version.
  */
 #define SYSIO_ICLR_UNUSED0	0x3400UL
@@ -1098,7 +1098,7 @@
 		prom_halt();
 	}
 
-	/* Align on E$ line boundry. */
+	/* Align on E$ line boundary. */
 	iommu = (struct sbus_iommu *)
 		(((unsigned long)iommu + (SMP_CACHE_BYTES - 1UL)) &
 		 ~(SMP_CACHE_BYTES - 1UL));
diff -urN linux-2.5.68-bk3/arch/sparc64/kernel/smp.c linux-2.5.68-bk4/arch/sparc64/kernel/smp.c
--- linux-2.5.68-bk3/arch/sparc64/kernel/smp.c	2003-04-19 19:48:46.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/kernel/smp.c	2003-04-23 04:33:58.000000000 -0700
@@ -1071,7 +1071,7 @@
 			prof_counter(cpu) = prof_multiplier(cpu);
 		}
 
-		/* Guarentee that the following sequences execute
+		/* Guarantee that the following sequences execute
 		 * uninterrupted.
 		 */
 		__asm__ __volatile__("rdpr	%%pstate, %0\n\t"
@@ -1096,7 +1096,7 @@
 
 	prof_counter(cpu) = prof_multiplier(cpu) = 1;
 
-	/* Guarentee that the following sequences execute
+	/* Guarantee that the following sequences execute
 	 * uninterrupted.
 	 */
 	__asm__ __volatile__("rdpr	%%pstate, %0\n\t"
diff -urN linux-2.5.68-bk3/arch/sparc64/kernel/time.c linux-2.5.68-bk4/arch/sparc64/kernel/time.c
--- linux-2.5.68-bk3/arch/sparc64/kernel/time.c	2003-04-23 04:33:55.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/kernel/time.c	2003-04-23 04:33:58.000000000 -0700
@@ -489,7 +489,7 @@
 #endif
 		do_timer(regs);
 
-		/* Guarentee that the following sequences execute
+		/* Guarantee that the following sequences execute
 		 * uninterrupted.
 		 */
 		__asm__ __volatile__("rdpr	%%pstate, %0\n\t"
@@ -703,7 +703,9 @@
 	}
 
 	xtime.tv_sec = mktime(year, mon, day, hour, min, sec);
-	xtime.tv_nsec = 0;
+	wall_to_monotonic.tv_sec = -xtime.tv_sec + INITIAL_JIFFIES / HZ;
+	xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);
+	wall_to_monotonic.tv_nsec = 0;
 
 	if (mregs) {
 		tmp = mostek_read(mregs + MOSTEK_CREG);
@@ -741,7 +743,9 @@
 			(unsigned int) (long) &unix_tod);
 		prom_feval(obp_gettod);
 		xtime.tv_sec = unix_tod;
-		xtime.tv_nsec = 0;
+		wall_to_monotonic.tv_sec = -xtime.tv_sec + INITIAL_JIFFIES / HZ;
+		xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);
+		wall_to_monotonic.tv_nsec = 0;
 		return;
 	}
 
@@ -972,7 +976,7 @@
 		prom_halt();
 	}
 
-	/* Guarentee that the following sequences execute
+	/* Guarantee that the following sequences execute
 	 * uninterrupted.
 	 */
 	__asm__ __volatile__("rdpr	%%pstate, %0\n\t"
@@ -1097,15 +1101,28 @@
 	 * made, and then undo it!
 	 */
 	tv->tv_usec -= do_gettimeoffset();
-	tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ);
+	tv->tv_usec -= (jiffies - wall_jiffies) * (USEC_PER_SEC / HZ);
 
 	while (tv->tv_usec < 0) {
-		tv->tv_usec += 1000000;
+		tv->tv_usec += USEC_PER_SEC;
 		tv->tv_sec--;
 	}
+	tv->tv_usec *= NSEC_PER_USEC;
+
+	wall_to_monotonic.tv_sec += xtime.tv_sec - tv->tv_sec;
+	wall_to_monotonic.tv_nsec += xtime.tv_nsec - tv->tv_usec;
+
+	if (wall_to_monotonic.tv_nsec > NSEC_PER_SEC) {
+		wall_to_monotonic.tv_nsec -= NSEC_PER_SEC;
+		wall_to_monotonic.tv_sec++;
+	}
+	if (wall_to_monotonic.tv_nsec < 0) {
+		wall_to_monotonic.tv_nsec += NSEC_PER_SEC;
+		wall_to_monotonic.tv_sec--;
+	}
 
 	xtime.tv_sec = tv->tv_sec;
-	xtime.tv_nsec = (tv->tv_usec * 1000);
+	xtime.tv_nsec = tv->tv_usec;
 	time_adjust = 0;		/* stop active adjtime() */
 	time_status |= STA_UNSYNC;
 	time_maxerror = NTP_PHASE_LIMIT;
diff -urN linux-2.5.68-bk3/arch/sparc64/kernel/trampoline.S linux-2.5.68-bk4/arch/sparc64/kernel/trampoline.S
--- linux-2.5.68-bk3/arch/sparc64/kernel/trampoline.S	2003-04-19 19:49:10.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/kernel/trampoline.S	2003-04-23 04:33:58.000000000 -0700
@@ -40,7 +40,7 @@
 	 nop
 
 cheetah_plus_startup:
-	/* Preserve OBP choosen DCU and DCR register settings.  */
+	/* Preserve OBP chosen DCU and DCR register settings.  */
 	ba,pt	%xcc, cheetah_generic_startup
 	 nop
 
diff -urN linux-2.5.68-bk3/arch/sparc64/prom/printf.c linux-2.5.68-bk4/arch/sparc64/prom/printf.c
--- linux-2.5.68-bk3/arch/sparc64/prom/printf.c	2003-04-19 19:49:52.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/prom/printf.c	2003-04-23 04:33:58.000000000 -0700
@@ -6,7 +6,7 @@
  * Copyright (c) 2002 Pete Zaitcev (zaitcev@yahoo.com)
  *
  * We used to warn all over the code: DO NOT USE prom_printf(),
- * and yet people do. Anton's banking code was outputing banks
+ * and yet people do. Anton's banking code was outputting banks
  * with prom_printf for most of the 2.4 lifetime. Since an effective
  * stick is not available, we deployed a carrot: an early printk
  * through PROM by means of -p boot option. This ought to fix it.
diff -urN linux-2.5.68-bk3/arch/sparc64/solaris/misc.c linux-2.5.68-bk4/arch/sparc64/solaris/misc.c
--- linux-2.5.68-bk3/arch/sparc64/solaris/misc.c	2003-04-19 19:51:12.000000000 -0700
+++ linux-2.5.68-bk4/arch/sparc64/solaris/misc.c	2003-04-23 04:33:58.000000000 -0700
@@ -1,5 +1,5 @@
 /* $Id: misc.c,v 1.36 2002/02/09 19:49:31 davem Exp $
- * misc.c: Miscelaneous syscall emulation for Solaris
+ * misc.c: Miscellaneous syscall emulation for Solaris
  *
  * Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
  */
diff -urN linux-2.5.68-bk3/drivers/block/ll_rw_blk.c linux-2.5.68-bk4/drivers/block/ll_rw_blk.c
--- linux-2.5.68-bk3/drivers/block/ll_rw_blk.c	2003-04-23 04:33:55.000000000 -0700
+++ linux-2.5.68-bk4/drivers/block/ll_rw_blk.c	2003-04-23 04:33:58.000000000 -0700
@@ -2164,8 +2164,7 @@
 void end_that_request_last(struct request *req)
 {
 	struct gendisk *disk = req->rq_disk;
-	if (req->waiting)
-		complete(req->waiting);
+	struct completion *waiting = req->waiting;
 
 	if (disk) {
 		unsigned long duration = jiffies - req->start_time;
@@ -2183,6 +2182,9 @@
 		disk_stat_dec(disk, in_flight);
 	}
 	__blk_put_request(req->q, req);
+	/* Do this LAST! The structure may be freed immediately afterwards */
+	if (waiting)
+		complete(waiting);
 }
 
 int __init blk_dev_init(void)
diff -urN linux-2.5.68-bk3/drivers/block/umem.c linux-2.5.68-bk4/drivers/block/umem.c
--- linux-2.5.68-bk3/drivers/block/umem.c	2003-04-19 19:51:16.000000000 -0700
+++ linux-2.5.68-bk4/drivers/block/umem.c	2003-04-23 04:33:58.000000000 -0700
@@ -149,6 +149,7 @@
 	spinlock_t 	lock;
 	int		check_batteries;
 
+	int		flags;
 };
 
 static struct cardinfo cards[MM_MAXCARDS];
@@ -573,7 +574,7 @@
 --                              mm_interrupt
 -----------------------------------------------------------------------------------
 */
-static void mm_interrupt(int irq, void *__card, struct pt_regs *regs)
+static irqreturn_t mm_interrupt(int irq, void *__card, struct pt_regs *regs)
 {
 	struct cardinfo *card = (struct cardinfo *) __card;
 	unsigned int dma_status;
@@ -585,13 +586,16 @@
 
 	if (!(dma_status & (DMASCR_ERROR_MASK | DMASCR_CHAIN_COMPLETE))) {
 		/* interrupt wasn't for me ... */
-		return;
+		return IRQ_NONE;
         }
 
 	/* clear COMPLETION interrupts */
-	writel(cpu_to_le32(DMASCR_DMA_COMPLETE|DMASCR_CHAIN_COMPLETE),
-	       card->csr_remap+ DMA_STATUS_CTRL);
-
+	if (card->flags & UM_FLAG_NO_BYTE_STATUS)
+		writel(cpu_to_le32(DMASCR_DMA_COMPLETE|DMASCR_CHAIN_COMPLETE),
+		       card->csr_remap+ DMA_STATUS_CTRL);
+	else
+		writeb((DMASCR_DMA_COMPLETE|DMASCR_CHAIN_COMPLETE) >> 16,
+		       card->csr_remap+ DMA_STATUS_CTRL + 2);
 	
 	/* log errors and clear interrupt status */
 	if (dma_status & DMASCR_ANY_ERR) {
@@ -663,6 +667,7 @@
 
 HW_TRACE(0x36);
 
+	return IRQ_HANDLED; 
 }
 /*
 -----------------------------------------------------------------------------------
@@ -755,15 +760,16 @@
 {
 	int i;
 
-	for (i = 0; i < num_cards; i++) {
-		struct cardinfo *card = &cards[i];
-		spin_lock_bh(&card->lock);
-		if (card->Active >= 0)
-			card->check_batteries = 1;
-		else
-			check_batteries(card);
-		spin_unlock_bh(&card->lock);
-	}
+	for (i = 0; i < num_cards; i++) 
+		if (!(cards[i].flags & UM_FLAG_NO_BATT)) {
+			struct cardinfo *card = &cards[i];
+			spin_lock_bh(&card->lock);
+			if (card->Active >= 0)
+				card->check_batteries = 1;
+			else
+				check_batteries(card);
+			spin_unlock_bh(&card->lock);
+		}
 
 	init_battery_timer();
 }
@@ -869,6 +875,7 @@
 	unsigned char	mem_present;
 	unsigned char	batt_status;
 	unsigned int	saved_bar, data;
+	int		magic_number;
 
 	if (pci_enable_device(dev) < 0)
 		return -ENODEV;
@@ -933,12 +940,33 @@
 	printk(KERN_INFO "MM%d: MEM area not remapped (CONFIG_MM_MAP_MEMORY not set)\n",
 	       card->card_number);
 #endif
-	if (readb(card->csr_remap + MEMCTRLSTATUS_MAGIC) != MM_MAGIC_VALUE) {
+	switch(card->dev->device) {
+	case 0x5415:
+		card->flags |= UM_FLAG_NO_BYTE_STATUS | UM_FLAG_NO_BATTREG;
+		magic_number = 0x59;
+		break;
+
+	case 0x5425:
+		card->flags |= UM_FLAG_NO_BYTE_STATUS;
+		magic_number = 0x5C;
+		break;
+
+	case 0x6155:
+		card->flags |= UM_FLAG_NO_BYTE_STATUS | UM_FLAG_NO_BATTREG | UM_FLAG_NO_BATT;
+		magic_number = 0x99;
+		break;
+
+	default:
+		magic_number = 0x100;
+		break;
+	}
+
+	if (readb(card->csr_remap + MEMCTRLSTATUS_MAGIC) != magic_number) {
 		printk(KERN_ERR "MM%d: Magic number invalid\n", card->card_number);
 		ret = -ENOMEM;
-
 		goto failed_magic;
 	}
+
 	card->mm_pages[0].desc = pci_alloc_consistent(card->dev,
 						      PAGE_SIZE*2,
 						      &card->mm_pages[0].page_dma);
@@ -997,14 +1025,19 @@
 	card->battery[1].good = !(batt_status & BATTERY_2_FAILURE);
 	card->battery[0].last_change = card->battery[1].last_change = jiffies;
 
-	printk(KERN_INFO "MM%d: Size %d KB, Battery 1 %s (%s), Battery 2 %s (%s)\n",
-	       card->card_number, card->mm_size,
-	       (batt_status & BATTERY_1_DISABLED ? "Disabled" : "Enabled"),
-	       card->battery[0].good ? "OK" : "FAILURE",
-	       (batt_status & BATTERY_2_DISABLED ? "Disabled" : "Enabled"),
-	       card->battery[1].good ? "OK" : "FAILURE");
+	if (card->flags & UM_FLAG_NO_BATT) 
+		printk(KERN_INFO "MM%d: Size %d KB\n",
+		       card->card_number, card->mm_size);
+	else {
+		printk(KERN_INFO "MM%d: Size %d KB, Battery 1 %s (%s), Battery 2 %s (%s)\n",
+		       card->card_number, card->mm_size,
+		       (batt_status & BATTERY_1_DISABLED ? "Disabled" : "Enabled"),
+		       card->battery[0].good ? "OK" : "FAILURE",
+		       (batt_status & BATTERY_2_DISABLED ? "Disabled" : "Enabled"),
+		       card->battery[1].good ? "OK" : "FAILURE");
 
-	set_fault_to_battery_status(card);
+		set_fault_to_battery_status(card);
+	}
 
 	pci_read_config_dword(dev, PCI_BASE_ADDRESS_1, &saved_bar);
 	data = 0xffffffff;
@@ -1117,6 +1150,16 @@
 	}, {
 	.vendor =	PCI_VENDOR_ID_MICRO_MEMORY,
 	.device =	PCI_DEVICE_ID_MICRO_MEMORY_5425CN,
+	}, {
+	.vendor =	PCI_VENDOR_ID_MICRO_MEMORY,
+	.device =	PCI_DEVICE_ID_MICRO_MEMORY_6155,
+	}, {
+	.vendor	=	0x8086,
+	.device	=	0xB555,
+	.subvendor=	0x1332,
+	.subdevice=	0x5460,
+	.class	=	0x050000,
+	.class_mask=	0,
 	}, { /* end: all zeroes */ }
 };
 
diff -urN linux-2.5.68-bk3/fs/jfs/jfs_txnmgr.c linux-2.5.68-bk4/fs/jfs/jfs_txnmgr.c
--- linux-2.5.68-bk3/fs/jfs/jfs_txnmgr.c	2003-04-19 19:50:01.000000000 -0700
+++ linux-2.5.68-bk4/fs/jfs/jfs_txnmgr.c	2003-04-23 04:33:59.000000000 -0700
@@ -1240,8 +1240,21 @@
 	 * Ensure that inode isn't reused before
 	 * lazy commit thread finishes processing
 	 */
-	if (tblk->xflag & (COMMIT_CREATE | COMMIT_DELETE))
+	if (tblk->xflag & (COMMIT_CREATE | COMMIT_DELETE)) {
 		atomic_inc(&tblk->ip->i_count);
+		/*
+		 * Avoid a rare deadlock
+		 *
+		 * If the inode is locked, we may be blocked in
+		 * jfs_commit_inode.  If so, we don't want the
+		 * lazy_commit thread doing the last iput() on the inode
+		 * since that may block on the locked inode.  Instead,
+		 * commit the transaction synchronously, so the last iput
+		 * will be done by the calling thread (or later)
+		 */
+		if (tblk->ip->i_state & I_LOCK)
+			tblk->xflag &= ~COMMIT_LAZY;
+	}
 
 	ASSERT((!(tblk->xflag & COMMIT_DELETE)) ||
 	       ((tblk->ip->i_nlink == 0) &&
diff -urN linux-2.5.68-bk3/include/asm-sparc64/asi.h linux-2.5.68-bk4/include/asm-sparc64/asi.h
--- linux-2.5.68-bk3/include/asm-sparc64/asi.h	2003-04-19 19:48:55.000000000 -0700
+++ linux-2.5.68-bk4/include/asm-sparc64/asi.h	2003-04-23 04:33:59.000000000 -0700
@@ -102,13 +102,13 @@
 #define ASI_PST8_P		0xc0 /* Primary, 8 8-bit, partial		*/
 #define ASI_PST8_S		0xc1 /* Secondary, 8 8-bit, partial		*/
 #define ASI_PST16_P		0xc2 /* Primary, 4 16-bit, partial		*/
-#define ASI_PST16_S		0xc3 /* Seconary, 4 16-bit, partial		*/
+#define ASI_PST16_S		0xc3 /* Secondary, 4 16-bit, partial		*/
 #define ASI_PST32_P		0xc4 /* Primary, 2 32-bit, partial		*/
 #define ASI_PST32_S		0xc5 /* Secondary, 2 32-bit, partial		*/
 #define ASI_PST8_PL		0xc8 /* Primary, 8 8-bit, partial, little	*/
 #define ASI_PST8_SL		0xc9 /* Secondary, 8 8-bit, partial, little	*/
 #define ASI_PST16_PL		0xca /* Primary, 4 16-bit, partial, little	*/
-#define ASI_PST16_SL		0xcb /* Seconary, 4 16-bit, partial, little	*/
+#define ASI_PST16_SL		0xcb /* Secondary, 4 16-bit, partial, little	*/
 #define ASI_PST32_PL		0xcc /* Primary, 2 32-bit, partial, little	*/
 #define ASI_PST32_SL		0xcd /* Secondary, 2 32-bit, partial, little	*/
 #define ASI_FL8_P		0xd0 /* Primary, 1 8-bit, fpu ld/st		*/
diff -urN linux-2.5.68-bk3/include/asm-sparc64/bpp.h linux-2.5.68-bk4/include/asm-sparc64/bpp.h
--- linux-2.5.68-bk3/include/asm-sparc64/bpp.h	2003-04-19 19:51:16.000000000 -0700
+++ linux-2.5.68-bk4/include/asm-sparc64/bpp.h	2003-04-23 04:33:59.000000000 -0700
@@ -17,7 +17,7 @@
  * with compliant or compatible devices. It will use whatever features
  * the device supports, prefering those that are typically faster.
  *
- * When the device is opened, it is left in COMPATABILITY mode, and
+ * When the device is opened, it is left in COMPATIBILITY mode, and
  * writes work like any printer device. The driver only attempt to
  * negotiate 1284 modes when needed so that plugs can be pulled,
  * switch boxes switched, etc., without disrupting things. It will
diff -urN linux-2.5.68-bk3/include/asm-sparc64/chafsr.h linux-2.5.68-bk4/include/asm-sparc64/chafsr.h
--- linux-2.5.68-bk3/include/asm-sparc64/chafsr.h	2003-04-19 19:50:30.000000000 -0700
+++ linux-2.5.68-bk4/include/asm-sparc64/chafsr.h	2003-04-23 04:33:59.000000000 -0700
@@ -61,7 +61,7 @@
 /* Uncorrectable system bus data ECC error for read of interrupt vector */
 #define CHAFSR_IVU		0x0000200000000000
 
-/* Unmappeed error from system bus */
+/* Unmapped error from system bus */
 #define CHAFSR_TO		0x0000100000000000
 
 /* Bus error response from system bus */
@@ -127,7 +127,7 @@
 
 /* The AFSR must be explicitly cleared by software, it is not cleared automatically
  * by a read.  Writes to bits <51:33> with bits set will clear the corresponding
- * bits in the AFSR.  Bits assosciated with disrupting traps must be cleared before
+ * bits in the AFSR.  Bits associated with disrupting traps must be cleared before
  * interrupts are re-enabled to prevent multiple traps for the same error.  I.e.
  * PSTATE.IE and AFSR bits control delivery of disrupting traps.
  *
diff -urN linux-2.5.68-bk3/include/asm-sparc64/estate.h linux-2.5.68-bk4/include/asm-sparc64/estate.h
--- linux-2.5.68-bk3/include/asm-sparc64/estate.h	2003-04-19 19:50:36.000000000 -0700
+++ linux-2.5.68-bk4/include/asm-sparc64/estate.h	2003-04-23 04:33:59.000000000 -0700
@@ -15,7 +15,7 @@
  * errors 2) uncorrectable E-cache errors.  Such events only occur on reads
  * of the E-cache by the local processor for: 1) data loads 2) instruction
  * fetches 3) atomic operations.  Such events _cannot_ occur for: 1) merge
- * 2) writeback 2) copyout.  The AFSR bits assosciated with these traps are
+ * 2) writeback 2) copyout.  The AFSR bits associated with these traps are
  * UCC and UCU.
  */
 
@@ -31,7 +31,7 @@
  * 4) As the result of such errors on instruction vector fetch can generate any
  *    of the 3 trap types.
  *
- * The AFSR bits assosciated with these traps are EMU, EDU, WDU, CPU, IVU, UE,
+ * The AFSR bits associated with these traps are EMU, EDU, WDU, CPU, IVU, UE,
  * BERR, and TO.
  */
 
diff -urN linux-2.5.68-bk3/include/asm-sparc64/ns87303.h linux-2.5.68-bk4/include/asm-sparc64/ns87303.h
--- linux-2.5.68-bk3/include/asm-sparc64/ns87303.h	2003-04-19 19:50:09.000000000 -0700
+++ linux-2.5.68-bk4/include/asm-sparc64/ns87303.h	2003-04-23 04:33:59.000000000 -0700
@@ -9,7 +9,7 @@
 #define _SPARC_NS87303_H 1
 
 /*
- * Controll Register Index Values
+ * Control Register Index Values
  */
 #define FER	0x00
 #define FAR	0x01
@@ -58,7 +58,7 @@
 #define TUP_EPP_TIMO	0x02	/* Enable EPP timeout IRQ                    */
 
 /* Advanced SuperIO Config Register (ASC) bits */
-#define ASC_LPT_IRQ7	0x01	/* Allways use IRQ7 for LPT                  */
+#define ASC_LPT_IRQ7	0x01	/* Always use IRQ7 for LPT                  */
 #define ASC_DRV2_SEL	0x02	/* Logical Drive Exchange controlled by TDR  */
 
 #define FER_RESERVED	0x00
diff -urN linux-2.5.68-bk3/include/asm-sparc64/pci.h linux-2.5.68-bk4/include/asm-sparc64/pci.h
--- linux-2.5.68-bk3/include/asm-sparc64/pci.h	2003-04-19 19:48:53.000000000 -0700
+++ linux-2.5.68-bk4/include/asm-sparc64/pci.h	2003-04-23 04:33:59.000000000 -0700
@@ -50,7 +50,7 @@
  * size must be the same as what as passed into pci_alloc_consistent,
  * and likewise dma_addr must be the same as what *dma_addrp was set to.
  *
- * References to the memory and mappings assosciated with cpu_addr/dma_addr
+ * References to the memory and mappings associated with cpu_addr/dma_addr
  * past this call are illegal.
  */
 extern void pci_free_consistent(struct pci_dev *hwdev, size_t size, void *vaddr, dma_addr_t dma_handle);
@@ -92,7 +92,7 @@
 	(((PTR)->LEN_NAME) = (VAL))
 
 /* Map a set of buffers described by scatterlist in streaming
- * mode for DMA.  This is the scather-gather version of the
+ * mode for DMA.  This is the scatter-gather version of the
  * above pci_map_single interface.  Here the scatter gather list
  * elements are each tagged with the appropriate dma address
  * and length.  They are obtained via sg_dma_{address,length}(SG).
diff -urN linux-2.5.68-bk3/include/asm-sparc64/svr4.h linux-2.5.68-bk4/include/asm-sparc64/svr4.h
--- linux-2.5.68-bk3/include/asm-sparc64/svr4.h	2003-04-19 19:50:07.000000000 -0700
+++ linux-2.5.68-bk4/include/asm-sparc64/svr4.h	2003-04-23 04:33:59.000000000 -0700
@@ -85,7 +85,7 @@
 	SVR4_SS_DISABLE,
 };
 
-/* signal stack exection place, unsupported */
+/* signal stack execution place, unsupported */
 typedef struct svr4_stack_t {
         char *sp;
         int  size;
diff -urN linux-2.5.68-bk3/include/asm-sparc64/upa.h linux-2.5.68-bk4/include/asm-sparc64/upa.h
--- linux-2.5.68-bk3/include/asm-sparc64/upa.h	2003-04-19 19:51:12.000000000 -0700
+++ linux-2.5.68-bk4/include/asm-sparc64/upa.h	2003-04-23 04:33:59.000000000 -0700
@@ -21,7 +21,7 @@
 #define UPA_PORTID_PREQDQ       0x000000007e000000 /* slave-wr's to mod supported  */
 #define UPA_PORTID_PREQRD       0x0000000001e00000 /* # incoming P_REQ's supported */
 #define UPA_PORTID_UPACAP       0x00000000001f0000 /* UPA capabilities of mod      */
-#define UPA_PORTID_ID           0x000000000000ffff /* Module Indentification bits  */
+#define UPA_PORTID_ID           0x000000000000ffff /* Module Identification bits  */
 
 /* UPA I/O space accessors */
 #if defined(__KERNEL__) && !defined(__ASSEMBLY__)
diff -urN linux-2.5.68-bk3/include/linux/umem.h linux-2.5.68-bk4/include/linux/umem.h
--- linux-2.5.68-bk3/include/linux/umem.h	2003-04-19 19:48:51.000000000 -0700
+++ linux-2.5.68-bk4/include/linux/umem.h	2003-04-23 04:33:59.000000000 -0700
@@ -128,4 +128,11 @@
 #define PCI_VENDOR_ID_MICRO_MEMORY		0x1332
 #define PCI_DEVICE_ID_MICRO_MEMORY_5415CN	0x5415
 #define PCI_DEVICE_ID_MICRO_MEMORY_5425CN	0x5425
+#define PCI_DEVICE_ID_MICRO_MEMORY_6155		0x6155
+
+/* bits for card->flags */
+#define UM_FLAG_DMA_IN_REGS		1
+#define UM_FLAG_NO_BYTE_STATUS		2
+#define UM_FLAG_NO_BATTREG		4
+#define	UM_FLAG_NO_BATT			8
 #endif
diff -urN linux-2.5.68-bk3/include/net/irda/irport.h linux-2.5.68-bk4/include/net/irda/irport.h
--- linux-2.5.68-bk3/include/net/irda/irport.h	2003-04-19 19:50:06.000000000 -0700
+++ linux-2.5.68-bk4/include/net/irda/irport.h	2003-04-23 04:33:59.000000000 -0700
@@ -81,7 +81,7 @@
 void irport_start(struct irport_cb *self);
 void irport_stop(struct irport_cb *self);
 void irport_change_speed(void *priv, __u32 speed);
-void irport_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+irqreturn_t irport_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 int  irport_hard_xmit(struct sk_buff *skb, struct net_device *dev);
 int  irport_net_open(struct net_device *dev);
 int  irport_net_close(struct net_device *dev);
diff -urN linux-2.5.68-bk3/net/atm/lec.c linux-2.5.68-bk4/net/atm/lec.c
--- linux-2.5.68-bk3/net/atm/lec.c	2003-04-19 19:50:02.000000000 -0700
+++ linux-2.5.68-bk4/net/atm/lec.c	2003-04-23 04:33:59.000000000 -0700
@@ -552,15 +552,9 @@
 };
 
 static struct atm_dev lecatm_dev = {
-        &lecdev_ops,
-        NULL,	    /*PHY*/
-        "lec",	    /*type*/
-        999,	    /*dummy device number*/
-        NULL,NULL,  /*no VCCs*/
-        NULL,NULL,  /*no data*/
-        0,	    /*no flags*/
-        NULL,	    /* no local address*/
-        { 0 }	    /*no ESI or rest of the atm_dev struct things*/
+	.ops	= &lecdev_ops,
+	.type	= "lec",
+	.number	= 999,	/* dummy device number */
 };
 
 /*
diff -urN linux-2.5.68-bk3/net/core/rtnetlink.c linux-2.5.68-bk4/net/core/rtnetlink.c
--- linux-2.5.68-bk3/net/core/rtnetlink.c	2003-04-19 19:51:23.000000000 -0700
+++ linux-2.5.68-bk4/net/core/rtnetlink.c	2003-04-23 04:33:59.000000000 -0700
@@ -539,9 +539,7 @@
 }
 
 struct notifier_block rtnetlink_dev_notifier = {
-	rtnetlink_event,
-	NULL,
-	0
+	.notifier_call	= rtnetlink_event,
 };
 
 
diff -urN linux-2.5.68-bk3/net/core/sock.c linux-2.5.68-bk4/net/core/sock.c
--- linux-2.5.68-bk3/net/core/sock.c	2003-04-19 19:50:32.000000000 -0700
+++ linux-2.5.68-bk4/net/core/sock.c	2003-04-23 04:33:59.000000000 -0700
@@ -768,9 +768,14 @@
 				     unsigned long data_len, int noblock, int *errcode)
 {
 	struct sk_buff *skb;
+	unsigned int gfp_mask;
 	long timeo;
 	int err;
 
+	gfp_mask = sk->allocation;
+	if (gfp_mask & __GFP_WAIT)
+		gfp_mask |= __GFP_REPEAT;
+
 	timeo = sock_sndtimeo(sk, noblock);
 	while (1) {
 		err = sock_error(sk);
diff -urN linux-2.5.68-bk3/net/ipv4/ip_gre.c linux-2.5.68-bk4/net/ipv4/ip_gre.c
--- linux-2.5.68-bk3/net/ipv4/ip_gre.c	2003-04-19 19:50:34.000000000 -0700
+++ linux-2.5.68-bk4/net/ipv4/ip_gre.c	2003-04-23 04:33:59.000000000 -0700
@@ -777,9 +777,6 @@
 		skb->dst->ops->update_pmtu(skb->dst, mtu);
 
 	if (skb->protocol == htons(ETH_P_IP)) {
-		if (skb->dst)
-			skb->dst->ops->update_pmtu(skb->dst, mtu);
-
 		df |= (old_iph->frag_off&htons(IP_DF));
 
 		if ((old_iph->frag_off&htons(IP_DF)) &&
diff -urN linux-2.5.68-bk3/net/netlink/netlink_dev.c linux-2.5.68-bk4/net/netlink/netlink_dev.c
--- linux-2.5.68-bk3/net/netlink/netlink_dev.c	2003-04-19 19:49:10.000000000 -0700
+++ linux-2.5.68-bk4/net/netlink/netlink_dev.c	2003-04-23 04:33:59.000000000 -0700
@@ -170,16 +170,54 @@
 	.release =	netlink_release,
 };
 
-static struct { char *name; int minor; } entries[] = {
-	{"route", 0},
-	{"skip", 1},
-	{"usersock", 2},
-	{"fwmonitor", 3},
-	{"tcpdiag", 4},
-	{"arpd", 8},
-	{"route6", 11},
-	{"ip6_fw", 13},
-	{"dnrtmsg", 13},
+static struct {
+	char *name;
+	int minor;
+} entries[] = {
+	{
+		.name	= "route",
+		.minor	= NETLINK_ROUTE,
+	},
+	{
+		.name	= "skip",
+		.minor	= NETLINK_SKIP,
+	},
+	{
+		.name	= "usersock",
+		.minor	= NETLINK_USERSOCK,
+	},
+	{
+		.name	= "fwmonitor",
+		.minor	= NETLINK_FIREWALL,
+	},
+	{
+		.name	= "tcpdiag",
+		.minor	= NETLINK_TCPDIAG,
+	},
+	{
+		.name	= "nflog",
+		.minor	= NETLINK_NFLOG,
+	},
+	{
+		.name	= "xfrm",
+		.minor	= NETLINK_XFRM,
+	},
+	{
+		.name	= "arpd",
+		.minor	= NETLINK_ARPD,
+	},
+	{
+		.name	= "route6",
+		.minor	= NETLINK_ROUTE6,
+	},
+	{
+		.name	= "ip6_fw",
+		.minor	= NETLINK_IP6_FW,
+	},
+	{
+		.name	= "dnrtmsg",
+		.minor	= NETLINK_DNRTMSG,
+	},
 };
 
 static void __init make_devfs_entries (const char *name, int minor)
