diff -Naurp linux-2.2.26-vanilla/ChangeLog-2.2.26 linux-2.2.27-pre1/ChangeLog-2.2.26
--- linux-2.2.26-vanilla/ChangeLog-2.2.26	2004-03-24 18:27:12.000000000 +0100
+++ linux-2.2.27-pre1/ChangeLog-2.2.26	1970-01-01 01:00:00.000000000 +0100
@@ -1,36 +0,0 @@
-Kernel 2.2.xx Mainline
-----------------------
-Person:		Marc-Christian Petersen
-EMail:		m.c.p@wolk-project.de
-Mailinglist:	linux-kernel@vger.kernel.org
-Website:	http://www.kernel.org/pub/linux/kernel/people/mcp/
-Status:		Maintained
-Employed by:	Linux-Systeme GmbH, http://www.linux-systeme.de/
-
-
-    Thanks to Alan Cox 8-)
-
-
--------------------------------------------------------------------------
-If you need a more secured, more stable, even faster, better SMP support,
-IDE LBA48 support, LFS support, IPSec support, HTB support, IPVS support
-etc. enabled kernel with many more features and important fixes, please
-use my 2.2-secure tree.
-You may find more informations about it at http://www.wolk-project.de.
--------------------------------------------------------------------------
-
-
-
-2.2.26
-------
-o	CAN-2004-0077: behave safely in case of do_munmap()	(Solar Designer)
-	  failures in mremap(2)
-o	CAN-2003-0984: /dev/rtc can leak parts of kernel	(Solar Designer)
-	  memory to unprivileged users (2.4 backport)
-o	CAN-2003-0244: hashing exploits in network stack	(David S. Miller)
-o	update_atime() performance improvement (2.4 backport)	(Solar Designer)
-o	ability to swapoff after a device file might		(Solar Designer)
-	  have been re-created
-o	MAINTAINERS correction for Kernel 2.2 and 2.2 fixes	(me)
-o	fixed some typos					(Solar Designer, me)
-
diff -Naurp linux-2.2.26-vanilla/ChangeLog-2.2.27 linux-2.2.27-pre1/ChangeLog-2.2.27
--- linux-2.2.26-vanilla/ChangeLog-2.2.27	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.2.27-pre1/ChangeLog-2.2.27	2004-03-24 20:09:38.000000000 +0100
@@ -0,0 +1,51 @@
+Kernel 2.2.xx Mainline
+----------------------
+Person:		Marc-Christian Petersen
+EMail:		m.c.p@kernel.linux-systeme.com
+Mailinglist:	linux-kernel@vger.kernel.org
+Website:	http://www.kernel.org/pub/linux/kernel/people/mcp/
+Status:		Maintained
+Employed by:	Linux-Systeme GmbH, http://www.linux-systeme.com/
+
+
+    Thanks to Alan Cox 8-)
+
+
+-------------------------------------------------------------------------
+If you need a more secured, more stable, even faster, better SMP support,
+IDE LBA48 support, IPSec support, HTB support, IPVS support etc. enabled
+kernel with many more features and important fixes, please use my
+2.2-secure tree.
+You may find more informations about it at http://www.wolk-project.de/
+-------------------------------------------------------------------------
+
+
+
+2.2.27-pre1
+-----------
+o	fixed TCP keepalive bug					(Neal Cardwell)
+o       fixed tcp seq nr wrapping bug				(Ulrik De Bie)
+o	added cciss root translation table			(Eduard Bloch)
+o	VIA KL133/KM133 northbridge: vga console going crazy	(Roberto Biancardi)
+o	speedup 'make dep'					(Benoit Poulot-Cazajous)
+o	disabled MCE only on Pentiums by default (2.4 backport)	(Herbert Xu)
+	  (boot with 'mce' if your MCE works as expected)
+o	skb_realloc_headroom() panics when new headroom is	(James Morris)
+	  smaller than existing headroom
+o	invalid nh.raw use after free				(Julian Anastasov)
+o	fix a local APIC initaliziation ordering bug that	(Andrea Arcangeli)
+	  triggers on the P4
+o	TSC calibration must be dynamic and not a compile	(Andrea Arcangeli)
+	  time thing because gettimeofday is dynamic and it
+	  depends on the TSCs to be in sync
+o	fix deadlock on shutdown in 8139too			(Herbert Xu)
+o	support for ELF executables which use an a.out format	(Solar Designer)
+	  interpreter (dynamic linker) moved into a separate
+	  configuration option and disabled by default
+o	fixed sys_utimes perm check according to sys_utim	(Al Viro)
+o	show us the saved kernel command line (2.4 backport)	(me)
+o	some whitespace cleanups, some coding style cleanups	(me)
+o	fixed some gcc warnings					(me)
+o	add PCI ID for 82820 NIC to eepro100 network driver	(me)
+o	move 'Network device support' near 'Networking options'	(me)
+
diff -Naurp linux-2.2.26-vanilla/Documentation/Configure.help linux-2.2.27-pre1/Documentation/Configure.help
--- linux-2.2.26-vanilla/Documentation/Configure.help	2004-03-24 18:26:56.000000000 +0100
+++ linux-2.2.27-pre1/Documentation/Configure.help	2004-03-24 19:45:02.000000000 +0100
@@ -1949,6 +1949,12 @@ CONFIG_BINFMT_ELF
   called binfmt_elf.o. Saying M or N here is dangerous because some
   crucial programs on your system might be in ELF format.
 
+ELF binaries with a.out format interpreters or a.out libraries
+CONFIG_BINFMT_ELF_AOUT
+  The kernel may support ELF executables which use an a.out format
+  interpreter (dynamic linker) and/or a.out shared libraries, in
+  addition to the usual ELF-ELF setups. You shouldn't need this.
+
 Kernel support for A.OUT binaries
 CONFIG_BINFMT_AOUT
   A.out (Assembler.OUTput) is a set of formats for libraries and
@@ -1962,13 +1968,11 @@ CONFIG_BINFMT_AOUT
   warrant removing support. However its removal is a good idea if you
   wish to ensure that absolutely none of your programs will use this
   older executable format. If you don't know what to answer at this
-  point then answer Y. If someone told you "You need a kernel with
+  point then answer N. If someone told you "You need a kernel with
   QMAGIC support" then you'll have to say Y here. You may answer M to
   compile a.out support as a module and later load the module when you
   want to use a program or library in a.out format. The module will be
-  called binfmt_aout.o. Saying M or N here is dangerous though,
-  because some crucial programs on your system might still be in A.OUT
-  format.
+  called binfmt_aout.o.
 
 Kernel support for JAVA binaries (obsolete)
 CONFIG_BINFMT_JAVA
diff -Naurp linux-2.2.26-vanilla/MAINTAINERS linux-2.2.27-pre1/MAINTAINERS
--- linux-2.2.26-vanilla/MAINTAINERS	2004-03-24 18:27:12.000000000 +0100
+++ linux-2.2.27-pre1/MAINTAINERS	2004-03-24 19:45:03.000000000 +0100
@@ -562,7 +562,7 @@ S:	Maintained
 
 KERNEL  (2.2.XX TREE)
 P:	Marc-Christian Petersen
-M:	m.c.p@wolk-project.de
+M:	m.c.p@kernel.linux-systeme.com
 L:	linux-kernel@vger.kernel.org
 W:	http://www.kernel.org/pub/linux/kernel/people/mcp/
 S:	Maintained
@@ -1173,7 +1173,7 @@ S:	Maintained
 
 LINUX 2.2 FIXES
 P:	Marc-Christian Petersen
-M:	m.c.p@wolk-project.de
+M:	m.c.p@kernel.linux-systeme.com
 S:	Maintained
 
 THE REST
diff -Naurp linux-2.2.26-vanilla/Makefile linux-2.2.27-pre1/Makefile
--- linux-2.2.26-vanilla/Makefile	2004-03-24 18:27:12.000000000 +0100
+++ linux-2.2.27-pre1/Makefile	2004-03-24 19:45:03.000000000 +0100
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 2
-SUBLEVEL = 26
-EXTRAVERSION = 
+SUBLEVEL = 27
+EXTRAVERSION = -pre1
 
 ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
 
@@ -440,14 +440,15 @@ sums:
 	find . -type f -print | sort | xargs sum > .SUMS
 
 dep-files: scripts/mkdep archdep include/linux/version.h new-genksyms
-	scripts/mkdep init/*.c > .depend
-	scripts/mkdep `find $(FINDHPATH) -follow -name \*.h ! -name modversions.h -print` > .hdepend
+	rm -f .depend .hdepend
 #	set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i fastdep ;done
 # let this be made through the fastdep rule in Rules.make
 	$(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS)) _FASTDEP_ALL_SUB_DIRS="$(SUBDIRS)"
 ifdef CONFIG_MODVERSIONS
 	$(MAKE) update-modverfile
 endif
+	scripts/mkdep `find $(FINDHPATH) -follow -name \*.h ! -name modversions.h -print` > .hdepend
+	scripts/mkdep init/*.c > .depend
 
 MODVERFILE :=
 
diff -Naurp linux-2.2.26-vanilla/arch/alpha/config.in linux-2.2.27-pre1/arch/alpha/config.in
--- linux-2.2.26-vanilla/arch/alpha/config.in	2001-03-25 18:37:29.000000000 +0200
+++ linux-2.2.27-pre1/arch/alpha/config.in	2004-03-24 19:45:02.000000000 +0100
@@ -204,6 +204,9 @@ bool 'BSD Process Accounting' CONFIG_BSD
 bool 'Sysctl support' CONFIG_SYSCTL
 tristate 'Kernel support for a.out (ECOFF) binaries' CONFIG_BINFMT_AOUT
 tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
+if [ "$CONFIG_BINFMT_ELF" != "n" ]; then
+  bool '   ELF binaries with a.out format interpreters or a.out libraries' CONFIG_BINFMT_ELF_AOUT
+fi
 tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
   tristate 'Kernel support for JAVA binaries (obsolete)' CONFIG_BINFMT_JAVA
diff -Naurp linux-2.2.26-vanilla/arch/alpha/defconfig linux-2.2.27-pre1/arch/alpha/defconfig
--- linux-2.2.26-vanilla/arch/alpha/defconfig	2001-03-25 18:31:46.000000000 +0200
+++ linux-2.2.27-pre1/arch/alpha/defconfig	2004-03-24 19:45:02.000000000 +0100
@@ -51,8 +51,9 @@ CONFIG_NET=y
 CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
-CONFIG_BINFMT_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
 CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_ELF_AOUT is not set
 # CONFIG_BINFMT_MISC is not set
 CONFIG_BINFMT_EM86=y
 # CONFIG_PARPORT is not set
diff -Naurp linux-2.2.26-vanilla/arch/arm/config.in linux-2.2.27-pre1/arch/arm/config.in
--- linux-2.2.26-vanilla/arch/arm/config.in	2001-03-25 18:31:54.000000000 +0200
+++ linux-2.2.27-pre1/arch/arm/config.in	2004-03-24 19:45:02.000000000 +0100
@@ -136,6 +136,9 @@ bool 'Sysctl support' CONFIG_SYSCTL
 tristate 'Math emulation' CONFIG_NWFPE
 tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
 tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
+if [ "$CONFIG_BINFMT_ELF" != "n" ]; then
+  bool '   ELF binaries with a.out format interpreters or a.out libraries' CONFIG_BINFMT_ELF_AOUT
+fi
 tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
 if [ "$CONFIG_CPU_32" = "y" ]; then
    tristate 'RISC OS personality' CONFIG_ARTHUR
diff -Naurp linux-2.2.26-vanilla/arch/arm/defconfig linux-2.2.27-pre1/arch/arm/defconfig
--- linux-2.2.26-vanilla/arch/arm/defconfig	2001-03-25 18:31:54.000000000 +0200
+++ linux-2.2.27-pre1/arch/arm/defconfig	2004-03-24 19:45:02.000000000 +0100
@@ -49,8 +49,9 @@ CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_NWFPE=y
-CONFIG_BINFMT_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
 CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_ELF_AOUT is not set
 # CONFIG_BINFMT_MISC is not set
 # CONFIG_ARTHUR is not set
 CONFIG_PARPORT=y
diff -Naurp linux-2.2.26-vanilla/arch/i386/config.in linux-2.2.27-pre1/arch/i386/config.in
--- linux-2.2.26-vanilla/arch/i386/config.in	2001-11-02 17:39:05.000000000 +0100
+++ linux-2.2.27-pre1/arch/i386/config.in	2004-03-24 19:45:03.000000000 +0100
@@ -96,6 +96,9 @@ bool 'BSD Process Accounting' CONFIG_BSD
 bool 'Sysctl support' CONFIG_SYSCTL
 tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
 tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
+if [ "$CONFIG_BINFMT_ELF" != "n" ]; then
+  bool '   ELF binaries with a.out format interpreters or a.out libraries' CONFIG_BINFMT_ELF_AOUT
+fi
 tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
   tristate 'Kernel support for JAVA binaries (obsolete)' CONFIG_BINFMT_JAVA
@@ -131,6 +134,17 @@ if [ "$CONFIG_NET" = "y" ]; then
   source net/Config.in
 fi
 
+if [ "$CONFIG_NET" = "y" ]; then
+  mainmenu_option next_comment
+  comment 'Network device support'
+
+  bool 'Network device support' CONFIG_NETDEVICES
+  if [ "$CONFIG_NETDEVICES" = "y" ]; then
+    source drivers/net/Config.in
+  fi
+  endmenu
+fi
+
 source drivers/telephony/Config.in
 
 mainmenu_option next_comment
@@ -145,17 +159,6 @@ endmenu
 
 source drivers/i2o/Config.in
 
-if [ "$CONFIG_NET" = "y" ]; then
-  mainmenu_option next_comment
-  comment 'Network device support'
-
-  bool 'Network device support' CONFIG_NETDEVICES
-  if [ "$CONFIG_NETDEVICES" = "y" ]; then
-    source drivers/net/Config.in
-  fi
-  endmenu
-fi
-
 source net/ax25/Config.in
 
 source net/irda/Config.in
diff -Naurp linux-2.2.26-vanilla/arch/i386/defconfig linux-2.2.27-pre1/arch/i386/defconfig
--- linux-2.2.26-vanilla/arch/i386/defconfig	2001-03-25 18:37:29.000000000 +0200
+++ linux-2.2.27-pre1/arch/i386/defconfig	2004-03-24 19:45:02.000000000 +0100
@@ -56,9 +56,10 @@ CONFIG_X86_LOCAL_APIC=y
 CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
-CONFIG_BINFMT_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
 CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_MISC=y
+# CONFIG_BINFMT_ELF_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
 # CONFIG_PARPORT is not set
 # CONFIG_APM is not set
 # CONFIG_TOSHIBA is not set
diff -Naurp linux-2.2.26-vanilla/arch/i386/kernel/bluesmoke.c linux-2.2.27-pre1/arch/i386/kernel/bluesmoke.c
--- linux-2.2.26-vanilla/arch/i386/kernel/bluesmoke.c	2002-05-21 01:32:34.000000000 +0200
+++ linux-2.2.27-pre1/arch/i386/kernel/bluesmoke.c	2004-03-24 19:45:02.000000000 +0100
@@ -6,6 +6,8 @@
 #include <asm/processor.h> 
 #include <asm/msr.h>
 
+static int mce_disabled = 0;
+
 /*
  *	Machine Check Handler For PII/PIII
  */
@@ -129,6 +131,9 @@ void __init intel_mcheck_init(struct cpu
 	
 	if(c->x86 == 5)
 	{
+		/* Default P5 to off as its often misconnected */
+		if(mce_disabled != -1)
+			return;
 		machine_check_vector = pentium_machine_check;
 		wmb();
 		/* Read registers before enabling */
@@ -207,7 +212,6 @@ static void __init winchip_mcheck_init(s
  */
 
 
-static int mce_disabled = 0;
 
 void __init mcheck_init(struct cpuinfo_x86 *c)
 {
@@ -237,4 +241,12 @@ static int __init mcheck_disable(char *s
 	mce_disabled = 1;
 	return 0;
 }
+
+static int __init mcheck_enable(char *str)
+{
+	mce_disabled = -1;
+	return 0;
+}
+
 __setup("nomce", mcheck_disable);
+__setup("mce", mcheck_enable);
diff -Naurp linux-2.2.26-vanilla/arch/i386/kernel/smp.c linux-2.2.27-pre1/arch/i386/kernel/smp.c
--- linux-2.2.26-vanilla/arch/i386/kernel/smp.c	2001-03-25 18:37:29.000000000 +0200
+++ linux-2.2.27-pre1/arch/i386/kernel/smp.c	2004-03-24 19:45:03.000000000 +0100
@@ -737,12 +737,6 @@ void __init enable_local_APIC(void)
 {
 	unsigned long value;
 
- 	value = apic_read(APIC_SPIV);
- 	value |= (1<<8);		/* Enable APIC (bit==1) */
- 	value &= ~(1<<9);		/* Enable focus processor (bit==0) */
-	value |= 0xff;			/* Set spurious IRQ vector to 0xff */
- 	apic_write(APIC_SPIV,value);
-
 	/*
 	 * Set Task Priority to 'accept all'
 	 */
@@ -762,6 +756,12 @@ void __init enable_local_APIC(void)
 	value |= SET_APIC_DFR(0xf);
  	apic_write(APIC_DFR, value);
 
+	value = apic_read(APIC_SPIV);
+	value |= (1<<8);		/* Enable APIC (bit==1) */
+	value &= ~(1<<9);		/* Enable focus processor (bit==0) */
+	value |= 0xff;			/* Set spurious IRQ vector to 0xff */
+	apic_write(APIC_SPIV,value);
+
 	udelay(100);			/* B safe */
 }
 
@@ -810,7 +810,6 @@ unsigned long __init init_smp_mappings(u
 	return memory_start;
 }
 
-#ifdef CONFIG_X86_TSC
 /*
  * TSC synchronization.
  *
@@ -1010,8 +1009,6 @@ static void __init synchronize_tsc_ap (v
 }
 #undef NR_LOOPS
 
-#endif
-
 extern void calibrate_delay(void);
 
 void __init smp_callin(void)
@@ -1098,12 +1095,11 @@ void __init smp_callin(void)
 	 */
 	set_bit(cpuid, (unsigned long *)&cpu_callin_map[0]);
 
-#ifdef CONFIG_X86_TSC
 	/*
 	 *	Synchronize the TSC with the BP
 	 */
- 	synchronize_tsc_ap ();
-#endif
+	if (boot_cpu_data.x86_capability & X86_FEATURE_TSC)
+		synchronize_tsc_ap ();
 }
 
 int cpucount = 0;
@@ -1640,13 +1636,11 @@ void __init smp_boot_cpus(void)
 
 smp_done:
 
-#ifdef CONFIG_X86_TSC
 	/*
 	 * Synchronize the TSC with the AP
 	 */
-	if (cpucount)
+	if (boot_cpu_data.x86_capability & X86_FEATURE_TSC && cpucount)
 	 	synchronize_tsc_bp();
-#endif
 }
 
 /*
diff -Naurp linux-2.2.26-vanilla/arch/m68k/config.in linux-2.2.27-pre1/arch/m68k/config.in
--- linux-2.2.26-vanilla/arch/m68k/config.in	2001-03-25 18:31:50.000000000 +0200
+++ linux-2.2.27-pre1/arch/m68k/config.in	2004-03-24 19:45:02.000000000 +0100
@@ -84,6 +84,9 @@ bool 'BSD Process Accounting' CONFIG_BSD
 bool 'Sysctl support' CONFIG_SYSCTL
 tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
 tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
+if [ "$CONFIG_BINFMT_ELF" != "n" ]; then
+  bool '   ELF binaries with a.out format interpreters or a.out libraries' CONFIG_BINFMT_ELF_AOUT
+fi
 tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
 
 if [ "$CONFIG_AMIGA" = "y" ]; then
diff -Naurp linux-2.2.26-vanilla/arch/m68k/defconfig linux-2.2.27-pre1/arch/m68k/defconfig
--- linux-2.2.26-vanilla/arch/m68k/defconfig	2001-03-25 18:31:50.000000000 +0200
+++ linux-2.2.27-pre1/arch/m68k/defconfig	2004-03-24 19:45:02.000000000 +0100
@@ -38,8 +38,9 @@ CONFIG_M68040=y
 CONFIG_NET=y
 CONFIG_SYSVIPC=y
 CONFIG_SYSCTL=y
-CONFIG_BINFMT_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
 CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_ELF_AOUT is not set
 CONFIG_ZORRO=y
 # CONFIG_AMIGA_GSP is not set
 # CONFIG_GSP_RESOLVER is not set
diff -Naurp linux-2.2.26-vanilla/arch/mips/config.in linux-2.2.27-pre1/arch/mips/config.in
--- linux-2.2.26-vanilla/arch/mips/config.in	2001-03-25 18:31:47.000000000 +0200
+++ linux-2.2.27-pre1/arch/mips/config.in	2004-03-24 19:45:02.000000000 +0100
@@ -85,6 +85,7 @@ if [ "$CONFIG_CPU_LITTLE_ENDIAN" = "n" ]
 fi
 define_bool CONFIG_BINFMT_AOUT n
 define_bool CONFIG_BINFMT_ELF y
+bool 'ELF binaries with a.out format interpreters or a.out libraries' CONFIG_BINFMT_ELF_AOUT
 tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
   tristate 'Kernel support for JAVA binaries (obsolete)' CONFIG_BINFMT_JAVA
diff -Naurp linux-2.2.26-vanilla/arch/mips/defconfig linux-2.2.27-pre1/arch/mips/defconfig
--- linux-2.2.26-vanilla/arch/mips/defconfig	2001-03-25 18:31:48.000000000 +0200
+++ linux-2.2.27-pre1/arch/mips/defconfig	2004-03-24 19:45:02.000000000 +0100
@@ -38,6 +38,7 @@ CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_ELF_KERNEL=y
 # CONFIG_BINFMT_AOUT is not set
 CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_ELF_AOUT is not set
 # CONFIG_BINFMT_MISC is not set
 CONFIG_NET=y
 CONFIG_SYSVIPC=y
diff -Naurp linux-2.2.26-vanilla/arch/mips/kernel/irixelf.c linux-2.2.27-pre1/arch/mips/kernel/irixelf.c
--- linux-2.2.26-vanilla/arch/mips/kernel/irixelf.c	2001-11-02 17:39:05.000000000 +0100
+++ linux-2.2.27-pre1/arch/mips/kernel/irixelf.c	2004-03-24 19:45:02.000000000 +0100
@@ -9,6 +9,7 @@
  * Copyright 1993, 1994: Eric Youngdale (ericy@cais.com).
  */
 
+#include <linux/config.h>
 #include <linux/module.h>
 
 #include <linux/fs.h>
@@ -50,7 +51,9 @@ extern int dump_fpu (elf_fpregset_t *);
 static struct linux_binfmt irix_format = {
 	module:		THIS_MODULE,
 	load_binary:	load_irix_binary,
+#ifdef CONFIG_BINFMT_ELF_AOUT
 	load_shlib:	load_irix_library,
+#endif
 	core_dump:	irix_core_dump,
 	min_coredump:	PAGE_SIZE,
 };
@@ -817,6 +820,7 @@ out_phdata:
 	return retval;
 }
 
+#ifdef CONFIG_BINFMT_ELF_AOUT
 /* This is really simpleminded and specialized - we are loading an
  * a.out library that is given an ELF header.
  */
@@ -915,6 +919,7 @@ static int load_irix_library(struct file
 	kfree(elf_phdata);
 	return 0;
 }
+#endif
 
 /* Called through irix_syssgi() to map an elf image given an FD,
  * a phdr ptr USER_PHDRP in userspace, and a count CNT telling how many
diff -Naurp linux-2.2.26-vanilla/arch/ppc/config.in linux-2.2.27-pre1/arch/ppc/config.in
--- linux-2.2.26-vanilla/arch/ppc/config.in	2001-11-02 17:39:05.000000000 +0100
+++ linux-2.2.27-pre1/arch/ppc/config.in	2004-03-24 19:45:02.000000000 +0100
@@ -69,6 +69,7 @@ bool 'BSD Process Accounting' CONFIG_BSD
 # only elf supported, a.out is not -- Cort
 define_bool CONFIG_BINFMT_ELF y
 define_bool CONFIG_KERNEL_ELF y
+bool 'ELF binaries with a.out format interpreters or a.out libraries' CONFIG_BINFMT_ELF_AOUT
 tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
 tristate 'Kernel support for JAVA binaries (obsolete)' CONFIG_BINFMT_JAVA
 
diff -Naurp linux-2.2.26-vanilla/arch/ppc/defconfig linux-2.2.27-pre1/arch/ppc/defconfig
--- linux-2.2.26-vanilla/arch/ppc/defconfig	2001-03-25 18:31:49.000000000 +0200
+++ linux-2.2.27-pre1/arch/ppc/defconfig	2004-03-24 19:45:02.000000000 +0100
@@ -34,8 +34,9 @@ CONFIG_SYSCTL=y
 CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_ELF_AOUT is not set
 CONFIG_KERNEL_ELF=y
-CONFIG_BINFMT_MISC=m
+# CONFIG_BINFMT_MISC is not set
 # CONFIG_BINFMT_JAVA is not set
 CONFIG_PARPORT=m
 # CONFIG_PARPORT_PC is not set
diff -Naurp linux-2.2.26-vanilla/arch/s390/config.in linux-2.2.27-pre1/arch/s390/config.in
--- linux-2.2.26-vanilla/arch/s390/config.in	2001-03-25 18:37:30.000000000 +0200
+++ linux-2.2.27-pre1/arch/s390/config.in	2004-03-24 19:45:02.000000000 +0100
@@ -40,6 +40,9 @@ bool 'System V IPC' CONFIG_SYSVIPC
 bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
 bool 'Sysctl support' CONFIG_SYSCTL
 tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
+if [ "$CONFIG_BINFMT_ELF" != "n" ]; then
+  bool '   ELF binaries with a.out format interpreters or a.out libraries' CONFIG_BINFMT_ELF_AOUT
+fi
 
 endmenu
 
diff -Naurp linux-2.2.26-vanilla/arch/s390/defconfig linux-2.2.27-pre1/arch/s390/defconfig
--- linux-2.2.26-vanilla/arch/s390/defconfig	2002-05-21 01:32:34.000000000 +0200
+++ linux-2.2.27-pre1/arch/s390/defconfig	2004-03-24 19:45:02.000000000 +0100
@@ -34,6 +34,7 @@ CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_ELF_AOUT is not set
 
 #
 # S/390 block device drivers
diff -Naurp linux-2.2.26-vanilla/arch/sparc/config.in linux-2.2.27-pre1/arch/sparc/config.in
--- linux-2.2.26-vanilla/arch/sparc/config.in	2002-09-16 18:26:11.000000000 +0200
+++ linux-2.2.27-pre1/arch/sparc/config.in	2004-03-24 19:45:02.000000000 +0100
@@ -74,6 +74,9 @@ bool 'BSD Process Accounting' CONFIG_BSD
 bool 'Sysctl support' CONFIG_SYSCTL
 tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
 tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
+if [ "$CONFIG_BINFMT_ELF" != "n" ]; then
+  bool '   ELF binaries with a.out format interpreters or a.out libraries' CONFIG_BINFMT_ELF_AOUT
+fi
 tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
   tristate 'Kernel support for JAVA binaries (obsolete)' CONFIG_BINFMT_JAVA
diff -Naurp linux-2.2.26-vanilla/arch/sparc/defconfig linux-2.2.27-pre1/arch/sparc/defconfig
--- linux-2.2.26-vanilla/arch/sparc/defconfig	2001-03-25 18:37:30.000000000 +0200
+++ linux-2.2.27-pre1/arch/sparc/defconfig	2004-03-24 19:45:02.000000000 +0100
@@ -78,9 +78,10 @@ CONFIG_NET=y
 CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
-CONFIG_BINFMT_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
 CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_MISC=m
+# CONFIG_BINFMT_ELF_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
 CONFIG_BINFMT_JAVA=m
 CONFIG_SUNOS_EMUL=y
 
diff -Naurp linux-2.2.26-vanilla/arch/sparc64/config.in linux-2.2.27-pre1/arch/sparc64/config.in
--- linux-2.2.26-vanilla/arch/sparc64/config.in	2002-05-21 01:32:34.000000000 +0200
+++ linux-2.2.27-pre1/arch/sparc64/config.in	2004-03-24 19:45:02.000000000 +0100
@@ -62,6 +62,9 @@ bool 'BSD Process Accounting' CONFIG_BSD
 bool 'Sysctl support' CONFIG_SYSCTL
 bool 'Kernel support for Linux/Sparc 32bit binary compatibility' CONFIG_SPARC32_COMPAT
 tristate 'Kernel support for 64-bit ELF binaries' CONFIG_BINFMT_ELF
+if [ "$CONFIG_BINFMT_ELF" != "n" ]; then
+  bool '   ELF binaries with a.out format interpreters or a.out libraries' CONFIG_BINFMT_ELF_AOUT
+fi
 if [ "$CONFIG_SPARC32_COMPAT" != "n" ]; then
   tristate 'Kernel support for 32-bit ELF binaries' CONFIG_BINFMT_ELF32
   bool 'Kernel support for 32-bit (ie. SunOS) a.out binaries' CONFIG_BINFMT_AOUT32
diff -Naurp linux-2.2.26-vanilla/arch/sparc64/defconfig linux-2.2.27-pre1/arch/sparc64/defconfig
--- linux-2.2.26-vanilla/arch/sparc64/defconfig	2001-03-25 18:37:30.000000000 +0200
+++ linux-2.2.27-pre1/arch/sparc64/defconfig	2004-03-24 19:45:02.000000000 +0100
@@ -86,10 +86,11 @@ CONFIG_SYSVIPC=y
 CONFIG_SYSCTL=y
 CONFIG_SPARC32_COMPAT=y
 CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_ELF_AOUT is not set
 CONFIG_BINFMT_ELF32=y
 # CONFIG_BINFMT_AOUT32 is not set
-CONFIG_BINFMT_MISC=m
-CONFIG_BINFMT_JAVA=m
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_BINFMT_JAVA is not set
 # CONFIG_SUNOS_EMUL is not set
 CONFIG_SOLARIS_EMUL=m
 CONFIG_PARPORT=m
diff -Naurp linux-2.2.26-vanilla/drivers/net/8139too.c linux-2.2.27-pre1/drivers/net/8139too.c
--- linux-2.2.26-vanilla/drivers/net/8139too.c	2004-03-24 18:26:56.000000000 +0100
+++ linux-2.2.27-pre1/drivers/net/8139too.c	2004-03-24 19:45:03.000000000 +0100
@@ -151,6 +151,7 @@ an MMIO register read.
 #include <linux/rtnetlink.h>
 #include <linux/delay.h>
 #include <asm/io.h>
+#include <asm/semaphore.h>
 #include <asm/uaccess.h>
 
 #define RTL8139_DRIVER_NAME   DRV_NAME " Fast Ethernet driver " DRV_VERSION
@@ -725,6 +726,7 @@ struct rtl8139_private {
 	struct semaphore thr_exited;
 	u32 rx_config;
 	struct rtl_extra_stats xstats;
+	struct semaphore mdio_sem;
 };
 
 #define RTL8139_AUTHOR "Jeff Garzik <jgarzik@mandrakesoft.com>"
@@ -1101,6 +1103,7 @@ static int rtl8139_init_one (struct pci_
 	spin_lock_init (&tp->lock);
 	init_waitqueue_head (&tp->thr_wait);
 	init_MUTEX_LOCKED (&tp->thr_exited);
+	init_MUTEX (&tp->mdio_sem);
 
 	if (rtl8139_device_count == 0) {
 		printk (KERN_INFO "%s: " RTL8139_DRIVER_NAME " " RTL8139_AUTHOR "\n", dev->name);
@@ -1743,7 +1746,6 @@ static int rtl8139_thread (void *data)
 	current->comm[sizeof(current->comm) - 1] = '\0';
 
 	while (1) {
-		rtl8139_thread_iter (dev, tp, tp->mmio_addr);
 		timeout = next_tick;
 		do {
 			timeout = interruptible_sleep_on_timeout (&tp->thr_wait, timeout);
@@ -1752,8 +1754,10 @@ static int rtl8139_thread (void *data)
 		if (signal_pending (current))
 			break;
 
-		rtnl_lock ();
-		rtnl_unlock ();
+		if (down_interruptible (&tp->mdio_sem))
+			break;
+		rtl8139_thread_iter (dev, tp, tp->mmio_addr);
+		up (&tp->mdio_sem);
 	}
 
 	up (&tp->thr_exited);
@@ -2259,10 +2263,10 @@ static int rtl8139_close (struct device 
 	if (tp->thr_pid >= 0) {
 		ret = kill_proc (tp->thr_pid, SIGTERM, 1);
 		if (ret) {
-			printk (KERN_ERR "%s: unable to signal thread\n", dev->name);
-			return ret;
+			printk (KERN_ERR "%s: unable to signal thread: %d\n", dev->name, ret);
+		} else {
+			down (&tp->thr_exited);
 		}
-		down (&tp->thr_exited);
 	}
 
 	DPRINTK ("%s: Shutting down ethercard, status was 0x%4.4x.\n",
@@ -2345,7 +2349,7 @@ static int netdev_ioctl (struct device *
 {
 	struct rtl8139_private *tp = dev->priv;
 	struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data;
-	int rc = 0;
+	int rc;
 	int phy = tp->phys[0] & 0x3f;
 
 	DPRINTK ("ENTER\n");
@@ -2366,14 +2370,17 @@ static int netdev_ioctl (struct device *
 
 	case SIOCGMIIREG:	/* Read the specified MII register. */
 	case SIOCDEVPRIVATE+1:	/* binary compat, remove in 2.5 */
+		if (down_interruptible (&tp->mdio_sem))
+			goto err_out;
 		data->val_out = mdio_read (dev, data->phy_id, data->reg_num);
+		up (&tp->mdio_sem);
 		break;
 
 	case SIOCSMIIREG:	/* Write the specified MII register */
 	case SIOCDEVPRIVATE+2:	/* binary compat, remove in 2.5 */
 		if (!capable (CAP_NET_ADMIN)) {
 			rc = -EPERM;
-			break;
+			goto err_out;
 		}
 
 		if (data->phy_id == phy) {
@@ -2388,14 +2395,20 @@ static int netdev_ioctl (struct device *
 			case 4: /* tp->advertising = value; */ break;
 			}
 		}
+		if (down_interruptible (&tp->mdio_sem))
+			goto err_out;
 		mdio_write(dev, data->phy_id, data->reg_num, data->val_in);
+		up (&tp->mdio_sem);
 		break;
 
 	default:
 		rc = -EOPNOTSUPP;
-		break;
+		goto err_out;
 	}
 
+ 	rc = 0;
+ 
+ err_out:
 	DPRINTK ("EXIT, returning %d\n", rc);
 	return rc;
 }
diff -Naurp linux-2.2.26-vanilla/drivers/net/eepro100.c linux-2.2.27-pre1/drivers/net/eepro100.c
--- linux-2.2.26-vanilla/drivers/net/eepro100.c	2002-05-21 01:32:35.000000000 +0200
+++ linux-2.2.27-pre1/drivers/net/eepro100.c	2004-03-24 19:45:02.000000000 +0100
@@ -183,6 +183,9 @@ MODULE_PARM(multicast_filter_limit, "i")
 #ifndef PCI_DEVICE_ID_INTEL_ID2449
 #define PCI_DEVICE_ID_INTEL_ID2449 0x2449
 #endif
+#ifndef PCI_DEVICE_ID_INTEL_82820FW_4
+#define PCI_DEVICE_ID_INTEL_82820FW_4 0x2449
+#endif
 
 /* The total I/O port extent of the board.
    The registers beyond 0x18 only exist on the i82558. */
@@ -350,6 +353,10 @@ struct pci_id_info {
 	  PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ID2449,
 	  0
 	},
+	{ "Intel Corporation 82820 Onboard 10/100",
+	  PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82820FW_4,
+	  0
+	},
 	{0,}						/* 0 terminated list. */
 };
 
diff -Naurp linux-2.2.26-vanilla/drivers/pci/quirks.c linux-2.2.27-pre1/drivers/pci/quirks.c
--- linux-2.2.26-vanilla/drivers/pci/quirks.c	2002-05-21 01:32:35.000000000 +0200
+++ linux-2.2.27-pre1/drivers/pci/quirks.c	2004-03-24 19:45:03.000000000 +0100
@@ -211,6 +211,11 @@ __initfunc(static void quirk_vialatency(
  * crashes when we use 100% memory bandwidth)
  *
  * VIA 8363 chipset:
+ * VIA 8363 rev 0x81/0x84 (KL133/KM133) Northbridges:
+ * - bits 6, 7 at offset 0x55 need to be turned off
+ *	(clearing bit 5 on those Northbridges seems
+ *	to trigger a bug in its integrated ProSavage video card, which
+ *	causes screen corruption. We only clear bits 6 and 7 for that chipset).
  * VIA 8363,8622,8361 Northbridges:
  *  - bits  5, 6, 7 at offset 0x55 need to be turned off
  * VIA 8367 (KT266x) Northbridges:
@@ -221,15 +226,22 @@ __initfunc(static void pci_fixup_via_ath
 {
  	u8 v;
 	int where = 0x55;
+	u8 revision;
+	int mask = 0x1f;
 
+	pci_read_config_byte(d, PCI_REVISION_ID, &revision);
 	if (d->device == PCI_DEVICE_ID_VIA_8367_0) {
 	        where = 0x95; /* the memory write queue timer register is 
                                 different for the kt266x's: 0x95 not 0x55 */
+	} else if (d->device == PCI_DEVICE_ID_VIA_8363_0) {
+		if ( revision == 0x81 || revision == 0x84 )	/* KL133/KM133 */
+			mask = 0x3f;
 	}
 	pci_read_config_byte(d, where, &v);
-	if (v & 0xe0) {
-		printk("Trying to stomp on Athlon bug...\n");
-		v &= 0x1f; /* clear bits 5, 6, 7 */
+	if (v & ~mask) {
+		printk("Disabling VIA memory write queue (PCI ID %04x, rev %02x): [%02x] %02x & %02x -> %02x\n",
+			d->device, revision, where, v, mask, v & mask);
+		v &= mask;
 		pci_write_config_byte(d, where, v);
 	}
 }
@@ -253,6 +265,7 @@ static struct quirk_name quirk_names[] _
 	{ quirk_passive_release,"Passive release enable" },
 	{ quirk_isa_dma_hangs,	"Work around ISA DMA hangs" },
 	{ pci_fixup_via_athlon_bug, "Athlon/VIA fixup" },
+	{ quirk_vialatency, "VIA southbridge workaround" },
 };
 
 
diff -Naurp linux-2.2.26-vanilla/fs/Config.in linux-2.2.27-pre1/fs/Config.in
--- linux-2.2.26-vanilla/fs/Config.in	2001-03-25 18:37:38.000000000 +0200
+++ linux-2.2.27-pre1/fs/Config.in	2004-03-24 19:45:03.000000000 +0100
@@ -48,7 +48,7 @@ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; the
   fi    
 fi
 tristate 'ROM filesystem support' CONFIG_ROMFS_FS
-tristate 'Second extended fs support' CONFIG_EXT2_FS
+tristate 'Ext2 filesystem support' CONFIG_EXT2_FS
 tristate 'System V and Coherent filesystem support' CONFIG_SYSV_FS
 tristate 'UFS filesystem support' CONFIG_UFS_FS
 if [ "$CONFIG_UFS_FS" != "n" ]; then
diff -Naurp linux-2.2.26-vanilla/fs/binfmt_elf.c linux-2.2.27-pre1/fs/binfmt_elf.c
--- linux-2.2.26-vanilla/fs/binfmt_elf.c	2002-09-16 18:26:13.000000000 +0200
+++ linux-2.2.27-pre1/fs/binfmt_elf.c	2004-03-24 19:45:02.000000000 +0100
@@ -40,7 +40,9 @@
 #include <linux/elf.h>
 
 static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs);
+#ifdef CONFIG_BINFMT_ELF_AOUT
 static int load_elf_library(struct file *file);
+#endif
 extern int dump_fpu (struct pt_regs *, elf_fpregset_t *);
 extern void dump_thread(struct pt_regs *, struct user *);
 
@@ -66,7 +68,9 @@ static int elf_core_dump(long signr, str
 static struct linux_binfmt elf_format = {
 	module:		THIS_MODULE,
 	load_binary:	load_elf_binary,
+#ifdef CONFIG_BINFMT_ELF_AOUT
 	load_shlib:	load_elf_library,
+#endif
 	core_dump:	elf_core_dump,
 	min_coredump:	ELF_EXEC_PAGESIZE,
 };
@@ -359,6 +363,7 @@ out:
 	return error;
 }
 
+#ifdef CONFIG_BINFMT_ELF_AOUT
 static unsigned long load_aout_interp(struct exec * interp_ex,
 			     struct dentry * interpreter_dentry)
 {
@@ -404,6 +409,7 @@ static unsigned long load_aout_interp(st
 out:
 	return elf_entry;
 }
+#endif
 
 /*
  * These are the functions used to load ELF style executables and shared
@@ -411,7 +417,9 @@ out:
  */
 
 #define INTERPRETER_NONE 0
+#ifdef CONFIG_BINFMT_ELF_AOUT
 #define INTERPRETER_AOUT 1
+#endif
 #define INTERPRETER_ELF 2
 
 
@@ -435,7 +443,9 @@ static int load_elf_binary(struct linux_
 	struct elfhdr elf_ex;
 	struct elfhdr interp_elf_ex;
   	struct exec interp_ex;
+#ifdef CONFIG_BINFMT_ELF_AOUT
 	char passed_fileno[6];
+#endif
 
 	/* Get the exec-header */
 	elf_ex = *((struct elfhdr *) bprm->buf);
@@ -563,6 +573,7 @@ static int load_elf_binary(struct linux_
 
 	/* Some simple consistency checks for the interpreter */
 	if (elf_interpreter) {
+#ifdef CONFIG_BINFMT_ELF_AOUT
 		interpreter_type = INTERPRETER_ELF | INTERPRETER_AOUT;
 
 		/* Now figure out which format our binary is */
@@ -570,6 +581,9 @@ static int load_elf_binary(struct linux_
 		    (N_MAGIC(interp_ex) != ZMAGIC) &&
 		    (N_MAGIC(interp_ex) != QMAGIC))
 			interpreter_type = INTERPRETER_ELF;
+#else
+		interpreter_type = INTERPRETER_ELF;
+#endif
 
 		if (interp_elf_ex.e_ident[0] != 0x7f ||
 		    strncmp(&interp_elf_ex.e_ident[1], "ELF", 3) != 0)
@@ -579,17 +593,20 @@ static int load_elf_binary(struct linux_
 		if (!interpreter_type)
 			goto out_free_dentry;
 
+#ifdef CONFIG_BINFMT_ELF_AOUT
 		/* Make sure only one type was selected */
 		if ((interpreter_type & INTERPRETER_ELF) &&
 		     interpreter_type != INTERPRETER_ELF) {
 			printk(KERN_WARNING "ELF: Ambiguous type, using ELF\n");
 			interpreter_type = INTERPRETER_ELF;
 		}
+#endif
 	}
 
 	/* OK, we are done with that, now set up the arg stuff,
 	   and then start this sucker up */
 
+#ifdef CONFIG_BINFMT_ELF_AOUT
 	if (!bprm->sh_bang) {
 		char * passed_p;
 
@@ -606,6 +623,7 @@ static int load_elf_binary(struct linux_
 		if ((long)bprm->p < 0)
 			goto out_free_dentry;
 	}
+#endif
 
 	/* Flush all traces of the currently running executable */
 	retval = flush_old_exec(bprm);
@@ -699,10 +717,12 @@ static int load_elf_binary(struct linux_
 	end_data += load_bias;
 
 	if (elf_interpreter) {
+#ifdef CONFIG_BINFMT_ELF_AOUT
 		if (interpreter_type == INTERPRETER_AOUT)
 			elf_entry = load_aout_interp(&interp_ex,
 						     interpreter_dentry);
 		else
+#endif
 			elf_entry = load_elf_interp(&interp_elf_ex,
 						    interpreter_dentry,
 						    &interp_load_addr);
@@ -723,7 +743,9 @@ static int load_elf_binary(struct linux_
 
 	kfree(elf_phdata);
 
+#ifdef CONFIG_BINFMT_ELF_AOUT
 	if (interpreter_type != INTERPRETER_AOUT)
+#endif
 		sys_close(elf_exec_fileno);
 
 	set_binfmt(&elf_format);
@@ -742,14 +764,20 @@ static int load_elf_binary(struct linux_
 			(interpreter_type == INTERPRETER_ELF ? &elf_ex : NULL),
 			load_addr, load_bias,
 			interp_load_addr,
+#ifdef CONFIG_BINFMT_ELF_AOUT
 			(interpreter_type == INTERPRETER_AOUT ? 0 : 1));
+#else
+			1);
+#endif
 	if (!bprm->p) {
 		force_sig(SIGSEGV, current);
 		return 0;
 	}
+#ifdef CONFIG_BINFMT_ELF_AOUT
 	/* N.B. passed_fileno might not be initialized? */
 	if (interpreter_type == INTERPRETER_AOUT)
 		current->mm->arg_start += strlen(passed_fileno) + 1;
+#endif
 	current->mm->start_brk = current->mm->brk = elf_brk;
 	current->mm->end_code = end_code;
 	current->mm->start_code = start_code;
@@ -814,9 +842,9 @@ out_free_ph:
 	goto out;
 }
 
+#ifdef CONFIG_BINFMT_ELF_AOUT
 /* This is really simpleminded and specialized - we are loading an
    a.out library that is given an ELF header. */
-
 static int load_elf_library(struct file *file)
 {
 	struct dentry * dentry;
@@ -904,6 +932,7 @@ out_free_ph:
 out_putf:
 	return error;
 }
+#endif
 
 /*
  * Note that some platforms still use traditional core dumps and not
diff -Naurp linux-2.2.26-vanilla/fs/exec.c linux-2.2.27-pre1/fs/exec.c
--- linux-2.2.26-vanilla/fs/exec.c	2001-11-02 17:39:08.000000000 +0100
+++ linux-2.2.27-pre1/fs/exec.c	2004-03-24 19:45:02.000000000 +0100
@@ -170,6 +170,7 @@ out:
  */
 asmlinkage int sys_uselib(const char * library)
 {
+#if defined(CONFIG_BINFMT_AOUT) || defined(CONFIG_BINFMT_ELF_AOUT)
 	int retval;
 	struct file * file;
 	struct linux_binfmt * fmt;
@@ -207,6 +208,9 @@ out_fput:
 out:
 	unlock_kernel();
   	return retval;
+#else
+	return -ENOSYS;
+#endif
 }
 
 /*
diff -Naurp linux-2.2.26-vanilla/fs/open.c linux-2.2.27-pre1/fs/open.c
--- linux-2.2.26-vanilla/fs/open.c	2001-11-02 17:39:08.000000000 +0100
+++ linux-2.2.27-pre1/fs/open.c	2004-03-24 19:45:03.000000000 +0100
@@ -262,7 +262,8 @@ asmlinkage int sys_utimes(char * filenam
 		newattrs.ia_mtime = times[1].tv_sec;
 		newattrs.ia_valid |= ATTR_ATIME_SET | ATTR_MTIME_SET;
 	} else {
-		if ((error = permission(inode,MAY_WRITE)) != 0)
+		if (current->fsuid != inode->i_uid &&
+		    (error = permission(inode,MAY_WRITE)) != 0)
 			goto dput_and_out;
 	}
 	error = notify_change(dentry, &newattrs);
diff -Naurp linux-2.2.26-vanilla/include/linux/sysctl.h linux-2.2.27-pre1/include/linux/sysctl.h
--- linux-2.2.26-vanilla/include/linux/sysctl.h	2004-03-24 18:27:12.000000000 +0100
+++ linux-2.2.27-pre1/include/linux/sysctl.h	2004-03-24 19:45:03.000000000 +0100
@@ -69,45 +69,45 @@ enum
 /* CTL_KERN names: */
 enum
 {
-	KERN_OSTYPE=1,		/* string: system version */
-	KERN_OSRELEASE=2,	/* string: system release */
-	KERN_OSREV=3,		/* int: system revision */
-	KERN_VERSION=4,		/* string: compile time info */
-	KERN_SECUREMASK=5,	/* struct: maximum rights mask */
-	KERN_PROF=6,		/* table: profiling information */
+	KERN_OSTYPE=1,			/* string: system version */
+	KERN_OSRELEASE=2,		/* string: system release */
+	KERN_OSREV=3,			/* int: system revision */
+	KERN_VERSION=4,			/* string: compile time info */
+	KERN_SECUREMASK=5,		/* struct: maximum rights mask */
+	KERN_PROF=6,			/* table: profiling information */
 	KERN_NODENAME=7,
 	KERN_DOMAINNAME=8,
 
-	KERN_CAP_BSET=14,	/* int: capability bounding set */
-	KERN_PANIC=15,		/* int: panic timeout */
-	KERN_REALROOTDEV=16,	/* real root device to mount after initrd */
-
-	KERN_JAVA_INTERPRETER=19, /* path to Java(tm) interpreter */
-	KERN_JAVA_APPLETVIEWER=20, /* path to Java(tm) appletviewer */
-	KERN_SPARC_REBOOT=21,	/* reboot command on Sparc */
-	KERN_CTLALTDEL=22,	/* int: allow ctl-alt-del to reboot */
-	KERN_PRINTK=23,		/* struct: control printk logging parameters */
-	KERN_NAMETRANS=24,	/* Name translation */
-	KERN_PPC_HTABRECLAIM=25, /* turn htab reclaimation on/off on PPC */
-	KERN_PPC_ZEROPAGED=26,	/* turn idle page zeroing on/off on PPC */
-	KERN_PPC_POWERSAVE_NAP=27, /* use nap mode for power saving */
+	KERN_CAP_BSET=14,		/* int: capability bounding set */
+	KERN_PANIC=15,			/* int: panic timeout */
+	KERN_REALROOTDEV=16,		/* real root device to mount after initrd */
+
+	KERN_JAVA_INTERPRETER=19,	/* path to Java(tm) interpreter */
+	KERN_JAVA_APPLETVIEWER=20,	/* path to Java(tm) appletviewer */
+	KERN_SPARC_REBOOT=21,		/* reboot command on Sparc */
+	KERN_CTLALTDEL=22,		/* int: allow ctl-alt-del to reboot */
+	KERN_PRINTK=23,			/* struct: control printk logging parameters */
+	KERN_NAMETRANS=24,		/* Name translation */
+	KERN_PPC_HTABRECLAIM=25,	/* turn htab reclaimation on/off on PPC */
+	KERN_PPC_ZEROPAGED=26,		/* turn idle page zeroing on/off on PPC */
+	KERN_PPC_POWERSAVE_NAP=27,	/* use nap mode for power saving */
 	KERN_MODPROBE=28,
 	KERN_SG_BIG_BUFF=29,
-	KERN_ACCT=30,		/* BSD process accounting parameters */
-	KERN_PPC_L2CR=31,	/* l2cr register on PPC */
+	KERN_ACCT=30,			/* BSD process accounting parameters */
+	KERN_PPC_L2CR=31,		/* l2cr register on PPC */
 
-	KERN_RTSIGNR=32,	/* Number of rt sigs queued */
-	KERN_RTSIGMAX=33,	/* Max queuable */
+	KERN_RTSIGNR=32,		/* Number of rt sigs queued */
+	KERN_RTSIGMAX=33,		/* Max queuable */
 	
-	KERN_SHMMAX=34,         /* int: Maximum shared memory segment */
-	KERN_MSGMAX=35,         /* int: Maximum size of a messege */
-	KERN_MSGMNB=36,         /* int: Maximum message queue size */
-	KERN_MSGPOOL=37,         /* int: Maximum system message pool size */
-	KERN_SYSRQ=38,		/* int: Sysreq enable */
-	KERN_SHMALL=41,		/* int: maximum size of shared memory */
-	KERN_SPARC_STOP_A=44,	/* int: Sparc Stop-A enable */
-	KERN_HOTPLUG=49,	/* string: path to hotplug policy agent */
-	KERN_IEEE_EMULATION_WARNINGS=50 /* int: unimplemented ieee instructions */
+	KERN_SHMMAX=34,			/* int: Maximum shared memory segment */
+	KERN_MSGMAX=35,			/* int: Maximum size of a messege */
+	KERN_MSGMNB=36,			/* int: Maximum message queue size */
+	KERN_MSGPOOL=37,		/* int: Maximum system message pool size */
+	KERN_SYSRQ=38,			/* int: Sysreq enable */
+	KERN_SHMALL=41,			/* int: maximum size of shared memory */
+	KERN_SPARC_STOP_A=44,		/* int: Sparc Stop-A enable */
+	KERN_HOTPLUG=49,		/* string: path to hotplug policy agent */
+	KERN_IEEE_EMULATION_WARNINGS=50	/* int: unimplemented ieee instructions */
 };
 
 
diff -Naurp linux-2.2.26-vanilla/init/main.c linux-2.2.27-pre1/init/main.c
--- linux-2.2.26-vanilla/init/main.c	2004-03-24 18:26:54.000000000 +0100
+++ linux-2.2.27-pre1/init/main.c	2004-03-24 19:59:28.000000000 +0100
@@ -248,41 +248,41 @@ extern void reboot_setup(char *str, int 
 extern void video_setup(char *str, int *ints);
 #ifdef CONFIG_CDU31A
 extern void cdu31a_setup(char *str, int *ints);
-#endif CONFIG_CDU31A
+#endif /* CONFIG_CDU31A */
 #ifdef CONFIG_BLK_DEV_PS2
 extern void ed_setup(char *str, int *ints);
 extern void tp720_setup(char *str, int *ints);
-#endif CONFIG_BLK_DEV_PS2
+#endif /* CONFIG_BLK_DEV_PS2 */
 #ifdef CONFIG_MCD
 extern void mcd_setup(char *str, int *ints);
-#endif CONFIG_MCD
+#endif /* CONFIG_MCD */
 #ifdef CONFIG_MCDX
 extern void mcdx_setup(char *str, int *ints);
-#endif CONFIG_MCDX
+#endif /* CONFIG_MCDX */
 #ifdef CONFIG_SBPCD
 extern void sbpcd_setup(char *str, int *ints);
-#endif CONFIG_SBPCD
+#endif /* CONFIG_SBPCD */
 #ifdef CONFIG_AZTCD
 extern void aztcd_setup(char *str, int *ints);
-#endif CONFIG_AZTCD
+#endif /* CONFIG_AZTCD */
 #ifdef CONFIG_CDU535
 extern void sonycd535_setup(char *str, int *ints);
-#endif CONFIG_CDU535
+#endif /* CONFIG_CDU535 */
 #ifdef CONFIG_GSCD
 extern void gscd_setup(char *str, int *ints);
-#endif CONFIG_GSCD
+#endif /* CONFIG_GSCD */
 #ifdef CONFIG_CM206
 extern void cm206_setup(char *str, int *ints);
-#endif CONFIG_CM206
+#endif /* CONFIG_CM206 */
 #ifdef CONFIG_OPTCD
 extern void optcd_setup(char *str, int *ints);
-#endif CONFIG_OPTCD
+#endif /* CONFIG_OPTCD */
 #ifdef CONFIG_SJCD
 extern void sjcd_setup(char *str, int *ints);
-#endif CONFIG_SJCD
+#endif /* CONFIG_SJCD */
 #ifdef CONFIG_ISP16_CDI
 extern void isp16_setup(char *str, int *ints);
-#endif CONFIG_ISP16_CDI
+#endif /* CONFIG_ISP16_CDI */
 #ifdef CONFIG_BLK_DEV_RAM
 static void ramdisk_start_setup(char *str, int *ints);
 static void load_ramdisk(char *str, int *ints);
@@ -291,7 +291,7 @@ static void ramdisk_size(char *str, int 
 #ifdef CONFIG_BLK_DEV_INITRD
 static void no_initrd(char *s,int *ints);
 #endif
-#endif CONFIG_BLK_DEV_RAM
+#endif /* CONFIG_BLK_DEV_RAM */
 #ifdef CONFIG_ISDN_DRV_ICN
 extern void icn_setup(char *str, int *ints);
 #endif
@@ -460,172 +460,189 @@ static void __init profile_setup(char *s
 		prof_shift = 2;
 }
 
-
 static struct dev_name_struct {
 	const char *name;
 	const int num;
 } root_dev_names[] __initdata = {
-	{ "nfs",     0x00ff },
-	{ "loop",    0x0700 },
-	{ "hda",     0x0300 },
-	{ "hdb",     0x0340 },
-	{ "hdc",     0x1600 },
-	{ "hdd",     0x1640 },
-	{ "hde",     0x2100 },
-	{ "hdf",     0x2140 },
-	{ "hdg",     0x2200 },
-	{ "hdh",     0x2240 },
-	{ "hdi",     0x3800 },
-	{ "hdj",     0x3840 },
-	{ "hdk",     0x3900 },
-	{ "hdl",     0x3940 },
-	{ "sda",     0x0800 },
-	{ "sdb",     0x0810 },
-	{ "sdc",     0x0820 },
-	{ "sdd",     0x0830 },
-	{ "sde",     0x0840 },
-	{ "sdf",     0x0850 },
-	{ "sdg",     0x0860 },
-	{ "sdh",     0x0870 },
-	{ "sdi",     0x0880 },
-	{ "sdj",     0x0890 },
-	{ "sdk",     0x08a0 },
-	{ "sdl",     0x08b0 },
-	{ "sdm",     0x08c0 },
-	{ "sdn",     0x08d0 },
-	{ "sdo",     0x08e0 },
-	{ "sdp",     0x08f0 },
-	{ "rd/c0d0p",0x3000 },
-	{ "rd/c0d1p",0x3008 },
-	{ "rd/c0d2p",0x3010 },
-	{ "rd/c0d3p",0x3018 },
-	{ "rd/c0d4p",0x3020 },
-	{ "rd/c0d5p",0x3028 },
-	{ "rd/c0d6p",0x3030 },
-	{ "rd/c0d7p",0x3038 },
-	{ "rd/c0d8p",0x3040 },
-	{ "rd/c0d9p",0x3048 },
-	{ "rd/c0d10p",0x3050 },
-	{ "rd/c0d11p",0x3058 },
-	{ "rd/c0d12p",0x3060 },
-	{ "rd/c0d13p",0x3068 },
-	{ "rd/c0d14p",0x3070 },
-	{ "rd/c0d15p",0x3078 },
-	{ "ida/c0d0p",0x4800 },
-	{ "ida/c0d1p",0x4810 },
-	{ "ida/c0d2p",0x4820 },
-	{ "ida/c0d3p",0x4830 },
-	{ "ida/c0d4p",0x4840 },
-	{ "ida/c0d5p",0x4850 },
-	{ "ida/c0d6p",0x4860 },
-	{ "ida/c0d7p",0x4870 },
-	{ "ida/c0d8p",0x4880 },
-	{ "ida/c0d9p",0x4890 },
+	{ "nfs",       0x00ff },
+	{ "loop",      0x0700 },
+	{ "hda",       0x0300 },
+	{ "hdb",       0x0340 },
+	{ "hdc",       0x1600 },
+	{ "hdd",       0x1640 },
+	{ "hde",       0x2100 },
+	{ "hdf",       0x2140 },
+	{ "hdg",       0x2200 },
+	{ "hdh",       0x2240 },
+	{ "hdi",       0x3800 },
+	{ "hdj",       0x3840 },
+	{ "hdk",       0x3900 },
+	{ "hdl",       0x3940 },
+	{ "sda",       0x0800 },
+	{ "sdb",       0x0810 },
+	{ "sdc",       0x0820 },
+	{ "sdd",       0x0830 },
+	{ "sde",       0x0840 },
+	{ "sdf",       0x0850 },
+	{ "sdg",       0x0860 },
+	{ "sdh",       0x0870 },
+	{ "sdi",       0x0880 },
+	{ "sdj",       0x0890 },
+	{ "sdk",       0x08a0 },
+	{ "sdl",       0x08b0 },
+	{ "sdm",       0x08c0 },
+	{ "sdn",       0x08d0 },
+	{ "sdo",       0x08e0 },
+	{ "sdp",       0x08f0 },
+	{ "rd/c0d0p",  0x3000 },
+	{ "rd/c0d1p",  0x3008 },
+	{ "rd/c0d2p",  0x3010 },
+	{ "rd/c0d3p",  0x3018 },
+	{ "rd/c0d4p",  0x3020 },
+	{ "rd/c0d5p",  0x3028 },
+	{ "rd/c0d6p",  0x3030 },
+	{ "rd/c0d7p",  0x3038 },
+	{ "rd/c0d8p",  0x3040 },
+	{ "rd/c0d9p",  0x3048 },
+	{ "rd/c0d10p", 0x3050 },
+	{ "rd/c0d11p", 0x3058 },
+	{ "rd/c0d12p", 0x3060 },
+	{ "rd/c0d13p", 0x3068 },
+	{ "rd/c0d14p", 0x3070 },
+	{ "rd/c0d15p", 0x3078 },
+	{ "ida/c0d0p", 0x4800 },
+	{ "ida/c0d1p", 0x4810 },
+	{ "ida/c0d2p", 0x4820 },
+	{ "ida/c0d3p", 0x4830 },
+	{ "ida/c0d4p", 0x4840 },
+	{ "ida/c0d5p", 0x4850 },
+	{ "ida/c0d6p", 0x4860 },
+	{ "ida/c0d7p", 0x4870 },
+	{ "ida/c0d8p", 0x4880 },
+	{ "ida/c0d9p", 0x4890 },
 	{ "ida/c0d10p",0x48A0 },
 	{ "ida/c0d11p",0x48B0 },
 	{ "ida/c0d12p",0x48C0 },
 	{ "ida/c0d13p",0x48D0 },
 	{ "ida/c0d14p",0x48E0 },
 	{ "ida/c0d15p",0x48F0 },
-	{ "ada",     0x1c00 },
-	{ "adb",     0x1c10 },
-	{ "adc",     0x1c20 },
-	{ "add",     0x1c30 },
-	{ "ade",     0x1c40 },
-	{ "fd",      0x0200 },
-	{ "md",      0x0900 },	     
-	{ "xda",     0x0d00 },
-	{ "xdb",     0x0d40 },
-	{ "ram",     0x0100 },
-	{ "scd",     0x0b00 },
-	{ "mcd",     0x1700 },
-	{ "cdu535",  0x1800 },
-	{ "sonycd",  0x1800 },
-	{ "aztcd",   0x1d00 },
-	{ "cm206cd", 0x2000 },
-	{ "gscd",    0x1000 },
-	{ "sbpcd",   0x1900 },
-	{ "eda",     0x2400 },
-	{ "edb",     0x2440 },
-	{ "pda",	0x2d00 },
-	{ "pdb",	0x2d10 },
-	{ "pdc",	0x2d20 },
-	{ "pdd",	0x2d30 },
-	{ "pcd",	0x2e00 },
-	{ "pf",		0x2f00 },
+	{ "ada",       0x1c00 },
+	{ "adb",       0x1c10 },
+	{ "adc",       0x1c20 },
+	{ "add",       0x1c30 },
+	{ "ade",       0x1c40 },
+	{ "fd",        0x0200 },
+	{ "md",        0x0900 },	     
+	{ "xda",       0x0d00 },
+	{ "xdb",       0x0d40 },
+	{ "ram",       0x0100 },
+	{ "scd",       0x0b00 },
+	{ "mcd",       0x1700 },
+	{ "cdu535",    0x1800 },
+	{ "sonycd",    0x1800 },
+	{ "aztcd",     0x1d00 },
+	{ "cm206cd",   0x2000 },
+	{ "gscd",      0x1000 },
+	{ "sbpcd",     0x1900 },
+	{ "eda",       0x2400 },
+	{ "edb",       0x2440 },
+	{ "pda",       0x2d00 },
+	{ "pdb",       0x2d10 },
+	{ "pdc",       0x2d20 },
+	{ "pdd",       0x2d30 },
+	{ "pcd",       0x2e00 },
+	{ "pf",	       0x2f00 },
 	{ "apblock", APBLOCK_MAJOR << 8},
 	{ "ddv", DDV_MAJOR << 8},
 #ifdef CONFIG_MDISK
-        { "mnda", (MDISK_MAJOR << MINORBITS)},
-        { "mndb", (MDISK_MAJOR << MINORBITS) + 1},
-        { "mndc", (MDISK_MAJOR << MINORBITS) + 2},
-        { "mndd", (MDISK_MAJOR << MINORBITS) + 3},
-        { "mnde", (MDISK_MAJOR << MINORBITS) + 4},
-        { "mndf", (MDISK_MAJOR << MINORBITS) + 5},
-        { "mndg", (MDISK_MAJOR << MINORBITS) + 6},
-        { "mndh", (MDISK_MAJOR << MINORBITS) + 7},
+	{ "mnda", (MDISK_MAJOR << MINORBITS)},
+	{ "mndb", (MDISK_MAJOR << MINORBITS) + 1},
+	{ "mndc", (MDISK_MAJOR << MINORBITS) + 2},
+	{ "mndd", (MDISK_MAJOR << MINORBITS) + 3},
+	{ "mnde", (MDISK_MAJOR << MINORBITS) + 4},
+	{ "mndf", (MDISK_MAJOR << MINORBITS) + 5},
+	{ "mndg", (MDISK_MAJOR << MINORBITS) + 6},
+	{ "mndh", (MDISK_MAJOR << MINORBITS) + 7},
 #endif
 #ifdef CONFIG_DASD
-       { "dasda", (DASD_MAJOR << MINORBITS) },
-       { "dasdb", (DASD_MAJOR << MINORBITS) + (1 << 2) },
-       { "dasdc", (DASD_MAJOR << MINORBITS) + (2 << 2) },
-       { "dasdd", (DASD_MAJOR << MINORBITS) + (3 << 2) },
-       { "dasde", (DASD_MAJOR << MINORBITS) + (4 << 2) },
-       { "dasdf", (DASD_MAJOR << MINORBITS) + (5 << 2) },
-       { "dasdg", (DASD_MAJOR << MINORBITS) + (6 << 2) },
-       { "dasdh", (DASD_MAJOR << MINORBITS) + (7 << 2) },
-       { "dasdi", (DASD_MAJOR << MINORBITS) + (8 << 2) },
-       { "dasdj", (DASD_MAJOR << MINORBITS) + (9 << 2) },
-       { "dasdk", (DASD_MAJOR << MINORBITS) + (10 << 2) },
-       { "dasdl", (DASD_MAJOR << MINORBITS) + (11 << 2) },
-       { "dasdm", (DASD_MAJOR << MINORBITS) + (12 << 2) },
-       { "dasdn", (DASD_MAJOR << MINORBITS) + (13 << 2) },
-       { "dasdo", (DASD_MAJOR << MINORBITS) + (14 << 2) },
-       { "dasdp", (DASD_MAJOR << MINORBITS) + (15 << 2) },
-       { "dasdq", (DASD_MAJOR << MINORBITS) + (16 << 2) },
-       { "dasdr", (DASD_MAJOR << MINORBITS) + (17 << 2) },
-       { "dasds", (DASD_MAJOR << MINORBITS) + (18 << 2) },
-       { "dasdt", (DASD_MAJOR << MINORBITS) + (19 << 2) },
-       { "dasdu", (DASD_MAJOR << MINORBITS) + (20 << 2) },
-       { "dasdv", (DASD_MAJOR << MINORBITS) + (21 << 2) },
-       { "dasdw", (DASD_MAJOR << MINORBITS) + (22 << 2) },
-       { "dasdx", (DASD_MAJOR << MINORBITS) + (23 << 2) },
-       { "dasdy", (DASD_MAJOR << MINORBITS) + (24 << 2) },
-       { "dasdz", (DASD_MAJOR << MINORBITS) + (25 << 2) },
+	{ "dasda", (DASD_MAJOR << MINORBITS) },
+	{ "dasdb", (DASD_MAJOR << MINORBITS) + (1 << 2) },
+	{ "dasdc", (DASD_MAJOR << MINORBITS) + (2 << 2) },
+	{ "dasdd", (DASD_MAJOR << MINORBITS) + (3 << 2) },
+	{ "dasde", (DASD_MAJOR << MINORBITS) + (4 << 2) },
+	{ "dasdf", (DASD_MAJOR << MINORBITS) + (5 << 2) },
+	{ "dasdg", (DASD_MAJOR << MINORBITS) + (6 << 2) },
+	{ "dasdh", (DASD_MAJOR << MINORBITS) + (7 << 2) },
+	{ "dasdi", (DASD_MAJOR << MINORBITS) + (8 << 2) },
+	{ "dasdj", (DASD_MAJOR << MINORBITS) + (9 << 2) },
+	{ "dasdk", (DASD_MAJOR << MINORBITS) + (10 << 2) },
+	{ "dasdl", (DASD_MAJOR << MINORBITS) + (11 << 2) },
+	{ "dasdm", (DASD_MAJOR << MINORBITS) + (12 << 2) },
+	{ "dasdn", (DASD_MAJOR << MINORBITS) + (13 << 2) },
+	{ "dasdo", (DASD_MAJOR << MINORBITS) + (14 << 2) },
+	{ "dasdp", (DASD_MAJOR << MINORBITS) + (15 << 2) },
+	{ "dasdq", (DASD_MAJOR << MINORBITS) + (16 << 2) },
+	{ "dasdr", (DASD_MAJOR << MINORBITS) + (17 << 2) },
+	{ "dasds", (DASD_MAJOR << MINORBITS) + (18 << 2) },
+	{ "dasdt", (DASD_MAJOR << MINORBITS) + (19 << 2) },
+	{ "dasdu", (DASD_MAJOR << MINORBITS) + (20 << 2) },
+	{ "dasdv", (DASD_MAJOR << MINORBITS) + (21 << 2) },
+	{ "dasdw", (DASD_MAJOR << MINORBITS) + (22 << 2) },
+	{ "dasdx", (DASD_MAJOR << MINORBITS) + (23 << 2) },
+	{ "dasdy", (DASD_MAJOR << MINORBITS) + (24 << 2) },
+	{ "dasdz", (DASD_MAJOR << MINORBITS) + (25 << 2) },
 #endif
 #ifdef CONFIG_BLK_DEV_XPRAM
-       { "xpram0", (XPRAM_MAJOR << MINORBITS) },
-       { "xpram1", (XPRAM_MAJOR << MINORBITS) + 1 },
-       { "xpram2", (XPRAM_MAJOR << MINORBITS) + 2 },
-       { "xpram3", (XPRAM_MAJOR << MINORBITS) + 3 },
-       { "xpram4", (XPRAM_MAJOR << MINORBITS) + 4 },
-       { "xpram5", (XPRAM_MAJOR << MINORBITS) + 5 },
-       { "xpram6", (XPRAM_MAJOR << MINORBITS) + 6 },
-       { "xpram7", (XPRAM_MAJOR << MINORBITS) + 7 },
-       { "xpram8", (XPRAM_MAJOR << MINORBITS) + 8 },
-       { "xpram9", (XPRAM_MAJOR << MINORBITS) + 9 },
-       { "xpram10", (XPRAM_MAJOR << MINORBITS) + 10 },
-       { "xpram11", (XPRAM_MAJOR << MINORBITS) + 11 },
-       { "xpram12", (XPRAM_MAJOR << MINORBITS) + 12 },
-       { "xpram13", (XPRAM_MAJOR << MINORBITS) + 13 },
-       { "xpram14", (XPRAM_MAJOR << MINORBITS) + 14 },
-       { "xpram15", (XPRAM_MAJOR << MINORBITS) + 15 },
-       { "xpram16", (XPRAM_MAJOR << MINORBITS) + 16 },
-       { "xpram17", (XPRAM_MAJOR << MINORBITS) + 17 },
-       { "xpram18", (XPRAM_MAJOR << MINORBITS) + 18 },
-       { "xpram19", (XPRAM_MAJOR << MINORBITS) + 19 },
-       { "xpram20", (XPRAM_MAJOR << MINORBITS) + 20 },
-       { "xpram21", (XPRAM_MAJOR << MINORBITS) + 21 },
-       { "xpram22", (XPRAM_MAJOR << MINORBITS) + 22 },
-       { "xpram23", (XPRAM_MAJOR << MINORBITS) + 23 },
-       { "xpram24", (XPRAM_MAJOR << MINORBITS) + 24 },
-       { "xpram25", (XPRAM_MAJOR << MINORBITS) + 25 },
-       { "xpram26", (XPRAM_MAJOR << MINORBITS) + 26 },
-       { "xpram27", (XPRAM_MAJOR << MINORBITS) + 27 },
-       { "xpram28", (XPRAM_MAJOR << MINORBITS) + 28 },
-       { "xpram29", (XPRAM_MAJOR << MINORBITS) + 29 },
-       { "xpram30", (XPRAM_MAJOR << MINORBITS) + 30 },
-       { "xpram31", (XPRAM_MAJOR << MINORBITS) + 31 },
+	{ "xpram0", (XPRAM_MAJOR << MINORBITS) },
+	{ "xpram1", (XPRAM_MAJOR << MINORBITS) + 1 },
+	{ "xpram2", (XPRAM_MAJOR << MINORBITS) + 2 },
+	{ "xpram3", (XPRAM_MAJOR << MINORBITS) + 3 },
+	{ "xpram4", (XPRAM_MAJOR << MINORBITS) + 4 },
+	{ "xpram5", (XPRAM_MAJOR << MINORBITS) + 5 },
+	{ "xpram6", (XPRAM_MAJOR << MINORBITS) + 6 },
+	{ "xpram7", (XPRAM_MAJOR << MINORBITS) + 7 },
+	{ "xpram8", (XPRAM_MAJOR << MINORBITS) + 8 },
+	{ "xpram9", (XPRAM_MAJOR << MINORBITS) + 9 },
+	{ "xpram10", (XPRAM_MAJOR << MINORBITS) + 10 },
+	{ "xpram11", (XPRAM_MAJOR << MINORBITS) + 11 },
+	{ "xpram12", (XPRAM_MAJOR << MINORBITS) + 12 },
+	{ "xpram13", (XPRAM_MAJOR << MINORBITS) + 13 },
+	{ "xpram14", (XPRAM_MAJOR << MINORBITS) + 14 },
+	{ "xpram15", (XPRAM_MAJOR << MINORBITS) + 15 },
+	{ "xpram16", (XPRAM_MAJOR << MINORBITS) + 16 },
+	{ "xpram17", (XPRAM_MAJOR << MINORBITS) + 17 },
+	{ "xpram18", (XPRAM_MAJOR << MINORBITS) + 18 },
+	{ "xpram19", (XPRAM_MAJOR << MINORBITS) + 19 },
+	{ "xpram20", (XPRAM_MAJOR << MINORBITS) + 20 },
+	{ "xpram21", (XPRAM_MAJOR << MINORBITS) + 21 },
+	{ "xpram22", (XPRAM_MAJOR << MINORBITS) + 22 },
+	{ "xpram23", (XPRAM_MAJOR << MINORBITS) + 23 },
+	{ "xpram24", (XPRAM_MAJOR << MINORBITS) + 24 },
+	{ "xpram25", (XPRAM_MAJOR << MINORBITS) + 25 },
+	{ "xpram26", (XPRAM_MAJOR << MINORBITS) + 26 },
+	{ "xpram27", (XPRAM_MAJOR << MINORBITS) + 27 },
+	{ "xpram28", (XPRAM_MAJOR << MINORBITS) + 28 },
+	{ "xpram29", (XPRAM_MAJOR << MINORBITS) + 29 },
+	{ "xpram30", (XPRAM_MAJOR << MINORBITS) + 30 },
+	{ "xpram31", (XPRAM_MAJOR << MINORBITS) + 31 },
+#endif
+#if defined(CONFIG_BLK_CPQ_CISS_DA) || defined(CONFIG_BLK_CPQ_CISS_DA_MODULE)
+	{ "cciss/c0d0p", 0x6800 },
+	{ "cciss/c0d1p", 0x6810 },
+	{ "cciss/c0d2p", 0x6820 },
+	{ "cciss/c0d3p", 0x6830 },
+	{ "cciss/c0d4p", 0x6840 },
+	{ "cciss/c0d5p", 0x6850 },
+	{ "cciss/c0d6p", 0x6860 },
+	{ "cciss/c0d7p", 0x6870 },
+	{ "cciss/c0d8p", 0x6880 },
+	{ "cciss/c0d9p", 0x6890 },
+	{ "cciss/c0d10p",0x68A0 },
+	{ "cciss/c0d11p",0x68B0 },
+	{ "cciss/c0d12p",0x68C0 },
+	{ "cciss/c0d13p",0x68D0 },
+	{ "cciss/c0d14p",0x68E0 },
+	{ "cciss/c0d15p",0x68F0 },
 #endif
 	{ NULL, 0 }
 };
@@ -660,7 +677,6 @@ static void __init root_dev_setup(char *
  * an array of ints and chopped off the string), the second table contains
  * the few exceptions which obey their own syntax rules.
  */
-
 struct kernel_param {
 	const char *str;
 	void (*setup_func)(char *, int *);
@@ -681,8 +697,8 @@ static struct kernel_param cooked_params
 	{ "noapic", ioapic_setup },
 	{ "pirq=", ioapic_pirq_setup },
 #endif
+#endif /* __SMP__ */
 
-#endif
 #ifdef CONFIG_BLK_DEV_RAM
 	{ "ramdisk_start=", ramdisk_start_setup },
 	{ "load_ramdisk=", load_ramdisk },
@@ -692,13 +708,13 @@ static struct kernel_param cooked_params
 #ifdef CONFIG_BLK_DEV_INITRD
 	{ "noinitrd", no_initrd },
 #endif
-#endif
+#endif /* CONFIG_BLK_DEV_RAM */
 
 #ifdef CONFIG_CTC
-        { "ctc=", ctc_setup } ,
+	{ "ctc=", ctc_setup } ,
 #endif
 #ifdef CONFIG_IUCV
-        { "iucv=", iucv_setup } ,
+	{ "iucv=", iucv_setup } ,
 #endif
 
 #ifdef CONFIG_FB
@@ -745,10 +761,10 @@ static struct kernel_param cooked_params
 	{ "decnet=", decnet_setup },
 #endif
 #ifdef CONFIG_PRINTER
-        { "lp=", lp_setup },
+	{ "lp=", lp_setup },
 #endif
 #ifdef CONFIG_VIDEO_CPIA_PP
-        { "cpia_pp=", cpia_pp_setup },
+	{ "cpia_pp=", cpia_pp_setup },
 #endif
 #ifdef CONFIG_JOY_AMIGA
 	{ "js_am=", js_am_setup },
@@ -849,7 +865,7 @@ static struct kernel_param cooked_params
 	{ "u14-34f=", u14_34f_setup},
 #endif
 #ifdef CONFIG_SCSI_AM53C974
-        { "AM53C974=", AM53C974_setup},
+	{ "AM53C974=", AM53C974_setup},
 #endif
 #ifdef CONFIG_SCSI_NCR53C406A
 	{ "ncr53c406a=", NCR53c406a_setup},
@@ -867,13 +883,13 @@ static struct kernel_param cooked_params
 	{ "wd7000=", wd7000_setup},
 #endif
 #ifdef CONFIG_SCSI_IBMMCA
-        { "ibmmcascsi=", ibmmca_scsi_setup },
+	{ "ibmmcascsi=", ibmmca_scsi_setup },
 #endif
 #ifdef CONFIG_SCSI_FD_MCS
 	{ "fd_mcs=", fd_mcs_setup },
 #endif
 #if defined(CONFIG_SCSI_DC390T) && ! defined(CONFIG_SCSI_DC390T_NOGENSUPP)
-        { "tmscsim=", dc390_setup },
+	{ "tmscsim=", dc390_setup },
 #endif
 #ifdef CONFIG_BLK_DEV_XD
 	{ "xd=", xd_setup },
@@ -889,37 +905,37 @@ static struct kernel_param cooked_params
 #endif
 #ifdef CONFIG_CDU31A
 	{ "cdu31a=", cdu31a_setup },
-#endif CONFIG_CDU31A
+#endif /* CONFIG_CDU31A */
 #ifdef CONFIG_MCD
 	{ "mcd=", mcd_setup },
-#endif CONFIG_MCD
+#endif /* CONFIG_MCD */
 #ifdef CONFIG_MCDX
 	{ "mcdx=", mcdx_setup },
-#endif CONFIG_MCDX
+#endif /* CONFIG_MCDX */
 #ifdef CONFIG_SBPCD
 	{ "sbpcd=", sbpcd_setup },
-#endif CONFIG_SBPCD
+#endif /* CONFIG_SBPCD */
 #ifdef CONFIG_AZTCD
 	{ "aztcd=", aztcd_setup },
-#endif CONFIG_AZTCD
+#endif /* CONFIG_AZTCD */
 #ifdef CONFIG_CDU535
 	{ "sonycd535=", sonycd535_setup },
-#endif CONFIG_CDU535
+#endif /* CONFIG_CDU535 */
 #ifdef CONFIG_GSCD
 	{ "gscd=", gscd_setup },
-#endif CONFIG_GSCD
+#endif /* CONFIG_GSCD */
 #ifdef CONFIG_CM206
 	{ "cm206=", cm206_setup },
-#endif CONFIG_CM206
+#endif /* CONFIG_CM206 */
 #ifdef CONFIG_OPTCD
 	{ "optcd=", optcd_setup },
-#endif CONFIG_OPTCD
+#endif /* CONFIG_OPTCD */
 #ifdef CONFIG_SJCD
 	{ "sjcd=", sjcd_setup },
-#endif CONFIG_SJCD
+#endif /* CONFIG_SJCD */
 #ifdef CONFIG_ISP16_CDI
 	{ "isp16=", isp16_setup },
-#endif CONFIG_ISP16_CDI
+#endif /* CONFIG_ISP16_CDI */
 #ifdef CONFIG_SOUND_OSS
 	{ "sound=", sound_setup },
 #endif
@@ -927,8 +943,8 @@ static struct kernel_param cooked_params
 	{ "icn=", icn_setup },
 #endif
 #ifdef CONFIG_ISDN_DRV_HISAX
-       { "hisax=", HiSax_setup },
-       { "HiSax=", HiSax_setup },
+	{ "hisax=", HiSax_setup },
+	{ "HiSax=", HiSax_setup },
 #endif
 #ifdef CONFIG_ISDN_DRV_PCBIT
 	{ "pcbit=", pcbit_setup },
@@ -949,7 +965,7 @@ static struct kernel_param cooked_params
 	    || defined(CONFIG_A4091_SCSI) || defined(CONFIG_MVME16x_SCSI) \
 	    || defined(CONFIG_BVME6000_SCSI) \
 	    || defined(CONFIG_BLZ603EPLUS_SCSI)
-        { "53c7xx=", ncr53c7xx_setup },
+	{ "53c7xx=", ncr53c7xx_setup },
 #endif
 #if defined(CONFIG_SCSI_SIM710)
 	{ "sim710=", sim710_setup },
@@ -1049,10 +1065,10 @@ static struct kernel_param raw_params[] 
 	{ "pf.", pf_setup },
 #endif
 #ifdef CONFIG_PARIDE_PT
-        { "pt.", pt_setup },
+	{ "pt.", pt_setup },
 #endif
 #ifdef CONFIG_PARIDE_PG
-        { "pg.", pg_setup },
+	{ "pg.", pg_setup },
 #endif
 #ifdef CONFIG_N2
 	{ "n2=", n2_setup },
@@ -1064,14 +1080,14 @@ static struct kernel_param raw_params[] 
 	{ "condev=", con3215_setup },
 #endif
 #ifdef CONFIG_MDISK
-        { "mdisk=", mdisk_setup },
+	{ "mdisk=", mdisk_setup },
 #endif
 #ifdef CONFIG_BLK_DEV_XPRAM
-        { "xpram_parts=", xpram_setup },
+	{ "xpram_parts=", xpram_setup },
 #endif
 #ifdef CONFIG_ARCH_S390
-        { "vmhalt=", vmhalt_setup },
-        { "vmpoff=", vmpoff_setup },
+	{ "vmhalt=", vmhalt_setup },
+	{ "vmpoff=", vmpoff_setup },
 #endif
 	{ 0, 0 }
 };
@@ -1080,20 +1096,20 @@ static struct kernel_param raw_params[] 
 #ifdef CONFIG_BLK_DEV_RAM
 static void __init ramdisk_start_setup(char *str, int *ints)
 {
-   if (ints[0] > 0 && ints[1] >= 0)
-      rd_image_start = ints[1];
+	if (ints[0] > 0 && ints[1] >= 0)
+		rd_image_start = ints[1];
 }
 
 static void __init load_ramdisk(char *str, int *ints)
 {
-   if (ints[0] > 0 && ints[1] >= 0)
-      rd_doload = ints[1] & 3;
+	if (ints[0] > 0 && ints[1] >= 0)
+		rd_doload = ints[1] & 3;
 }
 
 static void __init prompt_ramdisk(char *str, int *ints)
 {
-   if (ints[0] > 0 && ints[1] >= 0)
-      rd_prompt = ints[1] & 1;
+	if (ints[0] > 0 && ints[1] >= 0)
+		rd_prompt = ints[1] & 1;
 }
 
 static void __init ramdisk_size(char *str, int *ints)
@@ -1205,7 +1221,7 @@ void __init calibrate_delay(void)
 static void __init parse_options(char *line)
 {
 	char *next;
-        char *quote;
+	char *quote;
 	int args, envs;
 
 	if (!*line)
@@ -1215,24 +1231,24 @@ static void __init parse_options(char *l
 	next = line;
 	while ((line = next) != NULL) {
 		/* On S/390 we want to be able to pass an options that
-                 * contains blanks. For example vmhalt="IPL CMS". 
-                 * To allow that I added code that prevents blanks in
-                 * quotes to be recognized as delimiter. -- Martin
-                 */
-                quote = strchr(line,'"');
-                next = strchr(line, ' ');
-                while (next != NULL && quote != NULL && quote < next) {
-                        /* we found a left quote before the next blank
-                         * now we have to find the matching right quote
-                         */
-                        next = strchr(quote+1, '"');
-                        if (next != NULL) {
-                                quote = strchr(next+1, '"');
-                                next = strchr(next+1, ' ');
-                        }
-                }
-                if (next != NULL)
-                        *next++ = 0;
+		 * contains blanks. For example vmhalt="IPL CMS". 
+		 * To allow that I added code that prevents blanks in
+		 * quotes to be recognized as delimiter. -- Martin
+		 */
+		quote = strchr(line,'"');
+		next = strchr(line, ' ');
+		while (next != NULL && quote != NULL && quote < next) {
+			/* we found a left quote before the next blank
+			 * now we have to find the matching right quote
+			 */
+			next = strchr(quote+1, '"');
+			if (next != NULL) {
+				quote = strchr(next+1, '"');
+				next = strchr(next+1, ' ');
+			}
+		}
+		if (next != NULL)
+			*next++ = 0;
 		/*
 		 * check for kernel options first..
 		 */
@@ -1265,7 +1281,7 @@ static void __init parse_options(char *l
 		}
 		if (checksetup(line))
 			continue;
-		
+
 		/*
 		 * Then check if it's an environment variable or
 		 * an option.
@@ -1292,7 +1308,6 @@ extern void setup_arch(char **, unsigned
 /*
  *	Uniprocessor idle thread
  */
- 
 int cpu_idle(void *unused)
 {
 	for(;;)
@@ -1306,7 +1321,6 @@ int cpu_idle(void *unused)
 /*
  *	Multiprocessor idle thread is in arch/...
  */
- 
 extern int cpu_idle(void * unused);
 
 /* Called by boot processor to activate the rest. */
@@ -1325,10 +1339,10 @@ extern void initialize_secondary(void);
 /*
  *	Activate the first processor.
  */
- 
 asmlinkage void __init start_kernel(void)
 {
 	char * command_line;
+	extern char saved_command_line[];
 
 #ifdef __SMP__
 	static int boot_cpu = 1;
@@ -1340,13 +1354,14 @@ asmlinkage void __init start_kernel(void
 
 /*
  * Interrupts are still disabled. Do necessary setups, then
- * enable them
+ * enable them.
  */
 	printk(linux_banner);
 	setup_arch(&command_line, &memory_start, &memory_end);
+	printk("Kernel command line: %s\n", saved_command_line);
 	memory_start = paging_init(memory_start,memory_end);
 	trap_init();
-        memory_start = init_IRQ( memory_start );
+	memory_start = init_IRQ( memory_start );
 	sched_init();
 	time_init();
 	parse_options(command_line);
@@ -1382,7 +1397,7 @@ asmlinkage void __init start_kernel(void
 	mem_init(memory_start,memory_end);
 	kmem_cache_sizes_init();
 #ifdef CONFIG_3215_CONSOLE
-        con3215_activate();
+	con3215_activate();
 #endif
 #ifdef CONFIG_PROC_FS
 	proc_root_init();
@@ -1409,14 +1424,14 @@ asmlinkage void __init start_kernel(void
 	printk("POSIX conformance testing by UNIFIX\n");
 
 	/* 
-	 *	We count on the initial thread going ok 
-	 *	Like idlers init is an unlocked kernel thread, which will
-	 *	make syscalls (and thus be locked).
+	 * We count on the initial thread going ok.
+	 * Like idlers init is an unlocked kernel thread, which will
+	 * make syscalls (and thus be locked).
 	 */
 	smp_init();
 	kernel_thread(init, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
 	current->need_resched = 1;
- 	cpu_idle(NULL);
+	cpu_idle(NULL);
 }
 
 #ifdef CONFIG_BLK_DEV_INITRD
@@ -1446,7 +1461,7 @@ static void __init do_initcalls(void)
 	initcall_t *call;
 
 	call = &__initcall_start;
-	
+
 	while (call < &__initcall_end)
 	{
 		(*call)();
@@ -1540,13 +1555,12 @@ static void __init do_basic_setup(void)
 #if CONFIG_AP1000
 	/* Start the async paging daemon. */
 	{
-	  extern int asyncd(void *);	 
-	  kernel_thread(asyncd, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
+		extern int asyncd(void *);	 
+		kernel_thread(asyncd, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
 	}
 #endif
 
 #ifdef CONFIG_BLK_DEV_INITRD
-
 	real_root_dev = ROOT_DEV;
 	real_root_mountflags = root_mountflags;
 	if (initrd_start && mount_initrd) root_mountflags &= ~MS_RDONLY;
@@ -1563,14 +1577,13 @@ static void __init do_basic_setup(void)
 	binfmt_setup();
 
 	/* the functions marked initcall  */
-	
 	do_initcalls();
 
 	/* .. filesystems .. */
 	filesystem_setup();
 
 #ifdef CONFIG_IRDA
-	irda_device_init(); /* Must be done after protocol initialization */
+	irda_device_init();	/* Must be done after protocol initialization */
 #endif
 
 #ifdef CONFIG_MICROCODE
@@ -1619,14 +1632,13 @@ static int init(void * unused)
 
 	(void) dup(0);
 	(void) dup(0);
-	
+
 	/*
 	 * We try each of these until one succeeds.
 	 *
 	 * The Bourne shell can be used instead of init if we are 
 	 * trying to recover a really broken machine.
 	 */
-
 	if (execute_command)
 		execve(execute_command,argv_init,envp_init);
 	execve("/sbin/init",argv_init,envp_init);
diff -Naurp linux-2.2.26-vanilla/net/core/skbuff.c linux-2.2.27-pre1/net/core/skbuff.c
--- linux-2.2.26-vanilla/net/core/skbuff.c	2004-03-24 18:26:56.000000000 +0100
+++ linux-2.2.27-pre1/net/core/skbuff.c	2004-03-24 19:45:02.000000000 +0100
@@ -365,13 +365,16 @@ struct sk_buff *skb_realloc_headroom(str
 {
 	struct sk_buff *n;
 	unsigned long offset;
-	int headroom = skb_headroom(skb);
+	int delta = newheadroom - skb_headroom(skb);
+
+	if (delta <= 0)
+		delta = 0;
 
 	/*
 	 *	Allocate the copy buffer
 	 */
  	 
-	n=alloc_skb(skb->truesize+newheadroom-headroom, GFP_ATOMIC);
+	n=alloc_skb(skb->truesize + delta, GFP_ATOMIC);
 	if(n==NULL)
 		return NULL;
 
diff -Naurp linux-2.2.26-vanilla/net/ipv4/ip_gre.c linux-2.2.27-pre1/net/ipv4/ip_gre.c
--- linux-2.2.26-vanilla/net/ipv4/ip_gre.c	2001-03-25 18:31:12.000000000 +0200
+++ linux-2.2.27-pre1/net/ipv4/ip_gre.c	2004-03-24 19:45:03.000000000 +0100
@@ -746,6 +746,7 @@ static int ipgre_tunnel_xmit(struct sk_b
 			skb_set_owner_w(new_skb, skb->sk);
 		dev_kfree_skb(skb);
 		skb = new_skb;
+		old_iph = skb->nh.iph;
 	}
 
 	skb->nh.raw = skb_push(skb, gre_hlen);
diff -Naurp linux-2.2.26-vanilla/net/ipv4/ipip.c linux-2.2.27-pre1/net/ipv4/ipip.c
--- linux-2.2.26-vanilla/net/ipv4/ipip.c	2001-03-25 18:31:12.000000000 +0200
+++ linux-2.2.27-pre1/net/ipv4/ipip.c	2004-03-24 19:45:03.000000000 +0100
@@ -573,6 +573,7 @@ static int ipip_tunnel_xmit(struct sk_bu
 			skb_set_owner_w(new_skb, skb->sk);
 		dev_kfree_skb(skb);
 		skb = new_skb;
+		old_iph = skb->nh.iph;
 	}
 
 	skb->nh.raw = skb_push(skb, sizeof(struct iphdr));
diff -Naurp linux-2.2.26-vanilla/net/ipv4/tcp.c linux-2.2.27-pre1/net/ipv4/tcp.c
--- linux-2.2.26-vanilla/net/ipv4/tcp.c	2002-09-16 18:26:34.000000000 +0200
+++ linux-2.2.27-pre1/net/ipv4/tcp.c	2004-03-24 19:45:03.000000000 +0100
@@ -823,7 +823,7 @@ int tcp_do_sendmsg(struct sock *sk, stru
 				 */
 				if (skb_tailroom(skb) > 0 &&
 				    (mss_now - copy) > 0 &&
-				    tp->snd_nxt < TCP_SKB_CB(skb)->end_seq) {
+				    before(tp->snd_nxt, TCP_SKB_CB(skb)->end_seq)) {
 					int last_byte_was_odd = (copy % 4);
 
 					/* 
diff -Naurp linux-2.2.26-vanilla/net/ipv4/tcp_timer.c linux-2.2.27-pre1/net/ipv4/tcp_timer.c
--- linux-2.2.26-vanilla/net/ipv4/tcp_timer.c	2001-03-25 18:31:12.000000000 +0200
+++ linux-2.2.27-pre1/net/ipv4/tcp_timer.c	2004-03-24 19:45:02.000000000 +0100
@@ -256,7 +256,7 @@ static __inline__ int tcp_keepopen_proc(
 				tcp_set_state(sk, TCP_CLOSE);
 				sk->shutdown = SHUTDOWN_MASK;
 				if (!sk->dead)
-					sk->state_change(sk);
+					sk->error_report(sk);
 			} else {
 				tp->probes_out++;
 				tp->pending = TIME_KEEPOPEN;
diff -Naurp linux-2.2.26-vanilla/net/ipv6/sit.c linux-2.2.27-pre1/net/ipv6/sit.c
--- linux-2.2.26-vanilla/net/ipv6/sit.c	2001-03-25 18:31:13.000000000 +0200
+++ linux-2.2.27-pre1/net/ipv6/sit.c	2004-03-24 19:45:03.000000000 +0100
@@ -496,6 +496,7 @@ static int ipip6_tunnel_xmit(struct sk_b
 			skb_set_owner_w(new_skb, skb->sk);
 		dev_kfree_skb(skb);
 		skb = new_skb;
+		iph6 = skb->nh.ipv6h;
 	}
 
 	skb->nh.raw = skb_push(skb, sizeof(struct iphdr));
