rpms/kernel/FC-4 ide-floppy-eject.patch, NONE, 1.1 linux-2.6-agp-sworks-hang.patch, NONE, 1.1 linux-2.6-build-nonintconfig.patch, NONE, 1.1 linux-2.6-build-qconfig-qt-lib64.patch, NONE, 1.1 linux-2.6-build-reference-discarded-debug_loc.patch, NONE, 1.1 linux-2.6-build-reference-discarded-opd.patch, NONE, 1.1 linux-2.6-build-userspace-headers-warning.patch, NONE, 1.1 linux-2.6-bzimage.patch, NONE, 1.1 linux-2.6-debug-Wundef.patch, NONE, 1.1 linux-2.6-debug-detect-softlockups.patch, NONE, 1.1 linux-2.6-debug-disable-builtins.patch, NONE, 1.1 linux-2.6-debug-list_head.patch, NONE, 1.1 linux-2.6-debug-periodic-slab-check.patch, NONE, 1.1 linux-2.6-debug-reference-discarded-return-result.patch, NONE, 1.1 linux-2.6-debug-singlebiterror.patch, NONE, 1.1 linux-2.6-debug-slab-backtrace.patch, NONE, 1.1 linux-2.6-debug-sleep-in-irq-warning.patch, NONE, 1.1 linux-2.6-debug-spinlock-panic.patch, NONE, 1.1 linux-2.6-debug-spinlock-taint.patch, NONE, 1.1 linux-2.6-debug-taint-check.patch, NONE, 1.1 linux-2.6-debug-tain! t-vm.patch, NONE, 1.1 linux-2.6-futex-wake_op.patch, NONE, 1.1 linux-2.6-ide-netcell.patch, NONE, 1.1 linux-2.6-input-usblegacy.patch, NONE, 1.1 linux-2.6-max-symlinks.patch, NONE, 1.1 linux-2.6-modules-ignore-whitespace.patch, NONE, 1.1 linux-2.6-net-acenic-use-after-free.patch, NONE, 1.1 linux-2.6-net-sk98lin-vpd.patch, NONE, 1.1 linux-2.6-obsolete-idescsi-warning.patch, NONE, 1.1 linux-2.6-obsolete-oss-warning.patch, NONE, 1.1 linux-2.6-optimise-for-size.patch, NONE, 1.1 linux-2.6-pcmcia-single-port-off-by-one.patch, NONE, 1.1 linux-2.6-pwc-powerup-by-default.patch, NONE, 1.1 linux-2.6-radeon-backlight.patch, NONE, 1.1 linux-2.6-sound-emu10k1-ac97.patch, NONE, 1.1 linux-2.6-tux.patch, NONE, 1.1 linux-2.6-unexport-symbols.patch, NONE, 1.1 linux-2.6-usb-ehci-intsoff-on-reset.patch, NONE, 1.1 linux-2.6-vm-silence-atomic-alloc-failures.patch, NONE, 1.1 linux-2.6-w1-hush-debug.patch, NONE, 1.1 linux-2.6.12-ext3-always-nobh.patch, 1.2, 1.3 linux-2.6.12-pmac-sound-oops.patch, NONE, 1.1 linux-2.6.12-scsi-advansys-pcitable! .patch,NONE,1.1 linux-2.6.13-audit-git.patch,NONE,1.1 linux-2.! 6.13.tar

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Thu Sep 29 23:05:07 UTC 2005


Author: davej

Update of /cvs/dist/rpms/kernel/FC-4
In directory cvs.devel.redhat.com:/tmp/cvs-serv20432

Modified Files:
	.cvsignore Makefile Makefile.config kernel-2.6.spec 
	linux-2.6-compile-fixes.patch linux-2.6-crashdump-common.patch 
	linux-2.6-crashdump-reboot-exports.patch 
	linux-2.6-diskdump.patch 
	linux-2.6-dump_smp_call_function.patch linux-2.6-netdump.patch 
	linux-2.6-usb-transcend-nosense.patch 
	linux-2.6-usbhid-wireless-security-lock.patch 
	linux-2.6-usbmon-deficiency-workaround.patch 
	linux-2.6.0-sleepon.patch 
	linux-2.6.11-acpi-thinkpad-c2c3.patch 
	linux-2.6.11-devmem.patch linux-2.6.11-execshield-vdso.patch 
	linux-2.6.11-execshield.patch linux-2.6.12-serial-of.patch 
	linux-2.6.12-xen-additional.patch linux-2.6.12-xen.patch 
	linux-2.6.12rc3-xen-vdso-note.patch 
	linux-2.6.7-modsign-crypto.patch 
	linux-2.6.8-execshield-xen.patch linux-2.6.9-ieee80211.patch 
	linux-2.6.9-module_version.patch 
	linux-2.6.9-scsi-megaraid-legacy.patch 
	linux-2.6.9-vm-oomkiller-debugging.patch 
	linux-2.6.9-xen-compile.patch sources upstream 
Added Files:
	ide-floppy-eject.patch linux-2.6-agp-sworks-hang.patch 
	linux-2.6-build-nonintconfig.patch 
	linux-2.6-build-qconfig-qt-lib64.patch 
	linux-2.6-build-reference-discarded-debug_loc.patch 
	linux-2.6-build-reference-discarded-opd.patch 
	linux-2.6-build-userspace-headers-warning.patch 
	linux-2.6-bzimage.patch linux-2.6-debug-Wundef.patch 
	linux-2.6-debug-detect-softlockups.patch 
	linux-2.6-debug-disable-builtins.patch 
	linux-2.6-debug-list_head.patch 
	linux-2.6-debug-periodic-slab-check.patch 
	linux-2.6-debug-reference-discarded-return-result.patch 
	linux-2.6-debug-singlebiterror.patch 
	linux-2.6-debug-slab-backtrace.patch 
	linux-2.6-debug-sleep-in-irq-warning.patch 
	linux-2.6-debug-spinlock-panic.patch 
	linux-2.6-debug-spinlock-taint.patch 
	linux-2.6-debug-taint-check.patch 
	linux-2.6-debug-taint-vm.patch linux-2.6-futex-wake_op.patch 
	linux-2.6-ide-netcell.patch linux-2.6-input-usblegacy.patch 
	linux-2.6-max-symlinks.patch 
	linux-2.6-modules-ignore-whitespace.patch 
	linux-2.6-net-acenic-use-after-free.patch 
	linux-2.6-net-sk98lin-vpd.patch 
	linux-2.6-obsolete-idescsi-warning.patch 
	linux-2.6-obsolete-oss-warning.patch 
	linux-2.6-optimise-for-size.patch 
	linux-2.6-pcmcia-single-port-off-by-one.patch 
	linux-2.6-pwc-powerup-by-default.patch 
	linux-2.6-radeon-backlight.patch 
	linux-2.6-sound-emu10k1-ac97.patch linux-2.6-tux.patch 
	linux-2.6-unexport-symbols.patch 
	linux-2.6-usb-ehci-intsoff-on-reset.patch 
	linux-2.6-vm-silence-atomic-alloc-failures.patch 
	linux-2.6-w1-hush-debug.patch 
	linux-2.6.12-ext3-always-nobh.patch 
	linux-2.6.12-pmac-sound-oops.patch 
	linux-2.6.12-scsi-advansys-pcitable.patch 
	linux-2.6.13-audit-git.patch linux-2.6.13.tar.bz2.sign 
	patch-2.6.13.2.bz2.sign 
Removed Files:
	linux-2.4.0-nonintconfig.patch linux-2.6-CAN-2005-2490.patch 
	linux-2.6-CAN-2005-2492.patch 
	linux-2.6-acpi-rollup-20050902.patch 
	linux-2.6-alsa-snd-intel8x0m-semaphore.patch 
	linux-2.6-appletouch-update.patch 
	linux-2.6-input-alps-typo.patch linux-2.6-nfs-enoent.patch 
	linux-2.6-powernow-k8-update.patch 
	linux-2.6-scsi-sym2-alloc_lcb_tags-atomic.patch 
	linux-2.6-selinux-addrlen-checks.patch 
	linux-2.6-windtunnel-printk.patch linux-2.6.0-compile.patch 
	linux-2.6.0-must_check.patch linux-2.6.1-s390-compile.patch 
	linux-2.6.10-periodic-slab-debug.patch 
	linux-2.6.11-cpufreq-add-suspend.patch 
	linux-2.6.11-i2c-config.patch 
	linux-2.6.11-isdn-icn-nodev.patch 
	linux-2.6.11-kallsyms-extra-text.patch 
	linux-2.6.11-mac-mini-sound.patch 
	linux-2.6.11-pmac-ide-sleep.patch 
	linux-2.6.11-pmac-volume-save.patch 
	linux-2.6.11-ppc32-750-erratum-fix.patch 
	linux-2.6.11-ppc32-pbook-clock-spreading.patch 
	linux-2.6.11-ppc32-pmac-sleep-fix.patch 
	linux-2.6.11-radeon-backlight.patch 
	linux-2.6.11-random-ehci-patch.patch 
	linux-2.6.11-slab-backtrace.patch linux-2.6.11-tux.patch 
	linux-2.6.11-vm-taint.patch linux-2.6.11.tar.bz2.sign 
	linux-2.6.12-audit-merge.patch 
	linux-2.6.12-detect-softlockups.patch 
	linux-2.6.12-net-conntrack-bridge-fix.patch 
	linux-2.6.12-net-make-orinoco-suck-less.patch 
	linux-2.6.12-nfsd-ctlbits.patch 
	linux-2.6.12-ns558-nodev-rmmod.patch 
	linux-2.6.12-pwc-warning.patch 
	linux-2.6.12-rc3-ehci-misc-updates.patch 
	linux-2.6.12-scsicam-geom-fix.patch 
	linux-2.6.12-usb-old_scheme_first.patch 
	linux-2.6.12-vm-singlebiterror.patch linux-2.6.12.tar.bz2.sign 
	linux-2.6.12rc-ac-ide-fixes.patch 
	linux-2.6.12rc-ppc32-clockspreading-fix.patch 
	linux-2.6.13-rc3-audit-git.patch linux-2.6.3-ia64-build.patch 
	linux-2.6.3-printopen.patch linux-2.6.3-sparc-addbzimage.patch 
	linux-2.6.4-stackusage.patch linux-2.6.8-lockd-racewarn2.patch 
	linux-2.6.8-ppc64-netboot.patch 
	linux-2.6.9-lockd-block-nosleep.patch 
	linux-2.6.9-lockd-reclaims.patch 
	linux-2.6.9-s390-autoraid.patch 
	linux-2.6.9-s390-zfcp_port-fix.patch 
	linux-2.6.9-spinlock-debug-panic.patch patch-2.6.12.5.bz2.sign 
	patch-2.6.12.6pre.patch 
Log Message:
2.6.13


ide-floppy-eject.patch:
 ide-floppy.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)

--- NEW FILE ide-floppy-eject.patch ---
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=158548
http://www.gossamer-threads.com/lists/linux/kernel/568526


--- linux-2.6.13-orig/drivers/ide/ide-floppy.c	2005-08-29 01:41:01.000000000 +0200
+++ linux-2.6.13-pentium/drivers/ide/ide-floppy.c	2005-09-04 14:07:53.000000000 +0200
@@ -2038,11 +2038,9 @@
 	struct ide_floppy_obj *floppy = ide_floppy_g(bdev->bd_disk);
 	ide_drive_t *drive = floppy->drive;
 	void __user *argp = (void __user *)arg;
-	int err = generic_ide_ioctl(drive, file, bdev, cmd, arg);
+	int err;
 	int prevent = (arg) ? 1 : 0;
 	idefloppy_pc_t pc;
-	if (err != -EINVAL)
-		return err;
 
 	switch (cmd) {
 	case CDROMEJECT:
@@ -2094,7 +2092,7 @@
 	case IDEFLOPPY_IOCTL_FORMAT_GET_PROGRESS:
 		return idefloppy_get_format_progress(drive, argp);
 	}
- 	return -EINVAL;
+	return generic_ide_ioctl(drive, file, bdev, cmd, arg);
 }
 
 static int idefloppy_media_changed(struct gendisk *disk)




linux-2.6-agp-sworks-hang.patch:
 sworks-agp.c |   18 ++++++++++++++++--
 1 files changed, 16 insertions(+), 2 deletions(-)

--- NEW FILE linux-2.6-agp-sworks-hang.patch ---
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=154673

--- linux-2.6.13/drivers/char/agp/sworks-agp.c~	2005-09-28 06:03:32.000000000 -0400
+++ linux-2.6.13/drivers/char/agp/sworks-agp.c	2005-09-28 06:04:53.000000000 -0400
@@ -242,13 +242,27 @@ static int serverworks_fetch_size(void)
  */
 static void serverworks_tlbflush(struct agp_memory *temp)
 {
+	unsigned long timeout;
+
 	writeb(1, serverworks_private.registers+SVWRKS_POSTFLUSH);
-	while (readb(serverworks_private.registers+SVWRKS_POSTFLUSH) == 1)
+	timeout = jiffies + 3*HZ;
+	while (readb(serverworks_private.registers+SVWRKS_POSTFLUSH) == 1) {
 		cpu_relax();
+		if (time_after(jiffies, timeout)) {
+			printk(KERN_ERR PFX "TLB post flush took more than 3 seconds\n");
+			break;
+		}
+	}
 
 	writel(1, serverworks_private.registers+SVWRKS_DIRFLUSH);
-	while(readl(serverworks_private.registers+SVWRKS_DIRFLUSH) == 1)
+	timeout = jiffies + 3*HZ;
+	while (readl(serverworks_private.registers+SVWRKS_DIRFLUSH) == 1) {
 		cpu_relax();
+		if (time_after(jiffies, timeout)) {
+			printk(KERN_ERR PFX "TLB Dir flush took more than 3 seconds\n");
+			break;
+		}
+	}
 }
 
 static int serverworks_configure(void)

linux-2.6-build-nonintconfig.patch:
 linux-2.6.12/scripts/kconfig/confdata.c |    4 ++--
 linux-800/scripts/kconfig/Makefile      |    4 ++++
 linux-800/scripts/kconfig/conf.c        |   26 +++++++++++++++++++++++---
 3 files changed, 29 insertions(+), 5 deletions(-)

--- NEW FILE linux-2.6-build-nonintconfig.patch ---
diff -urNp --exclude-from=/home/davej/.exclude linux-600/scripts/kconfig/conf.c linux-800/scripts/kconfig/conf.c
--- linux-600/scripts/kconfig/conf.c
+++ linux-800/scripts/kconfig/conf.c
@@ -20,6 +20,7 @@ enum {
 	ask_all,
 	ask_new,
 	ask_silent,
+	dont_ask,
 	set_default,
 	set_yes,
 	set_mod,
@@ -37,6 +37,8 @@ static struct menu *rootEntry;
 
 static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n");
 
+static int return_value = 0;
+
 static void strip(char *str)
 {
 	char *p = str;
@@ -93,6 +96,12 @@ static void conf_askvalue(struct symbol 
 		fflush(stdout);
 		fgets(line, 128, stdin);
 		return;
+	case dont_ask:
+		if (!sym_has_value(sym)) {
+			fprintf(stderr,"CONFIG_%s\n",sym->name);
+			return_value++;
+		}
+		return;
 	case set_default:
 		printf("%s\n", def);
 		return;
@@ -337,6 +346,10 @@ static int conf_choice(struct menu *menu
 			printf("?");
 		printf("]: ");
 		switch (input_mode) {
+		case dont_ask:
+			cnt = def;
+			printf("%d\n", cnt);
+			break;
 		case ask_new:
 		case ask_silent:
 			if (!is_new) {
@@ -472,7 +485,10 @@ static void check_conf(struct menu *menu
 			if (!conf_cnt++)
 				printf("*\n* Restart config...\n*\n");
 			rootEntry = menu_get_parent_menu(menu);
-			conf(rootEntry);
+			if (input_mode == dont_ask)
+				fprintf(stderr,"CONFIG_%s\n",sym->name);
+			else
+				conf(rootEntry);
 		}
 		if (sym_is_choice(sym) && sym_get_tristate_value(sym) != mod)
 			return;
@@ -493,6 +509,9 @@ int main(int ac, char **av)
 		case 'o':
 			input_mode = ask_new;
 			break;
+		case 'b':
+			input_mode = dont_ask;
+			break;
 		case 's':
 			input_mode = ask_silent;
 			valid_stdin = isatty(0) && isatty(1) && isatty(2);
@@ -557,6 +576,7 @@ int main(int ac, char **av)
 		}
 	case ask_all:
 	case ask_new:
+	case dont_ask:
 		conf_read(NULL);
 		break;
 	default:
@@ -594,10 +594,10 @@ int main(int ac, char **av)
 	do {
 		conf_cnt = 0;
 		check_conf(&rootmenu);
-	} while (conf_cnt);
+	} while ((conf_cnt) && (input_mode != dont_ask));
 	if (conf_write(NULL)) {
 		fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
 		return 1;
 	}
-	return 0;
+	return return_value;
 }
diff -urNp --exclude-from=/home/davej/.exclude linux-600/scripts/kconfig/Makefile linux-800/scripts/kconfig/Makefile
--- linux-600/scripts/kconfig/Makefile
+++ linux-800/scripts/kconfig/Makefile
@@ -23,6 +23,10 @@ oldconfig: $(obj)/conf
 silentoldconfig: $(obj)/conf
 	$< -s arch/$(ARCH)/Kconfig
 
+nonint_oldconfig: scripts/kconfig/conf
+	./scripts/kconfig/conf -b arch/$(ARCH)/Kconfig
+
+
 .PHONY: randconfig allyesconfig allnoconfig allmodconfig defconfig
 
 randconfig: $(obj)/conf
--- linux-2.6.12/scripts/kconfig/confdata.c~	2005-06-22 13:17:13.000000000 -0400
+++ linux-2.6.12/scripts/kconfig/confdata.c	2005-06-22 13:17:23.000000000 -0400
@@ -129,7 +129,7 @@ int conf_read(const char *name)
 				continue;
 			sym = sym_find(line + 9);
 			if (!sym) {
-				fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line + 9);
+				//fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line + 9);
 				break;
 			}
 			switch (sym->type) {
@@ -154,7 +154,7 @@ int conf_read(const char *name)
 				*p2 = 0;
 			sym = sym_find(line + 7);
 			if (!sym) {
-				fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line + 7);
+				//fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line + 7);
 				break;
 			}
 			switch (sym->type) {

linux-2.6-build-qconfig-qt-lib64.patch:
 Makefile |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE linux-2.6-build-qconfig-qt-lib64.patch ---

diff -urNp --exclude-from=/home/davej/.exclude linux-10000/scripts/kconfig/Makefile linux-10001/scripts/kconfig/Makefile
--- linux-10000/scripts/kconfig/Makefile
+++ linux-10001/scripts/kconfig/Makefile
@@ -126,7 +126,7 @@ QTLIBPATH = $(QTDIR)/lib
 
 # QT needs some extra effort...
 $(obj)/.tmp_qtcheck:
-	@set -e; for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
+	@set -e; for d in $$QTDIR /usr/share/qt* /usr/lib/qt* /usr/lib64/qt* ; do \
 	  if [ -f $$d/include/qconfig.h ]; then DIR=$$d; break; fi; \
 	done; \
 	if [ -z "$$DIR" ]; then \

linux-2.6-build-reference-discarded-debug_loc.patch:
 reference_discarded.pl |    1 +
 1 files changed, 1 insertion(+)

--- NEW FILE linux-2.6-build-reference-discarded-debug_loc.patch ---

Error: ./drivers/md/md.o .debug_loc refers to 0000000000007ca7 R_390_64          .exit.text

--- linux-2.6.12/scripts/reference_discarded.pl~	2005-08-18 15:42:06.000000000 -0400
+++ linux-2.6.12/scripts/reference_discarded.pl	2005-08-18 15:42:14.000000000 -0400
@@ -95,6 +95,7 @@ foreach $object (keys(%object)) {
 		     $from !~ /\.debug_aranges$/ &&
 		     $from !~ /\.debug_ranges$/ &&
 		     $from !~ /\.debug_line$/ &&
+			 $from !~ /\.debug_loc$/ &&
 		     $from !~ /\.debug_frame$/ &&
 		     $from !~ /\.exitcall\.exit$/ &&
 		     $from !~ /\.eh_frame$/ &&

linux-2.6-build-reference-discarded-opd.patch:
 reference_discarded.pl |    1 +
 1 files changed, 1 insertion(+)

--- NEW FILE linux-2.6-build-reference-discarded-opd.patch ---
Error: ./fs/quota_v2.o .opd refers to 0000000000000020 R_PPC64_ADDR64    .exit.text

diff -urNp --exclude-from=/home/davej/.exclude linux-3022/scripts/reference_discarded.pl linux-10000/scripts/reference_discarded.pl
--- linux-3022/scripts/reference_discarded.pl
+++ linux-10000/scripts/reference_discarded.pl
@@ -88,6 +88,7 @@ foreach $object (keys(%object)) {
 		    ($from !~ /\.text\.exit$/ &&
 		     $from !~ /\.exit\.text$/ &&
 		     $from !~ /\.data\.exit$/ &&
+		     $from !~ /\.opd$/ &&
 		     $from !~ /\.exit\.data$/ &&
 		     $from !~ /\.altinstructions$/ &&
 		     $from !~ /\.pdr$/ &&

linux-2.6-build-userspace-headers-warning.patch:
 linux-10000/include/linux/config.h |    4 +++-
 linux-10001/arch/ppc64/boot/main.c |    1 +
 linux-10001/include/linux/config.h |    2 +-
 3 files changed, 5 insertions(+), 2 deletions(-)

--- NEW FILE linux-2.6-build-userspace-headers-warning.patch ---
It's a bad idea to use kernel headers directly.
We have glibc-kernheaders for this purpose.

diff -urNp --exclude-from=/home/davej/.exclude linux-3022/include/linux/config.h linux-10000/include/linux/config.h
--- linux-3022/include/linux/config.h
+++ linux-10000/include/linux/config.h
@@ -2,5 +2,7 @@
 #define _LINUX_CONFIG_H
 
 #include <linux/autoconf.h>
-
+#ifndef __KERNEL__
+#error including kernel header in userspace; use the glibc headers instead!
+#endif
 #endif

In file included from include/asm/cputable.h:18,
                 from include/asm/elf.h:6,
                 from include/linux/elf.h:5,
                 from arch/ppc64/boot/main.c:13:
include/linux/config.h:6:2: error: #error including kernel header in userspace; use the glibc headers instead!
make[1]: *** [arch/ppc64/boot/main.o] Error 1
make[1]: *** Waiting for unfinished jobs....


diff -urNp --exclude-from=/home/davej/.exclude linux-10000/arch/ppc64/boot/main.c linux-10001/arch/ppc64/boot/main.c
--- linux-10000/arch/ppc64/boot/main.c
+++ linux-10001/arch/ppc64/boot/main.c
@@ -8,6 +8,7 @@
  * as published by the Free Software Foundation; either version
  * 2 of the License, or (at your option) any later version.
  */
+#define __KERNGLUE__
 #include "ppc32-types.h"
 #include "zlib.h"
 #include <linux/elf.h>
diff -urNp --exclude-from=/home/davej/.exclude linux-10000/include/linux/config.h linux-10001/include/linux/config.h
--- linux-10000/include/linux/config.h
+++ linux-10001/include/linux/config.h
@@ -2,7 +2,7 @@
 #define _LINUX_CONFIG_H
 
 #include <linux/autoconf.h>
-#ifndef __KERNEL__
+#if !defined (__KERNEL__) && !defined(__KERNGLUE__)
 #error including kernel header in userspace; use the glibc headers instead!
 #endif
 #endif

linux-2.6-bzimage.patch:
 linux-10000/arch/ppc64/Makefile      |    2 +-
 linux-10000/arch/ppc64/boot/Makefile |    3 +++
 linux-10001/arch/ppc/Makefile        |    1 +
 linux-400/arch/ia64/Makefile         |    4 ++++
 linux-500/arch/s390/Makefile         |    5 +++++
 linux-600/arch/sparc/Makefile        |    3 +++
 linux-600/arch/sparc64/Makefile      |    3 +++
 7 files changed, 20 insertions(+), 1 deletion(-)

--- NEW FILE linux-2.6-bzimage.patch ---
In order to make the specfile simpler, we adjust some build targets
so that every arch understands bzImage

diff -urNp --exclude-from=/home/davej/.exclude linux-3022/arch/ppc64/boot/Makefile linux-10000/arch/ppc64/boot/Makefile
--- linux-3022/arch/ppc64/boot/Makefile
+++ linux-10000/arch/ppc64/boot/Makefile
@@ -98,6 +98,9 @@ $(obj)/zImage: obj-boot += $(call obj-se
 $(obj)/zImage: $(call obj-sec, $(required)) $(obj-boot) $(obj)/addnote FORCE
 	$(call if_changed,addnote)
 
+$(obj)/zImage.stub: $(obj-boot) FORCE
+	$(BOOTLD) -r $(BOOTLFLAGS) -o $@ $(obj-boot)
+
 $(obj)/zImage.initrd: obj-boot += $(call obj-sec, $(required) $(initrd))
 $(obj)/zImage.initrd: $(call obj-sec, $(required) $(initrd)) $(obj-boot) $(obj)/addnote FORCE
 	$(call if_changed,addnote)
diff -urNp --exclude-from=/home/davej/.exclude linux-3022/arch/ppc64/Makefile linux-10000/arch/ppc64/Makefile
--- linux-3022/arch/ppc64/Makefile
+++ linux-10000/arch/ppc64/Makefile
@@ -82,7 +82,7 @@ boot := arch/ppc64/boot
 bzImage: vmlinux
 	cp vmlinux arch/ppc64/boot/bzImage
 
-boottarget-$(CONFIG_PPC_PSERIES) := zImage zImage.initrd
+boottarget-$(CONFIG_PPC_PSERIES) := zImage zImage.initrd zImage.stub
 boottarget-$(CONFIG_PPC_MAPLE) := zImage zImage.initrd
 boottarget-$(CONFIG_PPC_ISERIES) := vmlinux.sminitrd vmlinux.initrd vmlinux.sm
 $(boottarget-y): vmlinux
diff -urNp --exclude-from=/home/davej/.exclude linux-10000/arch/ppc/Makefile linux-10001/arch/ppc/Makefile
--- linux-10000/arch/ppc/Makefile
+++ linux-10001/arch/ppc/Makefile
@@ -78,6 +78,7 @@ CPPFLAGS_vmlinux.lds	:= -Upowerpc
 
 # All the instructions talk about "make bzImage".
 bzImage: zImage
+	cp vmlinux arch/ppc/boot/bzImage
 
 boot := arch/$(ARCH)/boot
 
diff -urNp --exclude-from=/home/davej/.exclude linux-400/arch/s390/Makefile linux-500/arch/s390/Makefile
--- linux-400/arch/s390/Makefile
+++ linux-500/arch/s390/Makefile
@@ -91,6 +91,11 @@ boot		:= arch/$(ARCH)/boot
 
 all: image
 
+# This is a white lie which helps to keep our spec simpler.
+# No $(Q) or other trickery because nobody should use it outside of RPM builds.
+bzImage: image
+	ln -s image arch/$(ARCH)/boot/bzImage
+
 install: vmlinux
 	$(Q)$(MAKE) $(build)=$(boot) $@
 
diff -urNp --exclude-from=/home/davej/.exclude linux-503/arch/sparc/Makefile linux-600/arch/sparc/Makefile
--- linux-503/arch/sparc/Makefile
+++ linux-600/arch/sparc/Makefile
@@ -53,6 +53,9 @@ all: image
 
 boot := arch/sparc/boot
 
+bzImage: image
+	cp $(boot)/image $(boot)/bzImage
+
 image tftpboot.img: vmlinux
 	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
 
diff -urNp --exclude-from=/home/davej/.exclude linux-503/arch/sparc64/Makefile linux-600/arch/sparc64/Makefile
--- linux-503/arch/sparc64/Makefile
+++ linux-600/arch/sparc64/Makefile
@@ -69,6 +69,9 @@ drivers-$(CONFIG_OPROFILE)	+= arch/sparc
 
 boot := arch/sparc64/boot
 
+bzImage: image
+	cp $(boot)/image $(boot)/bzImage
+
 image tftpboot.img vmlinux.aout: vmlinux
 	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
 
diff -urNp --exclude-from=/home/davej/.exclude linux-302/arch/ia64/Makefile linux-400/arch/ia64/Makefile
--- linux-302/arch/ia64/Makefile
+++ linux-400/arch/ia64/Makefile
@@ -71,6 +71,10 @@ boot := arch/ia64/hp/sim/boot
 
 all: compressed unwcheck
 
+bzImage: compressed
+	mkdir -p arch/ia64/boot
+	cp vmlinux.gz arch/ia64/boot/bzImage
+
 compressed: vmlinux.gz
 
 vmlinux.gz: vmlinux


linux-2.6-debug-Wundef.patch:
 Makefile |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE linux-2.6-debug-Wundef.patch ---
-Wundef

--- linux-2.6.11/Makefile~	2005-05-28 18:48:02.000000000 -0400
+++ linux-2.6.11/Makefile	2005-05-28 18:48:27.000000000 -0400
@@ -203,7 +203,7 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH"
 
 HOSTCC  	= gcc
 HOSTCXX  	= g++
-HOSTCFLAGS	= -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
+HOSTCFLAGS	= -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -Wundef
 HOSTCXXFLAGS	= -O2
 
 # 	Decide whether to build built-in, modular, or both.

linux-2.6-debug-detect-softlockups.patch:
 linux-2.6.11/kernel/softirq.c |    2 
 linux/include/linux/sched.h   |   13 ++++
 linux/init/main.c             |    1 
 linux/kernel/Makefile         |    1 
 linux/kernel/softlockup.c     |  130 ++++++++++++++++++++++++++++++++++++++++++
 linux/kernel/timer.c          |    1 
 linux/lib/Kconfig.debug       |   19 ++++++
 7 files changed, 166 insertions(+), 1 deletion(-)

--- NEW FILE linux-2.6-debug-detect-softlockups.patch ---
--- linux/kernel/softlockup.c.orig
+++ linux/kernel/softlockup.c
@@ -0,0 +1,130 @@
+/*
+ * Detect Soft Lockups
+ *
+ * started by Ingo Molnar, (C) 2005, Red Hat
+ *
+ * this code detects soft lockups: incidents in where on a CPU
+ * the kernel does not reschedule for 10 seconds or more.
+ */
+
+#include <linux/mm.h>
+#include <linux/cpu.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/kthread.h>
+#include <linux/notifier.h>
+
+static DEFINE_SPINLOCK(print_lock);
+
+static DEFINE_PER_CPU(unsigned long, timestamp) = 0;
+static DEFINE_PER_CPU(unsigned long, print_timestamp) = 0;
+static DEFINE_PER_CPU(struct task_struct *, watchdog_task);
+
+extern void takeover_tasklets(unsigned int cpu);
+
+/*
+ * This callback runs from the timer interrupt, and checks
+ * whether the watchdog thread has hung or not:
+ */
+void softlockup_tick(struct pt_regs *regs)
+{
+	int this_cpu = smp_processor_id();
+	unsigned long timestamp = per_cpu(timestamp, this_cpu);
+
+	if (per_cpu(print_timestamp, this_cpu) == timestamp)
+		return;
+
+	if (time_after(jiffies, timestamp + 10*HZ)) {
+		per_cpu(print_timestamp, this_cpu) = timestamp;
+
+		spin_lock(&print_lock);
+		printk(KERN_ERR "BUG: soft lockup detected on CPU#%d!\n",
+			this_cpu);
+		show_regs(regs);
+		dump_stack();
+		spin_unlock(&print_lock);
+	}
+}
+
+/*
+ * The watchdog thread - runs every second and touches the timestamp.
+ */
+static int watchdog(void * __bind_cpu)
+{
+	struct sched_param param = { .sched_priority = 99 };
+	int this_cpu = (long) __bind_cpu;
+
+	printk("softlockup thread %d started up.\n", this_cpu);
+
+	sched_setscheduler(current, SCHED_FIFO, &param);
+	current->flags |= PF_NOFREEZE;
+
+	set_current_state(TASK_INTERRUPTIBLE);
+
+	/*
+	 * Run briefly once per second - if this gets delayed for
+	 * more than 10 seconds then the debug-printout triggers
+	 * in softlockup_tick():
+	 */
+	while (!kthread_should_stop()) {
+		set_current_state(TASK_INTERRUPTIBLE);
+		msleep_interruptible(HZ);
+		per_cpu(timestamp, this_cpu) = jiffies;
+	}
+	__set_current_state(TASK_RUNNING);
+
+	return 0;
+}
+
+/*
+ * Create/destroy watchdog threads as CPUs come and go:
+ */
+static int __devinit
+cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
+{
+	int hotcpu = (unsigned long)hcpu;
+	struct task_struct *p;
+
+	switch (action) {
+	case CPU_UP_PREPARE:
+		BUG_ON(per_cpu(watchdog_task, hotcpu));
+		p = kthread_create(watchdog, hcpu, "watchdog/%d", hotcpu);
+		if (IS_ERR(p)) {
+			printk("watchdog for %i failed\n", hotcpu);
+			return NOTIFY_BAD;
+		}
+  		per_cpu(watchdog_task, hotcpu) = p;
+		kthread_bind(p, hotcpu);
+ 		break;
+	case CPU_ONLINE:
+
+		wake_up_process(per_cpu(watchdog_task, hotcpu));
+		break;
+#ifdef CONFIG_HOTPLUG_CPU
+	case CPU_UP_CANCELED:
+		/* Unbind so it can run.  Fall thru. */
+		kthread_bind(per_cpu(watchdog_task, hotcpu), smp_processor_id());
+	case CPU_DEAD:
+		p = per_cpu(watchdog_task, hotcpu);
+		per_cpu(watchdog_task, hotcpu) = NULL;
+		kthread_stop(p);
+		takeover_tasklets(hotcpu);
+		break;
+#endif /* CONFIG_HOTPLUG_CPU */
+ 	}
+	return NOTIFY_OK;
+}
+
+static struct notifier_block __devinitdata cpu_nfb = {
+	.notifier_call = cpu_callback
+};
+
+__init void spawn_softlockup_task(void)
+{
+	void *cpu = (void *)(long)smp_processor_id();
+
+	cpu_callback(&cpu_nfb, CPU_UP_PREPARE, cpu);
+	cpu_callback(&cpu_nfb, CPU_ONLINE, cpu);
+	register_cpu_notifier(&cpu_nfb);
+}
+
--- linux/kernel/Makefile.orig
+++ linux/kernel/Makefile
@@ -25,6 +25,7 @@ obj-$(CONFIG_AUDIT) += audit.o
 obj-$(CONFIG_AUDITSYSCALL) += auditsc.o
 obj-$(CONFIG_KPROBES) += kprobes.o
 obj-$(CONFIG_SYSFS) += ksysfs.o
+obj-$(CONFIG_DETECT_SOFTLOCKUP) += softlockup.o
 obj-$(CONFIG_GENERIC_HARDIRQS) += irq/
 
 ifneq ($(CONFIG_IA64),y)
--- linux/kernel/timer.c.orig
+++ linux/kernel/timer.c
@@ -921,6 +921,7 @@ void do_timer(struct pt_regs *regs)
 {
 	jiffies_64++;
 	update_times();
+	softlockup_tick(regs);
 }
 
 #ifdef __ARCH_WANT_SYS_ALARM
--- linux/init/main.c.orig
+++ linux/init/main.c
@@ -596,6 +596,7 @@ static void do_pre_smp_initcalls(void)
 	migration_init();
 #endif
 	spawn_ksoftirqd();
+	spawn_softlockup_task();
 }
 
 static void run_init_process(char *init_filename)
--- linux/include/linux/sched.h.orig
+++ linux/include/linux/sched.h
@@ -176,6 +176,19 @@ extern void update_process_times(int use
 extern void scheduler_tick(void);
 extern unsigned long cache_decay_ticks;
 
+#ifdef CONFIG_DETECT_SOFTLOCKUP
+extern void softlockup_tick(struct pt_regs *regs);
+extern void spawn_softlockup_task(void);
+#else
+static inline void softlockup_tick(struct pt_regs *regs)
+{
+}
+static inline void spawn_softlockup_task(void)
+{
+}
+#endif
+
+
 /* Attach to any functions which should be ignored in wchan output. */
 #define __sched		__attribute__((__section__(".sched.text")))
 /* Is this address in the __sched functions? */
--- linux/lib/Kconfig.debug.orig
+++ linux/lib/Kconfig.debug
@@ -27,6 +27,25 @@ config MAGIC_SYSRQ
 	  Enables console device to interpret special characters as
 	  commands to dump state information.
 
+config DETECT_SOFTLOCKUP
+	bool "Detect Soft Lockups"
+	depends on DEBUG_KERNEL
+	default y
+	help
+	  Say Y here to enable the kernel to detect "soft lockups",
+	  which are bugs that cause the kernel to loop in kernel
+	  mode for more than 10 seconds, without giving other tasks a
+	  chance to run.
+
+	  When a soft-lockup is detected, the kernel will print the
+	  current stack trace (which you should report), but the
+	  system will stay locked up. This feature has negligible
+	  overhead.
+
+	  (Note that "hard lockups" are separate type of bugs that
+	   can be detected via the NMI-watchdog, on platforms that
+	   support it.)
+
 config SCHEDSTATS
 	bool "Collect scheduler statistics"
 	depends on DEBUG_KERNEL && PROC_FS
--- linux-2.6.11/kernel/softirq.c~	2005-05-11 21:47:38.000000000 -0400
+++ linux-2.6.11/kernel/softirq.c	2005-05-11 21:47:53.000000000 -0400
@@ -455,7 +455,7 @@ void tasklet_kill_immediate(struct taskl
 	BUG();
 }
 
-static void takeover_tasklets(unsigned int cpu)
+void takeover_tasklets(unsigned int cpu)
 {
 	struct tasklet_struct **i;
 

linux-2.6-debug-disable-builtins.patch:
 Makefile |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE linux-2.6-debug-disable-builtins.patch ---
Disable built-ins and also more m32 work

diff -urNp --exclude-from=/home/davej/.exclude linux-3022/arch/i386/Makefile linux-10000/arch/i386/Makefile
--- linux-3022/arch/i386/Makefile
+++ linux-10000/arch/i386/Makefile
@@ -22,7 +22,7 @@ OBJCOPYFLAGS	:= -O binary -R .note -R .c
 LDFLAGS_vmlinux :=
 CHECKFLAGS	+= -D__i386__
 
-CFLAGS += -pipe -msoft-float
+CFLAGS += -pipe -msoft-float -fno-builtin-sprintf -fno-builtin-log2 -fno-builtin-puts 
 
 # prevent gcc from keeping the stack 16 byte aligned
 CFLAGS += $(call cc-option,-mpreferred-stack-boundary=2)


linux-2.6-debug-list_head.patch:
 list.h |    4 ++++
 1 files changed, 4 insertions(+)

--- NEW FILE linux-2.6-debug-list_head.patch ---
list_head debugging from -mm

--- linux-2.6.12/include/linux/list.h~	2005-08-08 15:34:50.000000000 -0400
+++ linux-2.6.12/include/linux/list.h	2005-08-08 15:35:22.000000000 -0400
@@ -5,7 +5,9 @@
 
 #include <linux/stddef.h>
 #include <linux/prefetch.h>
+#include <linux/kernel.h>
 #include <asm/system.h>
+#include <asm/bug.h>
 
 /*
  * These are non-NULL pointers that will result in page faults
@@ -160,6 +162,8 @@ static inline void __list_del(struct lis
  */
 static inline void list_del(struct list_head *entry)
 {
+	BUG_ON(entry->prev->next != entry);
+	BUG_ON(entry->next->prev != entry);
 	__list_del(entry->prev, entry->next);
 	entry->next = LIST_POISON1;
 	entry->prev = LIST_POISON2;

linux-2.6-debug-periodic-slab-check.patch:
 slab.c |  110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 105 insertions(+), 5 deletions(-)

--- NEW FILE linux-2.6-debug-periodic-slab-check.patch ---
diff -urNp --exclude-from=/home/davej/.exclude linux-1000/mm/slab.c linux-1010/mm/slab.c
--- linux-1000/mm/slab.c
+++ linux-1010/mm/slab.c
@@ -189,7 +189,7 @@
  */
 
 #define BUFCTL_END	(((kmem_bufctl_t)(~0U))-0)
-#define BUFCTL_FREE	(((kmem_bufctl_t)(~0U))-1)
+#define BUFCTL_ALLOC	(((kmem_bufctl_t)(~0U))-1)
 #define	SLAB_LIMIT	(((kmem_bufctl_t)(~0U))-2)
 
 /* Max number of objs-per-slab for caches which use off-slab slabs.
@@ -355,6 +355,7 @@ struct kmem_cache_s {
 #if DEBUG
 	int			dbghead;
 	int			reallen;
+	unsigned long		redzonetest;
 #endif
 };
 
@@ -370,6 +371,7 @@ struct kmem_cache_s {
  */
 #define REAPTIMEOUT_CPUC	(2*HZ)
 #define REAPTIMEOUT_LIST3	(4*HZ)
+#define REDZONETIMEOUT		(300*HZ)
 
 #if STATS
 #define	STATS_INC_ACTIVE(x)	((x)->num_active++)
@@ -1446,7 +1448,11 @@ next:
 	} 
 
 	cachep->lists.next_reap = jiffies + REAPTIMEOUT_LIST3 +
-					((unsigned long)cachep)%REAPTIMEOUT_LIST3;
+					((unsigned long)cachep/L1_CACHE_BYTES)%REAPTIMEOUT_LIST3;
+#if DEBUG
+	cachep->redzonetest = jiffies + REDZONETIMEOUT +
+					((unsigned long)cachep/L1_CACHE_BYTES)%REDZONETIMEOUT;
+#endif
 
 	/* Need the semaphore to access the chain. */
 	down(&cache_chain_sem);
@@ -2043,7 +2049,7 @@ retry:
 			slabp->inuse++;
 			next = slab_bufctl(slabp)[slabp->free];
 #if DEBUG
-			slab_bufctl(slabp)[slabp->free] = BUFCTL_FREE;
+			slab_bufctl(slabp)[slabp->free] = BUFCTL_ALLOC;
 #endif
 		       	slabp->free = next;
 		}
@@ -2181,7 +2187,7 @@ static void free_block(kmem_cache_t *cac
 		objnr = (objp - slabp->s_mem) / cachep->objsize;
 		check_slabp(cachep, slabp);
 #if DEBUG
-		if (slab_bufctl(slabp)[objnr] != BUFCTL_FREE) {
+		if (slab_bufctl(slabp)[objnr] != BUFCTL_ALLOC) {
 			printk(KERN_ERR "slab: double free detected in cache '%s', objp %p.\n",
 						cachep->name, objp);
 			BUG();
@@ -2409,7 +2415,7 @@ got_slabp:
 	slabp->inuse++;
 	next = slab_bufctl(slabp)[slabp->free];
 #if DEBUG
-	slab_bufctl(slabp)[slabp->free] = BUFCTL_FREE;
+	slab_bufctl(slabp)[slabp->free] = BUFCTL_ALLOC;
 #endif
 	slabp->free = next;
 	check_slabp(cachep, slabp);
@@ -2615,6 +2621,94 @@ unsigned int kmem_cache_size(kmem_cache_
 
 EXPORT_SYMBOL(kmem_cache_size);
 
+#if DEBUG
+static void check_slabuse(kmem_cache_t *cachep, struct slab *slabp)
+{
+	int i;
+
+	if (!(cachep->flags & SLAB_RED_ZONE))
+		return;	/* no redzone data to check */
+
+#if CONFIG_DEBUG_PAGEALLOC
+	/* Page alloc debugging on for this cache. Mapping & Unmapping happens
+	 * without any locking, thus parallel checks are impossible.
+	 */
+	if ((cachep->objsize%PAGE_SIZE)==0 && OFF_SLAB(cachep))
+		return;
+#endif
+
+	for (i=0;i<cachep->num;i++) {
+		void *objp = slabp->s_mem + cachep->objsize * i;
+		unsigned long red1, red2;
+
+		red1 = *dbg_redzone1(cachep, objp);
+		red2 = *dbg_redzone2(cachep, objp);
+
+		/* simplest case: marked as inactive */
+		if (red1 == RED_INACTIVE && red2 == RED_INACTIVE)
+			continue;
+
+		/* tricky case: if the bufctl value is BUFCTL_ALLOC, then
+		 * the object is either allocated or somewhere in a cpu
+		 * cache. The cpu caches are lockless and there might be
+		 * a concurrent alloc/free call, thus we must accept random
+		 * combinations of RED_ACTIVE and _INACTIVE
+		 */
+		if (slab_bufctl(slabp)[i] == BUFCTL_ALLOC &&
+				(red1 == RED_INACTIVE || red1 == RED_ACTIVE) &&
+				(red2 == RED_INACTIVE || red2 == RED_ACTIVE))
+			continue;
+
+		printk(KERN_ERR "slab %s: redzone mismatch in slabp %p, objp %p, bufctl 0x%x\n",
+				cachep->name, slabp, objp, slab_bufctl(slabp)[i]);
+		print_objinfo(cachep, objp, 2);
+	}
+}
+
+/*
+ * Perform a self test on all slabs from a cache
+ */
+static void check_redzone(kmem_cache_t *cachep)
+{
+	struct list_head *q;
+	struct slab *slabp;
+
+	check_spinlock_acquired(cachep);
+
+	list_for_each(q,&cachep->lists.slabs_full) {
+		slabp = list_entry(q, struct slab, list);
+
+		if (slabp->inuse != cachep->num) {
+			printk(KERN_INFO "slab %s: wrong slabp found in full slab chain at %p (%d/%d).\n",
+					cachep->name, slabp, slabp->inuse, cachep->num);
+		}
+		check_slabp(cachep, slabp);
+		check_slabuse(cachep, slabp);
+	}
+	list_for_each(q,&cachep->lists.slabs_partial) {
+		slabp = list_entry(q, struct slab, list);
+
+		if (slabp->inuse == cachep->num || slabp->inuse == 0) {
+			printk(KERN_INFO "slab %s: wrong slab found in partial chain at %p (%d/%d).\n",
+					cachep->name, slabp, slabp->inuse, cachep->num);
+		}
+		check_slabp(cachep, slabp);
+		check_slabuse(cachep, slabp);
+	}
+	list_for_each(q,&cachep->lists.slabs_free) {
+		slabp = list_entry(q, struct slab, list);
+
+		if (slabp->inuse != 0) {
+			printk(KERN_INFO "slab %s: wrong slab found in free chain at %p (%d/%d).\n",
+					cachep->name, slabp, slabp->inuse, cachep->num);
+		}
+		check_slabp(cachep, slabp);
+		check_slabuse(cachep, slabp);
+	}
+}
+
+#endif
+
 struct ccupdate_struct {
 	kmem_cache_t *cachep;
 	struct array_cache *new[NR_CPUS];
@@ -2798,6 +2892,12 @@ static void cache_reap(void *unused)
 
 		drain_array_locked(searchp, ac_data(searchp), 0);
 
+#if DEBUG
+		if(time_before(searchp->redzonetest, jiffies)) {
+			searchp->redzonetest = jiffies + REDZONETIMEOUT;
+			check_redzone(searchp);
+		}
+#endif
 		if(time_after(searchp->lists.next_reap, jiffies))
 			goto next_unlock;
 

linux-2.6-debug-reference-discarded-return-result.patch:
 reference_discarded.pl |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE linux-2.6-debug-reference-discarded-return-result.patch ---
?

diff -urNp --exclude-from=/home/davej/.exclude linux-3022/scripts/reference_discarded.pl linux-10000/scripts/reference_discarded.pl
--- linux-3022/scripts/reference_discarded.pl
+++ linux-10000/scripts/reference_discarded.pl
@@ -107,4 +108,4 @@ foreach $object (keys(%object)) {
 }
 # printf("Done\n");
 
-exit(0);
+exit($errorcount);

linux-2.6-debug-singlebiterror.patch:
 slab.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+)

--- NEW FILE linux-2.6-debug-singlebiterror.patch ---
--- linux-2.6.11/mm/slab.c~	2005-05-01 00:51:59.000000000 -0400
+++ linux-2.6.11/mm/slab.c	2005-05-01 01:19:38.000000000 -0400
@@ -1004,8 +1004,12 @@ static void poison_obj(kmem_cache_t *cac
 static void dump_line(char *data, int offset, int limit)
 {
 	int i;
+	unsigned char total=0;
+
 	printk(KERN_ERR "%03x:", offset);
 	for (i=0;i<limit;i++) {
+		if (data[offset+i] != POISON_FREE)
+			total += data[offset+i];
 		if (check_tainted() == 0)
 			printk(" %02x", (unsigned char)data[offset+i]);
 		else {
@@ -1019,6 +1023,18 @@ static void dump_line(char *data, int of
 		}
 	}
 	printk("\n");
+	switch (total) {
+		case 0x36:
+		case 0x6a:
+		case 0x6f:
+		case 0x81:
+		case 0xac:
+		case 0xd3:
+		case 0xd5:
+		case 0xea:
+			printk (KERN_ERR "Single bit error detected. Possibly bad RAM. Run memtest86.\n");
+			return;
+	}
 }
 #endif
 

linux-2.6-debug-slab-backtrace.patch:
 slab.c |    1 +
 1 files changed, 1 insertion(+)

--- NEW FILE linux-2.6-debug-slab-backtrace.patch ---
Sometimes it's possible that the debug info gets disabled
due to alignment issues. If we then get a corruption we
have very few clues wtf happened.

--- linux-2.6.11/mm/slab.c~	2005-04-20 03:07:42.000000000 -0400
+++ linux-2.6.11/mm/slab.c	2005-04-20 03:07:48.000000000 -0400
@@ -1064,6 +1064,7 @@ static void check_poison_obj(kmem_cache_
 				printk(KERN_ERR "Slab corruption: (%s) start=%p, len=%d\n",
 						print_tainted(), realobj, size);
 				print_objinfo(cachep, objp, 0);
+				dump_stack();
 			}
 			/* Hexdump the affected line */
 			i = (i/16)*16;

linux-2.6-debug-sleep-in-irq-warning.patch:
 delay.h |   17 ++++++++---------
 1 files changed, 8 insertions(+), 9 deletions(-)

--- NEW FILE linux-2.6-debug-sleep-in-irq-warning.patch ---
warn if we sleep in an irq for a long time.

diff -urNp --exclude-from=/home/davej/.exclude linux-3022/include/linux/delay.h linux-10000/include/linux/delay.h
--- linux-3022/include/linux/delay.h
+++ linux-10000/include/linux/delay.h
@@ -10,7 +10,7 @@
 extern unsigned long loops_per_jiffy;
 
 #include <asm/delay.h>
-
+#include <linux/hardirq.h>
 /*
  * Using udelay() for intervals greater than a few milliseconds can
  * risk overflow for high loops_per_jiffy (high bogomips) machines. The
@@ -25,14 +25,13 @@ extern unsigned long loops_per_jiffy;
 #define MAX_UDELAY_MS	5
 #endif
 
-#ifdef notdef
-#define mdelay(n) (\
-	{unsigned long __ms=(n); while (__ms--) udelay(1000);})
-#else
-#define mdelay(n) (\
-	(__builtin_constant_p(n) && (n)<=MAX_UDELAY_MS) ? udelay((n)*1000) : \
-	({unsigned long __ms=(n); while (__ms--) udelay(1000);}))
-#endif
+#define mdelay(n) (					\
+	{						\
+		static int warned=0; 			\
+		unsigned long __ms=(n); 		\
+		WARN_ON(in_irq() && !(warned++)); 	\
+		while (__ms--) udelay(1000);		\
+	})
 
 #ifndef ndelay
 #define ndelay(x)	udelay(((x)+999)/1000)

linux-2.6-debug-spinlock-panic.patch:
 include/linux/spinlock.h |   37 +++++++++++++++++++++++++++++++------
 kernel/panic.c           |   10 ++++++++++
 2 files changed, 41 insertions(+), 6 deletions(-)

--- NEW FILE linux-2.6-debug-spinlock-panic.patch ---
By default, change the spinlock debugging to panic instead of printk.
This catches a lot of problems that previously would go unreported.
The only problem with this is that if we hit this in the installer kernel,
the user can't install the release. As a worse-case scenario, we have
a 'dontpanic' boot argument. Douglas Adams would be proud.

--- linux-2.6.12/include/linux/spinlock.h~	2005-08-09 01:34:16.000000000 -0400
+++ linux-2.6.12/include/linux/spinlock.h	2005-08-09 01:39:44.000000000 -0400
@@ -114,17 +114,26 @@ typedef struct {
 #define CHECK_LOCK(x) \
 	do { \
 	 	if ((x)->magic != SPINLOCK_MAGIC) { \
-			printk(KERN_ERR "%s:%d: spin_is_locked on uninitialized spinlock %p. (%s)\n", \
+			if (nopanic)	\
+				printk(KERN_ERR "%s:%d: spin_is_locked on uninitialized spinlock %p. (%s)\n", \
+					__FILE__, __LINE__, (x), print_tainted()); \
+			else \
+				panic("%s:%d: spin_is_locked on uninitialized spinlock %p. (%s)\n", \
 					__FILE__, __LINE__, (x), print_tainted()); \
 		} \
 	} while(0)
 
 #define _raw_spin_lock(x)		\
 	do { \
-	 	CHECK_LOCK(x); \
+	 	CHECK_LOCK(x);	\
 		if ((x)->lock&&(x)->babble) { \
 			(x)->babble--; \
-			printk("%s:%d: spin_lock(%s:%p) already locked by %s/%d. (%s)\n", \
+			if (nopanic) \
+				printk("%s:%d: spin_lock(%s:%p) already locked by %s/%d. (%s)\n", \
+					__FILE__,__LINE__, (x)->module, \
+					(x), (x)->owner, (x)->oline, print_tainted()); \
+			else \
+				panic("%s:%d: spin_lock(%s:%p) already locked by %s/%d. (%s)\n", \
 					__FILE__,__LINE__, (x)->module, \
 					(x), (x)->owner, (x)->oline, print_tainted()); \
 		} \
@@ -162,7 +171,12 @@ typedef struct {
 	 	CHECK_LOCK(x); \
 		if ((x)->lock&&(x)->babble) { \
 			(x)->babble--; \
-			printk("%s:%d: spin_trylock(%s:%p) already locked by %s/%d.(%s)\n", \
+	 		if (nopanic)	\
+				printk("%s:%d: spin_trylock(%s:%p) already locked by %s/%d.(%s)\n", \
+					__FILE__,__LINE__, (x)->module, \
+					(x), (x)->owner, (x)->oline, print_tainted()); \
+	 		else \
+				panic("%s:%d: spin_trylock(%s:%p) already locked by %s/%d.(%s)\n", \
 					__FILE__,__LINE__, (x)->module, \
 					(x), (x)->owner, (x)->oline, print_tainted()); \
 		} \
@@ -177,7 +191,12 @@ typedef struct {
 	 	CHECK_LOCK(x); \
 		if ((x)->lock&&(x)->babble) { \
 			(x)->babble--; \
-			printk("%s:%d: spin_unlock_wait(%s:%p) owned by %s/%d. (%s)\n", \
+			if (nopanic) \
+				printk("%s:%d: spin_unlock_wait(%s:%p) owned by %s/%d. (%s)\n", \
+					__FILE__,__LINE__, (x)->module, (x), \
+					(x)->owner, (x)->oline, print_tainted()); \
+			else \
+				panic("%s:%d: spin_unlock_wait(%s:%p) owned by %s/%d. (%s)\n", \
 					__FILE__,__LINE__, (x)->module, (x), \
 					(x)->owner, (x)->oline, print_tainted()); \
 		}\
@@ -188,7 +207,11 @@ typedef struct {
 	 	CHECK_LOCK(x); \
 		if (!(x)->lock&&(x)->babble) { \
 			(x)->babble--; \
-			printk("%s:%d: spin_unlock(%s:%p) not locked. (%s)\n", \
+			if (nopanic)	\
+				printk("%s:%d: spin_unlock(%s:%p) not locked. (%s)\n", \
+					__FILE__,__LINE__, (x)->module, (x), print_tainted());\
+			else \
+				panic("%s:%d: spin_unlock(%s:%p) not locked. (%s)\n", \
 					__FILE__,__LINE__, (x)->module, (x), print_tainted());\
 		} \
 		(x)->lock = 0; \
--- linux-2.6.12/kernel/panic.c~	2005-08-09 01:47:46.000000000 -0400
+++ linux-2.6.12/kernel/panic.c	2005-08-09 01:47:50.000000000 -0400
@@ -22,6 +22,7 @@
 
 int panic_timeout;
 int panic_on_oops;
+int nopanic;
 int tainted;
 
 EXPORT_SYMBOL(panic_timeout);
@@ -36,6 +38,15 @@ static int __init panic_setup(char *str)
 }
 __setup("panic=", panic_setup);
 
+static int __init nopanic_setup(char *str)
+{
+	nopanic = 1;
+	return 1;
+}
+
+EXPORT_SYMBOL(nopanic);
+__setup("dontpanic", nopanic_setup);
+
 static long no_blink(long time)
 {
 	return 0;

--- linux-2.6.12/include/linux/spinlock.h~	2005-08-09 01:43:12.000000000 -0400
+++ linux-2.6.12/include/linux/spinlock.h	2005-08-09 01:43:31.000000000 -0400
@@ -34,6 +34,8 @@
 
 #define __lockfunc fastcall __attribute__((section(".spinlock.text")))
 
+extern int nopanic;
+
 /*
  * If CONFIG_SMP is set, pull in the _raw_* definitions
  */


linux-2.6-debug-spinlock-taint.patch:
 spinlock.h |   24 ++++++++++++------------
 1 files changed, 12 insertions(+), 12 deletions(-)

--- NEW FILE linux-2.6-debug-spinlock-taint.patch ---
Print info about tainting in the spinlock debug printks.

diff -urNp --exclude-from=/home/davej/.exclude linux-1720/include/linux/spinlock.h linux-1730/include/linux/spinlock.h
--- linux-1720/include/linux/spinlock.h
+++ linux-1730/include/linux/spinlock.h
@@ -114,8 +114,8 @@ typedef struct {
 #define CHECK_LOCK(x) \
 	do { \
 	 	if ((x)->magic != SPINLOCK_MAGIC) { \
-			printk(KERN_ERR "%s:%d: spin_is_locked on uninitialized spinlock %p.\n", \
-					__FILE__, __LINE__, (x)); \
+			printk(KERN_ERR "%s:%d: spin_is_locked on uninitialized spinlock %p. (%s)\n", \
+					__FILE__, __LINE__, (x), print_tainted()); \
 		} \
 	} while(0)
 
@@ -124,9 +124,9 @@ typedef struct {
 	 	CHECK_LOCK(x); \
 		if ((x)->lock&&(x)->babble) { \
 			(x)->babble--; \
-			printk("%s:%d: spin_lock(%s:%p) already locked by %s/%d\n", \
+			printk("%s:%d: spin_lock(%s:%p) already locked by %s/%d. (%s)\n", \
 					__FILE__,__LINE__, (x)->module, \
-					(x), (x)->owner, (x)->oline); \
+					(x), (x)->owner, (x)->oline, print_tainted()); \
 		} \
 		(x)->lock = 1; \
 		(x)->owner = __FILE__; \
@@ -140,9 +140,9 @@ typedef struct {
 	 	CHECK_LOCK(x); \
 		if ((x)->lock&&(x)->babble) { \
 			(x)->babble--; \
-			printk("%s:%d: spin_is_locked(%s:%p) already locked by %s/%d\n", \
+			printk("%s:%d: spin_is_locked(%s:%p) already locked by %s/%d.(%s)\n", \
 					__FILE__,__LINE__, (x)->module, \
-					(x), (x)->owner, (x)->oline); \
+					(x), (x)->owner, (x)->oline, print_tainted()); \
 		} \
 		0; \
 	})
@@ -162,9 +162,9 @@ typedef struct {
 	 	CHECK_LOCK(x); \
 		if ((x)->lock&&(x)->babble) { \
 			(x)->babble--; \
-			printk("%s:%d: spin_trylock(%s:%p) already locked by %s/%d\n", \
+			printk("%s:%d: spin_trylock(%s:%p) already locked by %s/%d.(%s)\n", \
 					__FILE__,__LINE__, (x)->module, \
-					(x), (x)->owner, (x)->oline); \
+					(x), (x)->owner, (x)->oline, print_tainted()); \
 		} \
 		(x)->lock = 1; \
 		(x)->owner = __FILE__; \
@@ -177,9 +177,9 @@ typedef struct {
 	 	CHECK_LOCK(x); \
 		if ((x)->lock&&(x)->babble) { \
 			(x)->babble--; \
-			printk("%s:%d: spin_unlock_wait(%s:%p) owned by %s/%d\n", \
+			printk("%s:%d: spin_unlock_wait(%s:%p) owned by %s/%d. (%s)\n", \
 					__FILE__,__LINE__, (x)->module, (x), \
-					(x)->owner, (x)->oline); \
+					(x)->owner, (x)->oline, print_tainted()); \
 		}\
 	} while (0)
 
@@ -188,8 +188,8 @@ typedef struct {
 	 	CHECK_LOCK(x); \
 		if (!(x)->lock&&(x)->babble) { \
 			(x)->babble--; \
-			printk("%s:%d: spin_unlock(%s:%p) not locked\n", \
-					__FILE__,__LINE__, (x)->module, (x));\
+			printk("%s:%d: spin_unlock(%s:%p) not locked. (%s)\n", \
+					__FILE__,__LINE__, (x)->module, (x), print_tainted());\
 		} \
 		(x)->lock = 0; \
 	} while (0)

linux-2.6-debug-taint-check.patch:
 arch/i386/kernel/traps.c |    5 ++++-
 include/linux/kernel.h   |    1 +
 kernel/panic.c           |    7 +++++++
 mm/slab.c                |   12 +++++++++++-
 4 files changed, 23 insertions(+), 2 deletions(-)

--- NEW FILE linux-2.6-debug-taint-check.patch ---
--- linux-2.6.11/kernel/panic.c~	2005-04-20 03:48:57.000000000 -0400
+++ linux-2.6.11/kernel/panic.c	2005-04-20 03:49:28.000000000 -0400
@@ -159,3 +159,10 @@ void add_taint(unsigned flag)
 	tainted |= flag;
 }
 EXPORT_SYMBOL(add_taint);
+
+int check_tainted(void)
+{
+	return tainted;
+}
+EXPORT_SYMBOL_GPL(check_tainted);
+
--- linux-2.6.11/include/linux/kernel.h~	2005-04-20 03:49:49.000000000 -0400
+++ linux-2.6.11/include/linux/kernel.h	2005-04-20 03:49:56.000000000 -0400
@@ -156,6 +156,7 @@ extern int panic_on_oops;
 extern int tainted;
 extern const char *print_tainted(void);
 extern void add_taint(unsigned);
+extern int check_tainted(void);
 
 #define crashdump_mode()       unlikely(netdump_mode || diskdump_mode)
 
--- linux-2.6.11/arch/i386/kernel/traps.c~	2005-04-20 03:57:00.000000000 -0400
+++ linux-2.6.11/arch/i386/kernel/traps.c	2005-04-20 03:58:23.000000000 -0400
@@ -182,7 +182,10 @@ void show_stack(struct task_struct *task
 			break;
 		if (i && ((i % 8) == 0))
 			printk("\n       ");
-		printk("%08lx ", *stack++);
+		if ((check_tainted() != 0) && (i==0))
+			printk("badc0ded ");
+		else
+			printk("%08lx ", *stack++);
 	}
 	printk("\nCall Trace:\n");
 	show_trace(task, esp);
--- linux-2.6.11/mm/slab.c~	2005-04-21 00:48:06.000000000 -0400
+++ linux-2.6.11/mm/slab.c	2005-04-21 00:57:00.000000000 -0400
@@ -1006,7 +1006,17 @@ static void dump_line(char *data, int of
 	int i;
 	printk(KERN_ERR "%03x:", offset);
 	for (i=0;i<limit;i++) {
-		printk(" %02x", (unsigned char)data[offset+i]);
+		if (check_tainted() == 0)
+			printk(" %02x", (unsigned char)data[offset+i]);
+		else {
+			switch (i) {
+			case 0:	printk(" f3 3d");
+					break;
+			case 1: break;
+			default:
+				printk(" %02x", (unsigned char)data[offset+i]);
+			}
+		}
 	}
 	printk("\n");
 }

linux-2.6-debug-taint-vm.patch:
 linux-2.6.11/include/asm-generic/bug.h |    8 ++++++--
 linux-2000/kernel/panic.c              |    1 +
 linux-2000/mm/page_alloc.c             |    4 ++--
 linux-2000/mm/slab.c                   |    4 ++--
 4 files changed, 11 insertions(+), 6 deletions(-)

--- NEW FILE linux-2.6-debug-taint-vm.patch ---
--- linux-2.6.11/include/asm-generic/bug.h~	2005-05-09 18:00:44.000000000 -0400
+++ linux-2.6.11/include/asm-generic/bug.h	2005-05-09 18:01:23.000000000 -0400
@@ -4,10 +4,14 @@
 #include <linux/compiler.h>
 #include <linux/config.h>
 
+#ifndef __ASSEMBLY__
+extern const char *print_tainted(void);
+#endif
+
 #ifdef CONFIG_BUG
 #ifndef HAVE_ARCH_BUG
 #define BUG() do { \
-	printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
+	printk("kernel BUG at %s:%d! (%s)\n", __FILE__, __LINE__, print_tainted()); \
 	panic("BUG!"); \
 } while (0)
 #endif
@@ -25,7 +29,7 @@
 #ifndef HAVE_ARCH_WARN_ON
 #define WARN_ON(condition) do { \
 	if (unlikely((condition)!=0)) { \
-		printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \
+		printk("Badness in %s at %s:%d (%s)\n", __FUNCTION__, __FILE__, __LINE__, print_tainted()); \
 		dump_stack(); \
 	} \
 } while (0)
diff -urNp --exclude-from=/home/davej/.exclude linux-1740/kernel/panic.c linux-2000/kernel/panic.c
--- linux-1740/kernel/panic.c
+++ linux-2000/kernel/panic.c
@@ -151,6 +151,7 @@ const char *print_tainted(void)
 		snprintf(buf, sizeof(buf), "Not tainted");
 	return(buf);
 }
+EXPORT_SYMBOL(print_tainted);
 
 void add_taint(unsigned flag)
 {
diff -urNp --exclude-from=/home/davej/.exclude linux-1740/mm/page_alloc.c linux-2000/mm/page_alloc.c
--- linux-1740/mm/page_alloc.c
+++ linux-2000/mm/page_alloc.c
@@ -97,9 +97,9 @@ static void bad_page(const char *functio
 {
 	printk(KERN_EMERG "Bad page state at %s (in process '%s', page %p)\n",
 		function, current->comm, page);
-	printk(KERN_EMERG "flags:0x%0*lx mapping:%p mapcount:%d count:%d\n",
+	printk(KERN_EMERG "flags:0x%0*lx mapping:%p mapcount:%d count:%d (%s)\n",
 		(int)(2*sizeof(page_flags_t)), (unsigned long)page->flags,
-		page->mapping, page_mapcount(page), page_count(page));
+		page->mapping, page_mapcount(page), page_count(page), print_tainted());
 	printk(KERN_EMERG "Backtrace:\n");
 	dump_stack();
 	printk(KERN_EMERG "Trying to fix it up, but a reboot is needed\n");
diff -urNp --exclude-from=/home/davej/.exclude linux-1740/mm/slab.c linux-2000/mm/slab.c
--- linux-1740/mm/slab.c
+++ linux-2000/mm/slab.c
@@ -1053,8 +1053,8 @@ static void check_poison_obj(kmem_cache_
 			/* Mismatch ! */
 			/* Print header */
 			if (lines == 0) {
-				printk(KERN_ERR "Slab corruption: start=%p, len=%d\n",
-						realobj, size);
+				printk(KERN_ERR "Slab corruption: (%s) start=%p, len=%d\n",
+						print_tainted(), realobj, size);
 				print_objinfo(cachep, objp, 0);
 			}
 			/* Hexdump the affected line */

linux-2.6-futex-wake_op.patch:
 include/asm-alpha/futex.h     |   53 +++++++++++++++++++
 include/asm-arm/futex.h       |   53 +++++++++++++++++++
 include/asm-arm26/futex.h     |   53 +++++++++++++++++++
 include/asm-cris/futex.h      |   53 +++++++++++++++++++
 include/asm-frv/futex.h       |   53 +++++++++++++++++++
 include/asm-h8300/futex.h     |   53 +++++++++++++++++++
 include/asm-i386/futex.h      |  108 +++++++++++++++++++++++++++++++++++++++
 include/asm-ia64/futex.h      |   53 +++++++++++++++++++
 include/asm-m32r/futex.h      |   53 +++++++++++++++++++
 include/asm-m68k/futex.h      |   53 +++++++++++++++++++
 include/asm-m68knommu/futex.h |   53 +++++++++++++++++++
 include/asm-mips/futex.h      |   53 +++++++++++++++++++
 include/asm-parisc/futex.h    |   53 +++++++++++++++++++
 include/asm-ppc/futex.h       |   53 +++++++++++++++++++
 include/asm-ppc64/futex.h     |   83 ++++++++++++++++++++++++++++++
 include/asm-ppc64/memory.h    |    2 
 include/asm-s390/futex.h      |   53 +++++++++++++++++++
 include/asm-sh/futex.h        |   53 +++++++++++++++++++
 include/asm-sh64/futex.h      |   53 +++++++++++++++++++
 include/asm-sparc/futex.h     |   53 +++++++++++++++++++
 include/asm-sparc64/futex.h   |   53 +++++++++++++++++++
 include/asm-um/futex.h        |   53 +++++++++++++++++++
 include/asm-v850/futex.h      |   53 +++++++++++++++++++
 include/asm-x86_64/futex.h    |   98 +++++++++++++++++++++++++++++++++++
 include/linux/futex.h         |   36 +++++++++++--
 kernel/futex.c                |  116 ++++++++++++++++++++++++++++++++++++++++++
 26 files changed, 1498 insertions(+), 5 deletions(-)

--- NEW FILE linux-2.6-futex-wake_op.patch ---
--- linux-2.6.12/include/linux/futex.h.jj	2005-06-17 21:48:29.000000000 +0200
+++ linux-2.6.12/include/linux/futex.h	2005-08-23 11:11:41.000000000 +0200
@@ -4,14 +4,40 @@
 /* Second argument to futex syscall */
 
 
-#define FUTEX_WAIT (0)
-#define FUTEX_WAKE (1)
-#define FUTEX_FD (2)
-#define FUTEX_REQUEUE (3)
-#define FUTEX_CMP_REQUEUE (4)
+#define FUTEX_WAIT		0
+#define FUTEX_WAKE		1
+#define FUTEX_FD		2
+#define FUTEX_REQUEUE		3
+#define FUTEX_CMP_REQUEUE	4
+#define FUTEX_WAKE_OP		5
 
 long do_futex(unsigned long uaddr, int op, int val,
 		unsigned long timeout, unsigned long uaddr2, int val2,
 		int val3);
 
+#define FUTEX_OP_SET		0	/* *(int *)UADDR2 = OPARG; */
+#define FUTEX_OP_ADD		1	/* *(int *)UADDR2 += OPARG; */
+#define FUTEX_OP_OR		2	/* *(int *)UADDR2 |= OPARG; */
+#define FUTEX_OP_ANDN		3	/* *(int *)UADDR2 &= ~OPARG; */
+#define FUTEX_OP_XOR		4	/* *(int *)UADDR2 ^= OPARG; */
+
+#define FUTEX_OP_OPARG_SHIFT	8	/* Use (1 << OPARG) instead of OPARG.  */
+
+#define FUTEX_OP_CMP_EQ		0	/* if (oldval == CMPARG) wake */
+#define FUTEX_OP_CMP_NE		1	/* if (oldval != CMPARG) wake */
+#define FUTEX_OP_CMP_LT		2	/* if (oldval < CMPARG) wake */
+#define FUTEX_OP_CMP_LE		3	/* if (oldval <= CMPARG) wake */
+#define FUTEX_OP_CMP_GT		4	/* if (oldval > CMPARG) wake */
+#define FUTEX_OP_CMP_GE		5	/* if (oldval >= CMPARG) wake */
+
+/* FUTEX_WAKE_OP will perform atomically
+   int oldval = *(int *)UADDR2;
+   *(int *)UADDR2 = oldval OP OPARG;
+   if (oldval CMP CMPARG)
+     wake UADDR2;  */
+
+#define FUTEX_OP(op, oparg, cmp, cmparg) \
+  (((op & 0xf) << 28) | ((cmp & 0xf) << 24)		\
+   | ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
+
 #endif
--- linux-2.6.12/kernel/futex.c.jj	2005-06-17 21:48:29.000000000 +0200
+++ linux-2.6.12/kernel/futex.c	2005-08-23 11:11:59.000000000 +0200
@@ -40,6 +40,7 @@
 #include <linux/pagemap.h>
 #include <linux/syscalls.h>
 #include <linux/signal.h>
+#include <asm/futex.h>
 
 #define FUTEX_HASHBITS (CONFIG_BASE_SMALL ? 4 : 8)
 
@@ -327,6 +328,118 @@ out:
 }
 
 /*
+ * Wake up all waiters hashed on the physical page that is mapped
+ * to this virtual address:
+ */
+static int futex_wake_op(unsigned long uaddr1, unsigned long uaddr2, int nr_wake, int nr_wake2, int op)
+{
+	union futex_key key1, key2;
+	struct futex_hash_bucket *bh1, *bh2;
+	struct list_head *head;
+	struct futex_q *this, *next;
+	int ret, op_ret, attempt = 0;
+
+retryfull:
+	down_read(&current->mm->mmap_sem);
+
+	ret = get_futex_key(uaddr1, &key1);
+	if (unlikely(ret != 0))
+		goto out;
+	ret = get_futex_key(uaddr2, &key2);
+	if (unlikely(ret != 0))
+		goto out;
+
+	bh1 = hash_futex(&key1);
+	bh2 = hash_futex(&key2);
+
+retry:
+	if (bh1 < bh2)
+		spin_lock(&bh1->lock);
+	spin_lock(&bh2->lock);
+	if (bh1 > bh2)
+		spin_lock(&bh1->lock);
+
+	op_ret = futex_atomic_op_inuser(op, (int __user *)uaddr2);
+	if (unlikely(op_ret < 0)) {
+		int dummy;
+
+		spin_unlock(&bh1->lock);
+		if (bh1 != bh2)
+			spin_unlock(&bh2->lock);
+
+		/* futex_atomic_op_inuser needs to both read and write
+		 * *(int __user *)uaddr2, but we can't modify it
+		 * non-atomically.  Therefore, if get_user below is not
+		 * enough, we need to handle the fault ourselves, while
+		 * still holding the mmap_sem.  */
+		if (attempt++) {
+			struct vm_area_struct * vma;
+			struct mm_struct *mm = current->mm;
+
+			ret = -EFAULT;
+			if (attempt >= 2 ||
+			    !(vma = find_vma(mm, uaddr2)) ||
+			    vma->vm_start > uaddr2 ||
+			    !(vma->vm_flags & VM_WRITE))
+				goto out;
+
+			switch (handle_mm_fault(mm, vma, uaddr2, 1)) {
+			case VM_FAULT_MINOR:
+				current->min_flt++;
+				break;
+			case VM_FAULT_MAJOR:
+				current->maj_flt++;
+				break;
+			default:
+				goto out;
+			}
+			goto retry;
+		}
+
+		/* If we would have faulted, release mmap_sem,
+		 * fault it in and start all over again.  */
+		up_read(&current->mm->mmap_sem);
+
+		ret = get_user(dummy, (int __user *)uaddr2);
+		if (ret)
+			return ret;
+
+		goto retryfull;
+	}
+
+	head = &bh1->chain;
+
+	list_for_each_entry_safe(this, next, head, list) {
+		if (match_futex (&this->key, &key1)) {
+			wake_futex(this);
+			if (++ret >= nr_wake)
+				break;
+		}
+	}
+
+	if (op_ret > 0) {
+		head = &bh2->chain;
+
+		op_ret = 0;
+		list_for_each_entry_safe(this, next, head, list) {
+			if (match_futex (&this->key, &key2)) {
+				wake_futex(this);
+				if (++op_ret >= nr_wake2)
+					break;
+			}
+		}
+		ret += op_ret;
+	}
+
+	spin_unlock(&bh1->lock);
+	if (bh1 != bh2)
+		spin_unlock(&bh2->lock);
+out:
+	up_read(&current->mm->mmap_sem);
+	return ret;
+}
+
+/*
  * Requeue all waiters hashed on one physical page to another
  * physical page.
  */
@@ -740,6 +853,9 @@ long do_futex(unsigned long uaddr, int o
 	case FUTEX_CMP_REQUEUE:
 		ret = futex_requeue(uaddr, uaddr2, val, val2, &val3);
 		break;
+	case FUTEX_WAKE_OP:
+		ret = futex_wake_op(uaddr, uaddr2, val, val2, val3);
+		break;
 	default:
 		ret = -ENOSYS;
 	}
--- linux-2.6.12/include/asm-ppc64/futex.h.jj	2005-08-23 11:11:41.000000000 +0200
+++ linux-2.6.12/include/asm-ppc64/futex.h	2005-08-23 11:11:41.000000000 +0200
@@ -0,0 +1,83 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/memory.h>
+#include <asm/uaccess.h>
+
+#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \
+  __asm__ __volatile (SYNC_ON_SMP				\
+"1:	lwarx	%0,0,%2\n"					\
+	insn							\
+"2:	stwcx.	%1,0,%2\n\
+	bne-	1b\n\
+	li	%1,0\n\
+3:	.section .fixup,\"ax\"\n\
+4:	li	%1,%3\n\
+	b	3b\n\
+	.previous\n\
+	.section __ex_table,\"a\"\n\
+	.align 3\n\
+	.llong	1b,4b,2b,4b\n\
+	.previous"						\
+	: "=&r" (oldval), "=&r" (ret)				\
+	: "b" (uaddr), "i" (-EFAULT), "1" (oparg)		\
+	: "cr0", "memory")
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+		__futex_atomic_op("", ret, oldval, uaddr, oparg);
+		break;
+	case FUTEX_OP_ADD:
+		__futex_atomic_op("add %1,%0,%1\n", ret, oldval, uaddr, oparg);
+		break;
+	case FUTEX_OP_OR:
+		__futex_atomic_op("or %1,%0,%1\n", ret, oldval, uaddr, oparg);
+		break;
+	case FUTEX_OP_ANDN:
+		__futex_atomic_op("andc %1,%0,%1\n", ret, oldval, uaddr, oparg);
+		break;
+	case FUTEX_OP_XOR:
+		__futex_atomic_op("xor %1,%0,%1\n", ret, oldval, uaddr, oparg);
+		break;
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-ppc64/memory.h.jj	2005-06-17 21:48:29.000000000 +0200
+++ linux-2.6.12/include/asm-ppc64/memory.h	2005-08-23 11:11:41.000000000 +0200
@@ -18,9 +18,11 @@
 #ifdef CONFIG_SMP
 #define EIEIO_ON_SMP	"eieio\n"
 #define ISYNC_ON_SMP	"\n\tisync"
+#define SYNC_ON_SMP	"lwsync\n\t"
 #else
 #define EIEIO_ON_SMP
 #define ISYNC_ON_SMP
+#define SYNC_ON_SMP
 #endif
 
 static inline void eieio(void)
--- linux-2.6.12/include/asm-x86_64/futex.h.jj	2005-08-23 11:11:41.000000000 +0200
+++ linux-2.6.12/include/asm-x86_64/futex.h	2005-08-23 11:11:41.000000000 +0200
@@ -0,0 +1,98 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/system.h>
+#include <asm/uaccess.h>
+
+#define __futex_atomic_op1(insn, ret, oldval, uaddr, oparg) \
+  __asm__ __volatile (						\
+"1:	" insn "\n"						\
+"2:	.section .fixup,\"ax\"\n\
+3:	mov	%3, %1\n\
+	jmp	2b\n\
+	.previous\n\
+	.section __ex_table,\"a\"\n\
+	.align	8\n\
+	.quad	1b,3b\n\
+	.previous"						\
+	: "=r" (oldval), "=r" (ret), "=m" (*uaddr)		\
+	: "i" (-EFAULT), "m" (*uaddr), "0" (oparg), "1" (0))
+
+#define __futex_atomic_op2(insn, ret, oldval, uaddr, oparg) \
+  __asm__ __volatile (						\
+"1:	movl	%2, %0\n\
+	movl	%0, %3\n"					\
+	insn "\n"						\
+"2:	" LOCK_PREFIX "cmpxchgl %3, %2\n\
+	jnz	1b\n\
+3:	.section .fixup,\"ax\"\n\
+4:	mov	%5, %1\n\
+	jmp	3b\n\
+	.previous\n\
+	.section __ex_table,\"a\"\n\
+	.align	8\n\
+	.quad	1b,4b,2b,4b\n\
+	.previous"						\
+	: "=&a" (oldval), "=&r" (ret), "=m" (*uaddr),		\
+	  "=&r" (tem)						\
+	: "r" (oparg), "i" (-EFAULT), "m" (*uaddr), "1" (0))
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+		__futex_atomic_op1("xchgl %0, %2", ret, oldval, uaddr, oparg);
+		break;
+	case FUTEX_OP_ADD:
+		__futex_atomic_op1(LOCK_PREFIX "xaddl %0, %2", ret, oldval,
+				   uaddr, oparg);
+		break;
+	case FUTEX_OP_OR:
+		__futex_atomic_op2("orl %4, %3", ret, oldval, uaddr, oparg);
+		break;
+	case FUTEX_OP_ANDN:
+		__futex_atomic_op2("andl %4, %3", ret, oldval, uaddr, ~oparg);
+		break;
+	case FUTEX_OP_XOR:
+		__futex_atomic_op2("xorl %4, %3", ret, oldval, uaddr, oparg);
+		break;
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-i386/futex.h.jj	2005-08-23 11:11:41.000000000 +0200
+++ linux-2.6.12/include/asm-i386/futex.h	2005-08-23 11:11:41.000000000 +0200
@@ -0,0 +1,108 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/system.h>
+#include <asm/processor.h>
+#include <asm/uaccess.h>
+
+#define __futex_atomic_op1(insn, ret, oldval, uaddr, oparg) \
+  __asm__ __volatile (						\
+"1:	" insn "\n"						\
+"2:	.section .fixup,\"ax\"\n\
+3:	mov	%3, %1\n\
+	jmp	2b\n\
+	.previous\n\
+	.section __ex_table,\"a\"\n\
+	.align	8\n\
+	.long	1b,3b\n\
+	.previous"						\
+	: "=r" (oldval), "=r" (ret), "=m" (*uaddr)		\
+	: "i" (-EFAULT), "m" (*uaddr), "0" (oparg), "1" (0))
+
+#define __futex_atomic_op2(insn, ret, oldval, uaddr, oparg) \
+  __asm__ __volatile (						\
+"1:	movl	%2, %0\n\
+	movl	%0, %3\n"					\
+	insn "\n"						\
+"2:	" LOCK "cmpxchgl %3, %2\n\
+	jnz	1b\n\
+3:	.section .fixup,\"ax\"\n\
+4:	mov	%5, %1\n\
+	jmp	3b\n\
+	.previous\n\
+	.section __ex_table,\"a\"\n\
+	.align	8\n\
+	.long	1b,4b,2b,4b\n\
+	.previous"						\
+	: "=&a" (oldval), "=&r" (ret), "=m" (*uaddr),		\
+	  "=&r" (tem)						\
+	: "r" (oparg), "i" (-EFAULT), "m" (*uaddr), "1" (0))
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	if (op == FUTEX_OP_SET)
+		__futex_atomic_op1("xchgl %0, %2", ret, oldval, uaddr, oparg);
+	else {
+#ifndef CONFIG_X86_BSWAP
+		if (boot_cpu_data.x86 == 3)
+			ret = -ENOSYS;
+		else
+#endif
+		switch (op) {
+		case FUTEX_OP_ADD:
+			__futex_atomic_op1(LOCK "xaddl %0, %2", ret,
+					   oldval, uaddr, oparg);
+			break;
+		case FUTEX_OP_OR:
+			__futex_atomic_op2("orl %4, %3", ret, oldval, uaddr,
+					   oparg);
+			break;
+		case FUTEX_OP_ANDN:
+			__futex_atomic_op2("andl %4, %3", ret, oldval, uaddr,
+					   ~oparg);
+			break;
+		case FUTEX_OP_XOR:
+			__futex_atomic_op2("xorl %4, %3", ret, oldval, uaddr,
+					   oparg);
+			break;
+		default:
+			ret = -ENOSYS;
+		}
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-alpha/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-alpha/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-arm/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-arm/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-arm26/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-arm26/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-cris/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-cris/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-frv/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-frv/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-h8300/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-h8300/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-ia64/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-ia64/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-m32r/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-m32r/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-m68k/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-m68k/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-m68knommu/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-m68knommu/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-mips/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-mips/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-parisc/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-parisc/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-ppc/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-ppc/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-s390/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-s390/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-sh/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-sh/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-sh64/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-sh64/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-sparc/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-sparc/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-sparc64/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-sparc64/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-um/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-um/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif
--- linux-2.6.12/include/asm-v850/futex.h.jj	2005-08-23 11:13:38.000000000 +0200
+++ linux-2.6.12/include/asm-v850/futex.h	2005-08-23 11:17:25.000000000 +0200
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+	int op = (encoded_op >> 28) & 7;
+	int cmp = (encoded_op >> 24) & 15;
+	int oparg = (encoded_op << 8) >> 20;
+	int cmparg = (encoded_op << 20) >> 20;
+	int oldval = 0, ret, tem;
+	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+		oparg = 1 << oparg;
+
+	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+		return -EFAULT;
+
+	inc_preempt_count();
+
+	switch (op) {
+	case FUTEX_OP_SET:
+	case FUTEX_OP_ADD:
+	case FUTEX_OP_OR:
+	case FUTEX_OP_ANDN:
+	case FUTEX_OP_XOR:
+	default:
+		ret = -ENOSYS;
+	}
+  
+	dec_preempt_count();
+
+	if (!ret) {
+		switch (cmp) {
+		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+		default: ret = -ENOSYS;
+		}
+	}
+	return ret;
+}
+
+#endif
+#endif


linux-2.6-ide-netcell.patch:
 drivers/ide/pci/generic.c |    9 ++++++++-
 drivers/ide/setup-pci.c   |    1 +
 drivers/pci/pci.ids       |    2 +-
 include/linux/pci_ids.h   |    3 +++
 4 files changed, 13 insertions(+), 2 deletions(-)

--- NEW FILE linux-2.6-ide-netcell.patch ---
diff -purN linux-2.6.13-rc3-git5/drivers/ide/pci/generic.c linux/drivers/ide/pci/generic.c
--- linux-2.6.13-rc3-git5/drivers/ide/pci/generic.c	2005-07-26 10:50:31.000000000 -0700
+++ linux/drivers/ide/pci/generic.c	2005-07-26 11:37:51.000000000 -0700
@@ -173,7 +173,13 @@ static ide_pci_device_t generic_chipsets
 		.channels	= 2,
 		.autodma	= NOAUTODMA,
 		.bootable	= ON_BOARD,
-	}
+	},{	/* 14 */
+		.name		= "Revolution",
+                .init_hwif      = init_hwif_generic,
+                .channels       = 2,
+                .autodma        = AUTODMA,
+                .bootable       = OFF_BOARD,
+        }
 };
 
 /**
@@ -231,6 +237,7 @@ static struct pci_device_id generic_pci_
 	{ PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO,     PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11},
 	{ PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_1,   PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12},
 	{ PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_2,   PCI_ANY_ID, PCI_ANY_ID, 0, 0, 13},
+	{ PCI_VENDOR_ID_NETCELL,PCI_DEVICE_ID_REVOLUTION,          PCI_ANY_ID, PCI_ANY_ID, 0, 0, 14},	
 	/* Must come last. If you add entries adjust this table appropriately and the init_one code */
 	{ PCI_ANY_ID,		PCI_ANY_ID,			   PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL, 0},
 	{ 0, },
diff -purN linux-2.6.13-rc3-git5/drivers/ide/setup-pci.c linux/drivers/ide/setup-pci.c
--- linux-2.6.13-rc3-git5/drivers/ide/setup-pci.c	2005-07-26 10:50:31.000000000 -0700
+++ linux/drivers/ide/setup-pci.c	2005-07-26 11:37:51.000000000 -0700
@@ -229,6 +229,7 @@ second_chance_to_dma:
 			case PCI_DEVICE_ID_AMD_VIPER_7409:
 			case PCI_DEVICE_ID_CMD_643:
 			case PCI_DEVICE_ID_SERVERWORKS_CSB5IDE:
+			case PCI_DEVICE_ID_REVOLUTION:
 				simplex_stat = hwif->INB(dma_base + 2);
 				hwif->OUTB((simplex_stat&0x60),(dma_base + 2));
 				simplex_stat = hwif->INB(dma_base + 2);
diff -purN linux-2.6.13-rc3-git5/drivers/pci/pci.ids linux/drivers/pci/pci.ids
--- linux-2.6.13-rc3-git5/drivers/pci/pci.ids	2005-07-26 10:50:01.000000000 -0700
+++ linux/drivers/pci/pci.ids	2005-07-26 11:37:52.000000000 -0700
@@ -7982,7 +7982,7 @@
 		168c 2042  Netgate 5354MP Plus ARIES2 a/b/g MiniPCI Adapter
 	1014  AR5212 802.11abg NIC
 169c  Netcell Corporation
-	0044  SyncRAID SR3000/5000 Series SATA RAID Controllers
+	0044  Revolution Storage Processing Card
 16a5  Tekram Technology Co.,Ltd.
 16ab  Global Sun Technology Inc
 	1100  GL24110P
diff -purN linux-2.6.13-rc3-git5/include/linux/pci_ids.h linux/include/linux/pci_ids.h
--- linux-2.6.13-rc3-git5/include/linux/pci_ids.h	2005-07-26 10:49:27.000000000 -0700
+++ linux/include/linux/pci_ids.h	2005-07-26 11:37:52.000000000 -0700
@@ -2170,6 +2170,9 @@
 #define PCI_VENDOR_ID_SIBYTE		0x166d
 #define PCI_DEVICE_ID_BCM1250_HT	0x0002
 
+#define PCI_VENDOR_ID_NETCELL		0x169c
+#define PCI_DEVICE_ID_REVOLUTION	0x0044
+
 #define PCI_VENDOR_ID_LINKSYS		0x1737
 #define PCI_DEVICE_ID_LINKSYS_EG1032	0x1032
 #define PCI_DEVICE_ID_LINKSYS_EG1064	0x1064

linux-2.6-input-usblegacy.patch:
 i8042.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletion(-)

--- NEW FILE linux-2.6-input-usblegacy.patch ---
Some laptops seem to lose their touchpads.
This patch is currently an experiment to see if its
usb legacy that's causing the problem.

--- linux-2.6.12/drivers/input/serio/i8042.c~	2005-08-28 17:17:55.000000000 -0400
+++ linux-2.6.12/drivers/input/serio/i8042.c	2005-08-28 17:19:42.000000000 -0400
@@ -576,8 +576,10 @@ static int __init i8042_check_mux(void)
 
 	/* Workaround for interference with USB Legacy emulation */
 	/* that causes a v10.12 MUX to be found. */
-	if (mux_version == 0xAC)
+	if (mux_version == 0xAC) {
+		printk(KERN_INFO "i8042.c: MUX probe failed. USB legacy enabled in BIOS?\n");
 		return -1;
+	}
 
 	printk(KERN_INFO "i8042.c: Detected active multiplexing controller, rev %d.%d.\n",
 		(mux_version >> 4) & 0xf, mux_version & 0xf);

linux-2.6-max-symlinks.patch:
 namei.h |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE linux-2.6-max-symlinks.patch ---
Bump up the maximum nested amount of symlinks.

diff -urNp --exclude-from=/home/davej/.exclude linux-3022/include/linux/namei.h linux-10000/include/linux/namei.h
--- linux-3022/include/linux/namei.h
+++ linux-10000/include/linux/namei.h
@@ -10,7 +10,7 @@ struct open_intent {
 	int	create_mode;
 };
 
-enum { MAX_NESTED_LINKS = 5 };
+enum { MAX_NESTED_LINKS = 8 };
 
 struct nameidata {
 	struct dentry	*dentry;

linux-2.6-modules-ignore-whitespace.patch:
 params.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

--- NEW FILE linux-2.6-modules-ignore-whitespace.patch ---

Name: Ignore trailing whitespace on kernel parameters correctly: Fixed version
Signed-off-by: Rusty Russell <rusty at rustcorp.com.au>

Dave Jones says:

... if the modprobe.conf has trailing whitespace, modules fail to load
with the following helpful message..

	snd_intel8x0: Unknown parameter `'

Previous version truncated last argument.

Index: linux-2.6.13-rc6-git7-Module/kernel/params.c
===================================================================
--- linux-2.6.13-rc6-git7-Module.orig/kernel/params.c	2005-08-10 16:12:45.000000000 +1000
+++ linux-2.6.13-rc6-git7-Module/kernel/params.c	2005-08-16 14:31:16.000000000 +1000
@@ -80,8 +80,6 @@
 	int in_quote = 0, quoted = 0;
 	char *next;
 
-	/* Chew any extra spaces */
-	while (*args == ' ') args++;
 	if (*args == '"') {
 		args++;
 		in_quote = 1;
@@ -121,6 +119,9 @@
 		next = args + i + 1;
 	} else
 		next = args + i;
+
+	/* Chew up trailing spaces. */
+	while (*next == ' ') next++;
 	return next;
 }
 
@@ -134,6 +135,9 @@
 	char *param, *val;
 
 	DEBUGP("Parsing ARGS: %s\n", args);
+	
+	/* Chew leading spaces */
+	while (*args == ' ') args++;
 
 	while (*args) {
 		int ret;



linux-2.6-net-acenic-use-after-free.patch:
 acenic.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE linux-2.6-net-acenic-use-after-free.patch ---
reference after free

diff -urNp --exclude-from=/home/davej/.exclude linux-3022/drivers/net/acenic.c linux-10000/drivers/net/acenic.c
--- linux-3022/drivers/net/acenic.c
+++ linux-10000/drivers/net/acenic.c
@@ -443,7 +443,7 @@ MODULE_PARM_DESC(max_rx_desc, "AceNIC/3C
 MODULE_PARM_DESC(tx_ratio, "AceNIC/3C985/GA620 ratio of NIC memory used for TX/RX descriptors (range 0-63)");
 
 
-static char version[] __devinitdata = 
+static char version[] = 
   "acenic.c: v0.92 08/05/2002  Jes Sorensen, linux-acenic at SunSITE.dk\n"
   "                            http://home.cern.ch/~jes/gige/acenic.html\n";
 

linux-2.6-net-sk98lin-vpd.patch:
 skvpd.c.orig |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletion(-)

--- NEW FILE linux-2.6-net-sk98lin-vpd.patch ---

https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=136158

--- 1/drivers/net/sk98lin/skvpd.c	2005-01-09 17:20:35.520678152 +0100
+++ 2/drivers/net/sk98lin/skvpd.c.orig	2005-01-09 17:20:08.812738376 +0100
@@ -502,7 +502,20 @@
 		/* checksum error */
 		SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
 			("VPD Checksum Error\n"));
-		return(1);
+		/* 090105 - JaWi/Timo - Attempt to workaround the faulty VPD
+		 * checksum of the FN95 mainboard. */
+		if ( ( ( unsigned char )pAC->vpd.vpd_buf[0x03] == 'Y' ) &&
+		     ( ( unsigned char )pAC->vpd.vpd_buf[0x04] == 'u' ) &&
+		     ( ( unsigned char )pAC->vpd.vpd_buf[0x05] == 'k' ) &&
+		     ( ( unsigned char )pAC->vpd.vpd_buf[0x06] == 'o' ) &&
+		     ( ( unsigned char )pAC->vpd.vpd_buf[0x07] == 'n' ) ) {
+			printk( "sk98lin: Yukon/FN95 board found?! "
+				"Ignoring faulty checksum (0x%x) ...\n", x );
+		}
+		else {
+			/* Other boards should fail on faulty checksums... */
+			return(1);
+		}
 	}
 
 	/* find and check the end tag of the RW area */

linux-2.6-obsolete-idescsi-warning.patch:
 ide-scsi.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletion(-)

--- NEW FILE linux-2.6-obsolete-idescsi-warning.patch ---

--- linux-2.6.11/drivers/scsi/ide-scsi.c~	2005-03-22 19:21:13.000000000 -0500
+++ linux-2.6.11/drivers/scsi/ide-scsi.c	2005-03-22 19:21:51.000000000 -0500
@@ -764,6 +764,8 @@ static ide_driver_t idescsi_driver = {
 	.drives			= LIST_HEAD_INIT(idescsi_driver.drives),
 };
 
+static int ide_scsi_warned;
+
 static int idescsi_ide_open(struct inode *inode, struct file *filp)
 {
 	struct gendisk *disk = inode->i_bdev->bd_disk;
@@ -776,7 +778,10 @@ static int idescsi_ide_open(struct inode
 	drive = scsi->drive;
 
 	drive->usage++;
-
+	if (!ide_scsi_warned++) {
+		printk(KERN_WARNING "ide-scsi: Warning this device driver is only intended for specialist devices.\n");
+		printk(KERN_WARNING "ide-scsi: Do not use for cd burning, use /dev/hdX directly instead.\n");
+	}
 	return 0;
 }
 

linux-2.6-obsolete-oss-warning.patch:
 pcm_oss.c |    7 +++++++
 1 files changed, 7 insertions(+)

--- NEW FILE linux-2.6-obsolete-oss-warning.patch ---

diff -urNp --exclude-from=/home/davej/.exclude linux-3022/sound/core/oss/pcm_oss.c linux-10000/sound/core/oss/pcm_oss.c
--- linux-3022/sound/core/oss/pcm_oss.c
+++ linux-10000/sound/core/oss/pcm_oss.c
@@ -1815,6 +1815,13 @@ static int snd_pcm_oss_open(struct inode
 	snd_pcm_oss_setup_t *psetup = NULL, *csetup = NULL;
 	int nonblock;
 	wait_queue_t wait;
+	static char printed_comm[16];
+
+	if (strncmp(printed_comm, current->comm, 16)) {
+		printk(KERN_DEBUG "application %s uses obsolete OSS audio interface\n",
+		       current->comm);
+		memcpy(printed_comm, current->comm, 16);
+	}
 
 	snd_assert(cardnum >= 0 && cardnum < SNDRV_CARDS, return -ENXIO);
 	device = SNDRV_MINOR_OSS_DEVICE(minor) == SNDRV_MINOR_OSS_PCM1 ?

linux-2.6-optimise-for-size.patch:
 Kconfig |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE linux-2.6-optimise-for-size.patch ---
MAke this selectable without EMBEDDED

diff -urNp --exclude-from=/home/davej/.exclude linux-3022/init/Kconfig linux-10000/init/Kconfig
--- linux-3022/init/Kconfig
+++ linux-10000/init/Kconfig
@@ -291,7 +291,7 @@ config EPOLL
 	  support for epoll family of system calls.
 
 config CC_OPTIMIZE_FOR_SIZE
-	bool "Optimize for size" if EMBEDDED
+	bool "Optimize for size"
 	default y if ARM || H8300
 	help
 	  Enabling this option will pass "-Os" instead of "-O2" to gcc

linux-2.6-pcmcia-single-port-off-by-one.patch:
 rsrc_nonstatic.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

--- NEW FILE linux-2.6-pcmcia-single-port-off-by-one.patch ---

Subject: [PATCH] pcmcia: allow one port excludes
From: Dominik Brodowski <linux at dominikbrodowski.net>
Date: 1127764542 +0200

Allow for excluding only one port in /etc/pcmcia/config.otps

Signed-off-by: Dominik Brodowski <linux at dominikbrodowski.net>

---

 drivers/pcmcia/rsrc_nonstatic.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

e32c6eb822af30fe90f55b89e553e7a060cdda79
diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c
--- a/drivers/pcmcia/rsrc_nonstatic.c
+++ b/drivers/pcmcia/rsrc_nonstatic.c
@@ -691,7 +691,7 @@ static int adjust_memory(struct pcmcia_s
 	unsigned long size = end - start + 1;
 	int ret = 0;
 
-	if (end <= start)
+	if (end < start)
 		return -EINVAL;
 
 	down(&rsrc_sem);
@@ -724,7 +724,7 @@ static int adjust_io(struct pcmcia_socke
 	unsigned long size = end - start + 1;
 	int ret = 0;
 
-	if (end <= start)
+	if (end < start)
 		return -EINVAL;
 
 	if (end > IO_SPACE_LIMIT)


linux-2.6-pwc-powerup-by-default.patch:
 pwc-if.c |    6 ++++++
 1 files changed, 6 insertions(+)

--- NEW FILE linux-2.6-pwc-powerup-by-default.patch ---
--- linux-2.6.13/drivers/usb/media/pwc/pwc-if.c~	2005-09-28 18:59:49.000000000 -0400
+++ linux-2.6.13/drivers/usb/media/pwc/pwc-if.c	2005-09-28 19:09:08.000000000 -0400
@@ -1946,6 +1946,12 @@ static int usb_pwc_probe(struct usb_inte
 	if (hint < MAX_DEV_HINTS) 
 		device_hint[hint].pdev = pdev;
 
+	if (!power_save) {
+		i = pwc_camera_power(pdev, 1);
+		if (i < 0)
+			Info("Failed to power up the camera! (%d)\n", i);
+	}
+
 	Trace(TRACE_PROBE, "probe() function returning struct at 0x%p.\n", pdev);
 	usb_set_intfdata (intf, pdev);
 	return 0;

linux-2.6-radeon-backlight.patch:
 linux-2.6.11-rc4-tank/drivers/video/aty/radeon_base.c |   11 
 linux-2.6.11-rc4-tank/drivers/video/aty/radeon_pm.c   |  299 +++++++++++++++++-
 linux-2.6.12/drivers/video/aty/radeon_pm.c            |   16 
 linux-2.6.13/drivers/video/aty/radeon_pm.c            |    8 
 4 files changed, 333 insertions(+), 1 deletion(-)

--- NEW FILE linux-2.6-radeon-backlight.patch ---
--- linux-2.6.11-rc4-tank/drivers/video/aty/radeon_pm.c.tppm	2005-02-20 20:09:02.000000000 +0200
+++ linux-2.6.11-rc4-tank/drivers/video/aty/radeon_pm.c	2005-02-20 21:35:27.000000000 +0200
@@ -25,8 +25,274 @@
 #include <asm/pmac_feature.h>
 #endif
 
+/* For detecting supported PC laptops */
+#ifdef CONFIG_X86
+#include <linux/dmi.h>
+#endif
+
 #include "ati_ids.h"
 
+#ifdef CONFIG_X86
+/* This array holds a list of supported PC laptops.
+ * Currently only few IBM models are tested.
+ * If you want to experiment, use dmidecode to find out
+ * vendor and product codes for Your laptop.
+ */
+static struct dmi_system_id __devinitdata radeonfb_dmi_table[] = {
+	{
+		/* Reported by George Avrunin <avrunin at math.umass.edu> */
+		.ident = "IBM ThinkPad T40 (2372-9CU)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "23729CU"),
+		},
+	},
+	{
+		/* Reported by Pete Toscano <pete at verisignlabs.com> */
+		.ident = "IBM ThinkPad R40 (2722-B3G)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2722B3G"),
+		},
+	},
+	{
+		/* Reported by Phillip Jones <philljones at us.ibm.com> */
+		.ident = "IBM ThinkPad T30 (2366-MU9)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2366MU9"),
+		},
+	},
+	{
+		/* Reported by Klaus Kurzmann <mok at fluxnetz.de> */
+		.ident = "IBM ThinkPad T40 (2373-25G)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "237325G"),
+		},
+	},
+	{
+		/* Reported by Antti Andreimann <Antti.Andreimann at mail.ee> */
+		.ident = "IBM ThinkPad T41 (2373-2FG)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "23732FG"),
+		},
+	},
+	{
+		/* Reported by Antti P Miettinen <apm at brigitte.dna.fi> */
+		.ident = "IBM ThinkPad T40 (2373-4G2)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "23734G2"),
+	      },
+	},
+	{
+		/* Reported by Pete Toscano <pete at verisignlabs.com> */
+		.ident = "IBM ThinkPad T40 (2373-92G)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "237392G"),
+	      },
+	},
+	{
+		/* Reported by Pete Toscano <pete at verisignlabs.com> */
+		.ident = "IBM ThinkPad T40 (2373-8CG)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "23738CG"),
+		},
+	},
+	{
+		/* Reported by Pete Toscano <pete at verisignlabs.com> */
+		.ident = "IBM ThinkPad T40 (2373-94U)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "237394U"),
+		},
+	},
+	{
+		/* Reported by Manuel Carro <mcarro at fi.upm.es> */
+		.ident = "IBM ThinkPad T40 (2373-94G)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "237394G"),
+		},
+	},
+	{
+		/* Reported by Peter Jones <pjones at redhat.com> */
+		.ident = "IBM ThinkPad T41 (2373-9FU)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "23739FU"),
+		},
+	},
+	{
+		/* Reported by Ajay Ramaswamy <ajay at ramaswamy.net> */
+		.ident = "IBM ThinkPad T41 (2373-9HU)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "23739HU"),
+	      },
+	},
+	{
+		/* Reported by Peter Jones <pjones at redhat.com> */
+		.ident = "IBM ThinkPad T40 (2373-BU7)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2373BU7"),
+		},
+	},
+	{
+		/* Reported by Jerome Poggi <Jerome.Poggi at hsc.fr> */
+		.ident = "IBM ThinkPad T42 (2373-FWG)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2373FWG"),
+		},
+	},
+	{
+		/* Reported by Juerg Billeter <j at bitron.ch> */
+		.ident = "IBM ThinkPad T40p (2373-G1G)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2373G1G"),
+		},
+	},
+	{
+		/* Reported by Bill Nottingham <notting at redhat.com> */
+		.ident = "IBM ThinkPad T40p (2373-G1U)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2373G1U"),
+		},
+	},
+	{
+		/* Reported by Hartwig, Thomas <t.hartwig at itth.com> */
+		.ident = "IBM ThinkPad T40p (2373-G3G)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2373G3G"),
+		},
+	},
+	{
+		/* Reported by Eric Benson <eric_a_benson at yahoo.com> */
+		.ident = "IBM ThinkPad T41p (2373-GEU)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2373GEU"),
+		},
+	},
+	{
+		/* Reported by Dwight Barkley <barkley at maths.warwick.ac.uk> */
+		.ident = "IBM ThinkPad T42 (2373-JTU)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2373JTU"),
+		},
+	},
+	{
+		/* Reported by Vernon Mauery <vernux at us.ibm.com> */
+		.ident = "IBM ThinkPad T40 (2373-MU4)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2373MU4"),
+		},
+	},
+	{
+		/* Reported by Ajay Ramaswamy <ajay at ramaswamy.net> */
+		.ident = "IBM ThinkPad T41 (2373-XNX)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2373XNX"),
+	      },
+	},
+	{
+		/* Reported by obi <graziano at cs.ucsb.edu> */
+		.ident = "IBM ThinkPad T41 (2378-DEU)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2378DEU"),
+		},
+	},
+	{
+		/* Reported by Volker Braun <vbraun at physics.upenn.edu> */
+		.ident = "IBM ThinkPad T41 (2379-DJU)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2379DJU"),
+		},
+	},
+	{
+		/* Reported by Pete Toscano <pete at verisignlabs.com> */
+		.ident = "IBM ThinkPad T42 (2373-FWG)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2373FWG"),
+		},
+	},
+	{
+		/* Reported by Frank Schmitt <tonne2004 at gehheimdienst.de> */
+		.ident = "IBM ThinkPad R40 (2722-3GG)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "27223GG"),
+		},
+	},
+	{
+		/* Reported by Nils Trebing <nils.trebing at uni-konstanz.de> */
+		.ident = "IBM ThinkPad R40 (2722-5MG)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "27225MG"),
+		},
+	},
+	{
+		/* Reported by Paul Ionescu <i_p_a_u_l at yahoo.com> */
+		.ident = "IBM ThinkPad T41 (2373-TG5)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2373TG5"),
+		},
+	},
+	{
+		/* Reported by Michele Lamarca <lammic at gmail.com> */
+		.ident = "IBM ThinkPad T40 (2373-22G)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "237322G"),
+		},
+	},
+	{
+		/* Reported by Henrik Brix Andersen <brix at gentoo.org> */
+		.ident = "IBM ThinkPad X31 (2672-XXH)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2672XXH"),
+		},
+	},
+	{
+		/* Reported by Matthew Saltzman <mjs at clemson.edu> */
+		.ident = "IBM ThinkPad T41 (2373-7JU)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "23737JU"),
+		},
+	},
+	{ },
+	/* Negative reports: */
+	/* IBM thinkpad T30 2366 -> machine hangs 
+	   Reported by: Jakob Schiotz <schiotz at fysik.dtu.dk> */
+	/* IBM thinkpad T42p 2373-KUU -> machine hangs as X starts
+	   Reported by: Dax Kelson <dax at gurulabs.com> */
+	/* IBM ThinkPad X31 2672-XXH -> works, but doesn't fix the LCD 
+	   backlight on during S3 issue.
+	   Reported by: Henrik Brix Andersen <brix at gentoo.org> */
+};
+
+extern int radeon_force_sleep;
+#endif
+
 static void radeon_pm_disable_dynamic_mode(struct radeonfb_info *rinfo)
 {
 	u32 tmp;
@@ -852,7 +1109,14 @@
 	/* because both INPLL and OUTPLL take the same lock, that's why. */
 	tmp = INPLL( pllMCLK_MISC) | MCLK_MISC__EN_MCLK_TRISTATE_IN_SUSPEND;
 	OUTPLL( pllMCLK_MISC, tmp);
-	
+
+	/* BUS_CNTL1__MOBILE_PLATORM_SEL setting is northbridge chipset
+	 * and radeon chip dependent. Thus we only enable it on Mac for
+	 * now (until we get more info on how to compute the correct
+	 * value for various X86 bridges).
+	 */
+
+#ifdef CONFIG_PPC_PMAC
 	/* AGP PLL control */
 	if (rinfo->family <= CHIP_FAMILY_RV280) {
 		OUTREG(BUS_CNTL1, INREG(BUS_CNTL1) |  BUS_CNTL1__AGPCLK_VALID);
@@ -864,6 +1128,7 @@
 		OUTREG(BUS_CNTL1, INREG(BUS_CNTL1));
 		OUTREG(BUS_CNTL1, (INREG(BUS_CNTL1) & ~0x4000) | 0x8000);
 	}
+#endif
 
 	OUTREG(CRTC_OFFSET_CNTL, (INREG(CRTC_OFFSET_CNTL)
 				  & ~CRTC_OFFSET_CNTL__CRTC_STEREO_SYNC_OUT_EN));
@@ -2790,6 +3055,29 @@
 #endif
 	}
 #endif /* defined(CONFIG_PM) && defined(CONFIG_PPC_OF) */
+
+/* The PM code also works on some PC laptops.
+ * Only a few models are actually tested so Your mileage may vary.
+ * We can do D2 on at least M7 and M9 on some IBM ThinkPad T41 models.
+ */
+#if defined(CONFIG_PM) && defined(CONFIG_X86)
+	if (radeon_force_sleep || dmi_check_system(radeonfb_dmi_table)) {
+		if (radeon_force_sleep)
+			printk("radeonfb: forcefully enabling sleep mode\n");
+		else
+			printk("radeonfb: enabling sleep mode\n");
+
+		if (rinfo->is_mobility && rinfo->pm_reg &&
+		    rinfo->family <= CHIP_FAMILY_RV250)
+			rinfo->pm_mode |= radeon_pm_d2;
+
+		/* Power down TV DAC, that saves a significant amount of power,
+		 * we'll have something better once we actually have some TVOut
+		 * support
+		 */
+		OUTREG(TV_DAC_CNTL, INREG(TV_DAC_CNTL) | 0x07000000);
+	}
+#endif /* defined(CONFIG_PM) && defined(CONFIG_X86) */
 }
 
 void radeonfb_pm_exit(struct radeonfb_info *rinfo)
--- linux-2.6.11-rc4-tank/drivers/video/aty/radeon_base.c.tppm	2005-02-20 20:08:15.000000000 +0200
+++ linux-2.6.11-rc4-tank/drivers/video/aty/radeon_base.c	2005-02-20 20:18:20.000000000 +0200
@@ -272,6 +272,9 @@
 #ifdef CONFIG_MTRR
 static int nomtrr = 0;
 #endif
+#if defined(CONFIG_PM) && defined(CONFIG_X86)
+int radeon_force_sleep = 0;
+#endif
 
 /*
  * prototypes
@@ -2530,6 +2533,10 @@
 			force_measure_pll = 1;
 		} else if (!strncmp(this_opt, "ignore_edid", 11)) {
 			ignore_edid = 1;
+#if defined(CONFIG_PM) && defined(CONFIG_X86)
+		} else if (!strncmp(this_opt, "force_sleep", 11)) {
+			radeon_force_sleep = 1;
+#endif
 		} else
 			mode_option = this_opt;
 	}
@@ -2585,3 +2592,7 @@
 MODULE_PARM_DESC(panel_yres, "int: set panel yres");
 module_param(mode_option, charp, 0);
 MODULE_PARM_DESC(mode_option, "Specify resolution as \"<xres>x<yres>[-<bpp>][@<refresh>]\" ");
+#if defined(CONFIG_PM) && defined(CONFIG_X86)
+module_param(radeon_force_sleep, int, 0);
+MODULE_PARM_DESC(radeon_force_sleep, "bool: force ACPI sleep mode on untested machines");
+#endif
--- linux-2.6.12/drivers/video/aty/radeon_pm.c~	2005-07-05 16:07:58.000000000 -0400
+++ linux-2.6.12/drivers/video/aty/radeon_pm.c	2005-07-05 16:08:43.000000000 -0400
@@ -271,6 +271,14 @@ static struct dmi_system_id __devinitdat
 			DMI_MATCH(DMI_PRODUCT_NAME, "23737JU"),
 		},
 	},
+	{
+		/* Reported by David Zeuthen <davidz at redhat.com> */
+		.ident = "IBM ThinkPad T41 (2373-HU6)",
+		.matches = {
+		DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+		DMI_MATCH(DMI_PRODUCT_NAME, "2373HU6"),
+		},
+	},
 	{ },
 	/* Negative reports: */
 	/* IBM thinkpad T30 2366 -> machine hangs 
--- linux-2.6.12/drivers/video/aty/radeon_pm.c~	2005-08-26 00:57:10.000000000 -0400
+++ linux-2.6.12/drivers/video/aty/radeon_pm.c	2005-08-26 00:58:17.000000000 -0400
@@ -232,6 +232,14 @@ static struct dmi_system_id __devinitdat
 		},
 	},
 	{
+		/* Reported by Ulrich Drepper <drepper at redhat.com> */
+		.ident = "IBM ThinkPad T42 (2378-R2U)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "2378R2U"),
+		},
+	},
+	{
 		/* Reported by Frank Schmitt <tonne2004 at gehheimdienst.de> */
 		.ident = "IBM ThinkPad R40 (2722-3GG)",
 		.matches = {
--- linux-2.6.13/drivers/video/aty/radeon_pm.c~	2005-09-23 20:11:34.000000000 -0400
+++ linux-2.6.13/drivers/video/aty/radeon_pm.c	2005-09-23 20:12:23.000000000 -0400
@@ -56,6 +56,14 @@ static struct dmi_system_id __devinitdat
 		},
 	},
 	{
+		/* Reported by Stephan Groß <st.gross at inf.tu-dresden.de> */
+		.ident = "IBM ThinkPad T30 (2366-97G)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "236697G"),
+		},
+	},
+	{
 		/* Reported by Phillip Jones <philljones at us.ibm.com> */
 		.ident = "IBM ThinkPad T30 (2366-MU9)",
 		.matches = {

linux-2.6-sound-emu10k1-ac97.patch:
 emu10k1_main.c |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)

--- NEW FILE linux-2.6-sound-emu10k1-ac97.patch ---
--- linux-2.6.13/sound/pci/emu10k1/emu10k1_main.c~	2005-09-23 18:15:33.000000000 -0400
+++ linux-2.6.13/sound/pci/emu10k1/emu10k1_main.c	2005-09-23 18:18:17.000000000 -0400
@@ -741,17 +741,24 @@ static emu_chip_details_t emu_chip_detai
 	 .emu10k1_chip = 1,
 	 .ac97_chip = 1,
 	 .sblive51 = 1} ,
+	/* Tested by Thomas Zehetbauer 27th Aug 2005 */
+	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80651102,
+	 .driver = "EMU10K1", .name = "SB Live 5.1 [SB0220]",
+	 .id = "Live",
+	 .emu10k1_chip = 1,
+	 .ac97_chip = 1,
+	 .sblive51 = 1} ,
 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80641102,
 	 .driver = "EMU10K1", .name = "SB Live 5.1", 
 	 .id = "Live",
 	 .emu10k1_chip = 1,
 	 .ac97_chip = 1,
 	 .sblive51 = 1} ,
+	/* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */
 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102,
-	 .driver = "EMU10K1", .name = "SBLive! Player 5.1 [SB0060]", 
+	 .driver = "EMU10K1", .name = "SBLive! Platinum 5.1 [SB0060]", 
 	 .id = "Live",
 	 .emu10k1_chip = 1,
-	 .ac97_chip = 1,
 	 .sblive51 = 1} ,
 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102,
 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4850]", 

linux-2.6-tux.patch:
 linux-2.6.12/arch/ia64/kernel/ia64_ksyms.c |    5 
 linux-2.6.12/net/Kconfig                   |    1 
 linux-2.6.12/net/ipv4/tcp_output.c         |    1 
 linux/arch/alpha/kernel/systbls.S          |    8 
 linux/arch/i386/kernel/syscall_table.S     |   10 
 linux/arch/ia64/kernel/entry.S             |    8 
 linux/arch/ppc64/kernel/misc.S             |   20 
 linux/arch/x86_64/ia32/ia32entry.S         |   10 
 linux/fs/dcache.c                          |   36 
 linux/fs/exec.c                            |    2 
 linux/fs/fcntl.c                           |    4 
 linux/fs/namei.c                           |   18 
 linux/fs/namespace.c                       |    2 
 linux/fs/open.c                            |    4 
 linux/fs/pipe.c                            |    2 
 linux/fs/read_write.c                      |    2 
 linux/include/asm-alpha/fcntl.h            |    1 
 linux/include/asm-i386/fcntl.h             |    1 
 linux/include/asm-i386/unistd.h            |    5 
 linux/include/asm-ia64/fcntl.h             |    1 
 linux/include/asm-ia64/unistd.h            |    2 
 linux/include/asm-ppc/fcntl.h              |    1 
 linux/include/asm-ppc64/fcntl.h            |    1 
 linux/include/asm-s390/fcntl.h             |    1 
 linux/include/asm-sparc/fcntl.h            |    1 
 linux/include/asm-sparc64/fcntl.h          |    1 
 linux/include/asm-x86_64/fcntl.h           |    1 
 linux/include/asm-x86_64/unistd.h          |   10 
 linux/include/linux/buffer_head.h          |    1 
 linux/include/linux/dcache.h               |    8 
 linux/include/linux/errno.h                |    3 
 linux/include/linux/file.h                 |    2 
 linux/include/linux/fs.h                   |    7 
 linux/include/linux/kmod.h                 |    2 
 linux/include/linux/namei.h                |    2 
 linux/include/linux/net.h                  |    1 
 linux/include/linux/sched.h                |    5 
 linux/include/linux/skbuff.h               |    2 
 linux/include/linux/socket.h               |    5 
 linux/include/linux/sysctl.h               |   50 
 linux/include/net/sock.h                   |    6 
 linux/include/net/tcp.h                    |    3 
 linux/include/net/tux.h                    |  802 ++++++++++
 linux/include/net/tux_u.h                  |  163 ++
 linux/kernel/exit.c                        |    7 
 linux/kernel/fork.c                        |    1 
 linux/kernel/kmod.c                        |   30 
 linux/kernel/signal.c                      |    1 
 linux/mm/filemap.c                         |   19 
 linux/mm/truncate.c                        |    2 
 linux/net/Makefile                         |    1 
 linux/net/ipv4/tcp.c                       |    3 
 linux/net/ipv4/tcp_input.c                 |    1 
 linux/net/ipv4/tcp_ipv4.c                  |    5 
 linux/net/ipv4/tcp_minisocks.c             |    3 
 linux/net/ipv4/tcp_output.c                |    5 
 linux/net/socket.c                         |  137 +
 linux/net/tux/Kconfig                      |   25 
 linux/net/tux/Makefile                     |   12 
 linux/net/tux/abuf.c                       |  190 ++
 linux/net/tux/accept.c                     |  859 +++++++++++
 linux/net/tux/cachemiss.c                  |  265 +++
 linux/net/tux/cgi.c                        |  160 ++
 linux/net/tux/directory.c                  |  302 +++
 linux/net/tux/extcgi.c                     |  329 ++++
 linux/net/tux/gzip.c                       |   40 
 linux/net/tux/input.c                      |  640 ++++++++
 linux/net/tux/logger.c                     |  836 +++++++++++
 linux/net/tux/main.c                       | 1413 ++++++++++++++++++
 linux/net/tux/mod.c                        |  262 +++
 linux/net/tux/output.c                     |  352 ++++
 linux/net/tux/parser.h                     |  102 +
 linux/net/tux/postpone.c                   |   77 +
 linux/net/tux/proc.c                       | 1149 +++++++++++++++
 linux/net/tux/proto_ftp.c                  | 1549 ++++++++++++++++++++
 linux/net/tux/proto_http.c                 | 2197 +++++++++++++++++++++++++++++
 linux/net/tux/redirect.c                   |  167 ++
 linux/net/tux/times.c                      |  392 +++++
 linux/net/tux/times.h                      |   26 
 linux/net/tux/userspace.c                  |   27 
 80 files changed, 12736 insertions(+), 71 deletions(-)

--- NEW FILE linux-2.6-tux.patch ---
 arch/alpha/kernel/systbls.S      |    8 
 arch/i386/kernel/syscall_table.S |   10 
 arch/ia64/kernel/entry.S         |    8 
 arch/ia64/kernel/ia64_ksyms.c    |    3 
 arch/ppc64/kernel/misc.S         |   20 
 arch/x86_64/ia32/ia32entry.S     |   10 
 fs/dcache.c                      |   36 
 fs/exec.c                        |    2 
 fs/fcntl.c                       |    4 
 fs/namei.c                       |   18 
 fs/namespace.c                   |    2 
 fs/open.c                        |    4 
 fs/pipe.c                        |    2 
 fs/read_write.c                  |    2 
 include/asm-alpha/fcntl.h        |    1 
 include/asm-i386/fcntl.h         |    1 
 include/asm-i386/unistd.h        |    5 
 include/asm-ia64/fcntl.h         |    1 
 include/asm-ia64/unistd.h        |    2 
 include/asm-ppc/fcntl.h          |    1 
 include/asm-ppc64/fcntl.h        |    1 
 include/asm-s390/fcntl.h         |    1 
 include/asm-sparc/fcntl.h        |    1 
 include/asm-sparc64/fcntl.h      |    1 
 include/asm-x86_64/fcntl.h       |    1 
 include/asm-x86_64/unistd.h      |   10 
 include/linux/buffer_head.h      |    1 
 include/linux/dcache.h           |    8 
 include/linux/errno.h            |    3 
 include/linux/file.h             |    2 
 include/linux/fs.h               |    7 
 include/linux/kmod.h             |    2 
 include/linux/namei.h            |    2 
 include/linux/net.h              |    1 
 include/linux/sched.h            |    5 
 include/linux/skbuff.h           |    2 
 include/linux/socket.h           |    5 
 include/linux/sysctl.h           |   50 
 include/net/sock.h               |    6 
 include/net/tcp.h                |    8 
 include/net/tux.h                |  802 ++++++++++++++
 include/net/tux_u.h              |  163 ++
 kernel/exit.c                    |   10 
 kernel/fork.c                    |    1 
 kernel/kmod.c                    |   30 
 kernel/signal.c                  |    1 
 mm/filemap.c                     |   19 
 mm/truncate.c                    |    2 
 net/Kconfig                      |    2 
 net/Makefile                     |    1 
 net/ipv4/tcp.c                   |    3 
 net/ipv4/tcp_input.c             |    1 
 net/ipv4/tcp_ipv4.c              |    5 
 net/ipv4/tcp_minisocks.c         |    3 
 net/ipv4/tcp_output.c            |    5 
 net/socket.c                     |  137 +-
 net/tux/Kconfig                  |   25 
 net/tux/Makefile                 |   12 
 net/tux/abuf.c                   |  190 +++
 net/tux/accept.c                 |  859 +++++++++++++++
 net/tux/cachemiss.c              |  265 ++++
 net/tux/cgi.c                    |  160 ++
 net/tux/directory.c              |  302 +++++
 net/tux/extcgi.c                 |  329 +++++
 net/tux/gzip.c                   |   40 
 net/tux/input.c                  |  640 +++++++++++
 net/tux/logger.c                 |  836 ++++++++++++++
 net/tux/main.c                   | 1413 +++++++++++++++++++++++++
 net/tux/mod.c                    |  262 ++++
 net/tux/output.c                 |  352 ++++++
 net/tux/parser.h                 |  102 +
 net/tux/postpone.c               |   77 +
 net/tux/proc.c                   | 1149 ++++++++++++++++++++
 net/tux/proto_ftp.c              | 1549 +++++++++++++++++++++++++++
 net/tux/proto_http.c             | 2197 +++++++++++++++++++++++++++++++++++++++
 net/tux/redirect.c               |  167 ++
 net/tux/times.c                  |  392 ++++++
 net/tux/times.h                  |   26 
 net/tux/userspace.c              |   27 
 79 files changed, 12739 insertions(+), 74 deletions(-)

Index: linux/arch/alpha/kernel/systbls.S
===================================================================
--- linux.orig/arch/alpha/kernel/systbls.S
+++ linux/arch/alpha/kernel/systbls.S
@@ -240,7 +240,15 @@ sys_call_table:
 	.quad alpha_ni_syscall
 	.quad alpha_ni_syscall			/* 220 */
 	.quad alpha_ni_syscall
+#ifdef CONFIG_TUX
+	.quad __sys_tux
+#else
+# ifdef CONFIG_TUX_MODULE
+	.quad sys_tux
+# else
 	.quad alpha_ni_syscall
+# endif
+#endif
 	.quad alpha_ni_syscall
 	.quad alpha_ni_syscall
 	.quad alpha_ni_syscall			/* 225 */
Index: linux/arch/i386/kernel/syscall_table.S
===================================================================
--- linux.orig/arch/i386/kernel/syscall_table.S
+++ linux/arch/i386/kernel/syscall_table.S
@@ -222,7 +222,15 @@ ENTRY(sys_call_table)
 	.long sys_madvise
 	.long sys_getdents64	/* 220 */
 	.long sys_fcntl64
-	.long sys_ni_syscall	/* reserved for TUX */
+#ifdef CONFIG_TUX
+	.long __sys_tux
+#else
+# ifdef CONFIG_TUX_MODULE
+	.long sys_tux
+# else
+	.long sys_ni_syscall
+# endif
+#endif
 	.long sys_ni_syscall
 	.long sys_gettid
 	.long sys_readahead	/* 225 */
Index: linux/arch/ia64/kernel/entry.S
===================================================================
--- linux.orig/arch/ia64/kernel/entry.S
+++ linux/arch/ia64/kernel/entry.S
@@ -1423,7 +1423,15 @@ sys_call_table:
 	data8 sys_syslog
 	data8 sys_setitimer
 	data8 sys_getitimer
+#ifdef CONFIG_TUX
+	data8 __sys_tux				// 1120		/* was: ia64_oldstat */
+#else
+# ifdef CONFIG_TUX_MODULE
+	data8 sys_tux				// 1120		/* was: ia64_oldstat */
+# else
 	data8 sys_ni_syscall			// 1120		/* was: ia64_oldstat */
+# endif
+#endif
 	data8 sys_ni_syscall					/* was: ia64_oldlstat */
 	data8 sys_ni_syscall					/* was: ia64_oldfstat */
 	data8 sys_vhangup
Index: linux/arch/ia64/kernel/ia64_ksyms.c
===================================================================
--- linux-2.6.12/arch/ia64/kernel/ia64_ksyms.c~	2005-07-12 17:30:24.000000000 -0400
+++ linux-2.6.12/arch/ia64/kernel/ia64_ksyms.c	2005-07-12 17:30:45.000000000 -0400
@@ -58,6 +58,11 @@ EXPORT_SYMBOL(__strlen_user);
 EXPORT_SYMBOL(__strncpy_from_user);
 EXPORT_SYMBOL(__strnlen_user);
 
+#define __KERNEL_SYSCALLS__
+#include <asm/unistd.h>
+EXPORT_SYMBOL(sys_execve);
+EXPORT_SYMBOL(clone);
+
 /* from arch/ia64/lib */
 extern void __divsi3(void);
 extern void __udivsi3(void);
Index: linux/arch/ppc64/kernel/misc.S
===================================================================
--- linux.orig/arch/ppc64/kernel/misc.S
+++ linux/arch/ppc64/kernel/misc.S
@@ -1079,7 +1079,15 @@ _GLOBAL(sys_call_table32)
 	.llong .compat_sys_sched_setaffinity
 	.llong .compat_sys_sched_getaffinity
 	.llong .sys_ni_syscall
-	.llong .sys_ni_syscall		/* 225 - reserved for tux */
+#ifdef CONFIG_TUX
+        .llong .__sys_tux
+#else
+# ifdef CONFIG_TUX_MODULE
+        .llong .sys_tux
+# else
+	.llong .sys_ni_syscall
+# endif
+#endif
 	.llong .sys32_sendfile64
 	.llong .compat_sys_io_setup
 	.llong .sys_io_destroy
@@ -1355,7 +1363,15 @@ _GLOBAL(sys_call_table)
 	.llong .sys_sched_setaffinity
 	.llong .sys_sched_getaffinity
 	.llong .sys_ni_syscall
-	.llong .sys_ni_syscall		/* 225 - reserved for tux */
+#ifdef CONFIG_TUX
+        .llong .__sys_tux
+#else
+# ifdef CONFIG_TUX_MODULE
+        .llong .sys_tux
+# else
+	.llong .sys_ni_syscall
+# endif
+#endif
 	.llong .sys_ni_syscall		/* 32bit only sendfile64 */
 	.llong .sys_io_setup
 	.llong .sys_io_destroy
Index: linux/arch/x86_64/ia32/ia32entry.S
===================================================================
--- linux.orig/arch/x86_64/ia32/ia32entry.S
[...13504 lines suppressed...]
+	/* day 0 is march 1, 2000 */
+	year = 5 + day / 146097;
+	day = day % 146097;
+	if (day < 0) {
+		day += 146097;
+		--year;
+	}
+	/* from now on, day is nonnegative */
+	year *= 4;
+	if (day == 146096) {
+		year += 3;
+		day = 36524;
+	} else {
+		year += day / 36524;
+		day %= 36524;
+	}
+	year *= 25;
+	year += day / 1461;
+	day %= 1461;
+	year *= 4;
+	if (day == 1460) {
+		year += 3;
+		day = 365;
+	} else {
+		year += day / 365;
+		day %= 365;
+	}
+
+	day *= 10;
+	mon = (day + 5) / 306;
+	day = day + 5 - 306 * mon;
+	day /= 10;
+	if (mon >= 10) {
+		++year;
+		mon -= 10;
+	} else
+		mon += 2;
+
+	return sprintf(curr, "213 %.4d%.2d%.2d%.2d%.2d%.2d\r\n",
+		year, mon+1, day+1, hour, min, sec);
+}
+
+static inline int make_num(const char *s)
+{
+	if (*s >= '0' && *s <= '9')
+		return 10 * (*s - '0') + *(s + 1) - '0';
+	else
+		return *(s + 1) - '0';
+}
+
+static inline int make_month(const char *s)
+{
+	int i;
+
+	for (i = 0; i < 12; i++)
+		if (!strncmp(monthName[i], s, 3))
+			return i+1;
+	return 0;
+}
+
+time_t parse_time(const char *str, const int str_len)
+{
+	int hour;
+	int min;
+	int sec;
+	int mday;
+	int mon;
+	int year;
+
+	if (str[3] == ',') {
+		/* Thu, 09 Jan 1993 01:29:59 GMT */
+
+		if (str_len < 29)
+			return -1;
+
+		mday = make_num(str+5);
+		mon = make_month(str + 8);
+		year = 100 * make_num(str + 12) + make_num(str + 14);
+		hour = make_num(str + 17);
+		min = make_num(str + 20);
+		sec = make_num(str + 23);
+	}
+	else {
+		const char *s;
+		s = strchr(str, ',');
+		if (!s || (str_len - (s - str) < 24)) {
+			/* Wed Jun  9 01:29:59 1993 */
+
+			if (str_len < 24)
+                        	return -1;
+
+			mon = make_month(str+4);
+			mday = make_num(str+8);
+			hour = make_num(str+11);
+			min = make_num(str+14);
+			sec = make_num(str+17);
+			year = make_num(str+20)*100 + make_num(str+22);
+		}
+		else {
+			/* Thursday, 10-Jun-93 01:29:59 GMT */
+
+			mday = make_num(s + 2);
+			mon = make_month(s + 5);
+			year = make_num(s + 9) + 1900;
+			if (year < 1970)
+				year += 100;
+			hour = make_num(s + 12);
+			min = make_num(s + 15);
+			sec = make_num(s + 18);
+		}
+	}
+
+	if (sec < 0 || sec > 59)
+		return -1;
+	if (min < 0 || min > 59)
+		return -1;
+	if (hour < 0 || hour > 23)
+		return -1;
+	if (mday < 1 || mday > 31)
+		return -1;
+	if (mon < 1 || mon > 12)
+		return -1;
+	if (year < 1970 || year > 2020)
+		return -1;
+
+	return mktime(year, mon, mday, hour, min, sec);
+}
Index: linux/net/tux/times.h
===================================================================
--- /dev/null
+++ linux/net/tux/times.h
@@ -0,0 +1,26 @@
+static time_t TimeDays[10][13] = {
+ { 852073200,	854751600,	857170800,	859849200,	862441200,	865119600,	867711600,	870390000,	873068400,	875660400,	878338800,	880930800,	883609200 } ,
+ { 883609200,	886287600,	888706800,	891385200,	893977200,	896655600,	899247600,	901926000,	904604400,	907196400,	909874800,	912466800,	915145200 } ,
+ { 915145200,	917823600,	920242800,	922921200,	925513200,	928191600,	930783600,	933462000,	936140400,	938732400,	941410800,	944002800,	946681200 } ,
+ { 946681200,	949359600,	951865200,	954543600,	957135600,	959814000,	962406000,	965084400,	967762800,	970354800,	973033200,	975625200,	978303600 } ,
+ { 978303600,	980982000,	983401200,	986079600,	988671600,	991350000,	993942000,	996620400,	999298800,	1001890800,	1004569200,	1007161200,	1009839600 } ,
+ { 1009839600,	1012518000,	1014937200,	1017615600,	1020207600,	1022886000,	1025478000,	1028156400,	1030834800,	1033426800,	1036105200,	1038697200,	1041375600 } ,
+ { 1041375600,	1044054000,	1046473200,	1049151600,	1051743600,	1054422000,	1057014000,	1059692400,	1062370800,	1064962800,	1067641200,	1070233200,	1072911600 } ,
+ { 1072911600,	1075590000,	1078095600,	1080774000,	1083366000,	1086044400,	1088636400,	1091314800,	1093993200,	1096585200,	1099263600,	1101855600,	1104534000 } ,
+ { 1104534000,	1107212400,	1109631600,	1112310000,	1114902000,	1117580400,	1120172400,	1122850800,	1125529200,	1128121200,	1130799600,	1133391600,	1136070000 } ,
+ { 1136070000,	1138748400,	1141167600,	1143846000,	1146438000,	1149116400,	1151708400,	1154386800,	1157065200,	1159657200,	1162335600,	1164927600,	1167606000 }
+};
+static int WeekDays[10][13] = {
+ { 3,	6,	6,	2,	4,	0,	2,	5,	1,	3,	6,	1,	4 } ,
+ { 4,	0,	0,	3,	5,	1,	3,	6,	2,	4,	0,	2,	5 } ,
+ { 5,	1,	1,	4,	6,	2,	4,	0,	3,	5,	1,	3,	6 } ,
+ { 6,	2,	3,	6,	1,	4,	6,	2,	5,	0,	3,	5,	1 } ,
+ { 1,	4,	4,	0,	2,	5,	0,	3,	6,	1,	4,	6,	2 } ,
+ { 2,	5,	5,	1,	3,	6,	1,	4,	0,	2,	5,	0,	3 } ,
+ { 3,	6,	6,	2,	4,	0,	2,	5,	1,	3,	6,	1,	4 } ,
+ { 4,	0,	1,	4,	6,	2,	4,	0,	3,	5,	1,	3,	6 } ,
+ { 6,	2,	2,	5,	0,	3,	5,	1,	4,	6,	2,	4,	0 } ,
+ { 0,	3,	3,	6,	1,	4,	6,	2,	5,	0,	3,	5,	1 }
+};
+#define TUX_YEAROFFSET   1997
+#define TUX_NUMYEARS     10
Index: linux/net/tux/userspace.c
===================================================================
--- /dev/null
+++ linux/net/tux/userspace.c
@@ -0,0 +1,27 @@
+/*
+ * TUX - Integrated Application Protocols Layer and Object Cache
+ *
+ * Copyright (C) 2000, 2001, Ingo Molnar <mingo at redhat.com>
+ *
+ * userspace.c: handle userspace-module requests
+ */
+
+#include <net/tux.h>
+
+/****************************************************************
+ *      This program is free software; you can redistribute it and/or modify
+ *      it under the terms of the GNU General Public License as published by
+ *      the Free Software Foundation; either version 2, or (at your option)
+ *      any later version.
+ *
+ *      This program is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *      GNU General Public License for more details.
+ *
+ *      You should have received a copy of the GNU General Public License
+ *      along with this program; if not, write to the Free Software
+ *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ ****************************************************************/
+
--- linux-2.6.12/net/ipv4/tcp_output.c~	2005-07-14 18:20:31.000000000 -0400
+++ linux-2.6.12/net/ipv4/tcp_output.c	2005-07-14 18:20:45.000000000 -0400
@@ -1067,6 +1067,7 @@ void __tcp_push_pending_frames(struct so
 			tcp_check_probe_timer(sk, tp);
 	}
 }
+EXPORT_SYMBOL_GPL(__tcp_push_pending_frames);
 
 /* Send _single_ skb sitting at the send head. This function requires
  * true push pending frames to setup probe timer etc.

linux-2.6-unexport-symbols.patch:
 arch/x86_64/ia32/sys_ia32.c |    1 -
 fs/open.c                   |    1 -
 2 files changed, 2 deletions(-)

--- NEW FILE linux-2.6-unexport-symbols.patch ---
No external modules should be touching these symbols.
If they are, they are broken.

diff -urNp --exclude-from=/home/davej/.exclude linux-3022/fs/open.c linux-10000/fs/open.c
--- linux-3022/fs/open.c
+++ linux-10000/fs/open.c
@@ -976,7 +976,6 @@ out_error:
 	fd = error;
 	goto out;
 }
-EXPORT_SYMBOL_GPL(sys_open);
 
 #ifndef __alpha__
 
diff -urNp --exclude-from=/home/davej/.exclude linux-3022/arch/x86_64/ia32/sys_ia32.c linux-10000/arch/x86_64/ia32/sys_ia32.c
--- linux-3022/arch/x86_64/ia32/sys_ia32.c
+++ linux-10000/arch/x86_64/ia32/sys_ia32.c
@@ -1048,4 +1048,3 @@ static int __init ia32_init (void)
 __initcall(ia32_init);
 
 extern unsigned long ia32_sys_call_table[];
-EXPORT_SYMBOL(ia32_sys_call_table);

linux-2.6-usb-ehci-intsoff-on-reset.patch:
 ehci-hcd.c |    1 +
 1 files changed, 1 insertion(+)

--- NEW FILE linux-2.6-usb-ehci-intsoff-on-reset.patch ---

Turn off interrupts before we perform the reset.

--- linux-2.6.11/drivers/usb/host/ehci-hcd.c.orig	2005-05-01 10:01:22.152008984 +0100
+++ linux-2.6.11/drivers/usb/host/ehci-hcd.c	2005-05-01 10:25:00.418949184 +0100
@@ -382,6 +382,7 @@ static int ehci_hc_reset (struct usb_hcd
 	ehci->hcs_params = readl (&ehci->caps->hcs_params);
 
 #ifdef	CONFIG_PCI
+	writel(0, &ehci->regs->intr_enable);
 	if (hcd->self.controller->bus == &pci_bus_type) {
 		struct pci_dev	*pdev = to_pci_dev(hcd->self.controller);
 

linux-2.6-vm-silence-atomic-alloc-failures.patch:
 gfp.h |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE linux-2.6-vm-silence-atomic-alloc-failures.patch ---
Atomic failures aren't too interesting.

diff -urNp --exclude-from=/home/davej/.exclude linux-3022/include/linux/gfp.h linux-10000/include/linux/gfp.h
--- linux-3022/include/linux/gfp.h
+++ linux-10000/include/linux/gfp.h
@@ -47,7 +47,7 @@ struct vm_area_struct;
 			__GFP_COLD|__GFP_NOWARN|__GFP_REPEAT| \
 			__GFP_NOFAIL|__GFP_NORETRY|__GFP_NO_GROW|__GFP_COMP)
 
-#define GFP_ATOMIC	(__GFP_HIGH)
+#define GFP_ATOMIC	(__GFP_HIGH | __GFP_NOWARN)
 #define GFP_NOIO	(__GFP_WAIT)
 #define GFP_NOFS	(__GFP_WAIT | __GFP_IO)
 #define GFP_KERNEL	(__GFP_WAIT | __GFP_IO | __GFP_FS)

linux-2.6-w1-hush-debug.patch:
 w1.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE linux-2.6-w1-hush-debug.patch ---
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=167403

--- linux-2.6.13/drivers/w1/w1.c~	2005-09-28 06:09:13.000000000 -0400
+++ linux-2.6.13/drivers/w1/w1.c	2005-09-28 06:09:27.000000000 -0400
@@ -593,7 +593,7 @@ void w1_search(struct w1_master *dev, w1
 		 * Return 0 - device(s) present, 1 - no devices present.
 		 */
 		if (w1_reset_bus(dev)) {
-			dev_dbg(&dev->dev, "No devices present on the wire.\n");
+			//dev_dbg(&dev->dev, "No devices present on the wire.\n");
 			break;
 		}
 

linux-2.6.12-ext3-always-nobh.patch:
 super.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletion(-)

Index: linux-2.6.12-ext3-always-nobh.patch
===================================================================
RCS file: linux-2.6.12-ext3-always-nobh.patch
diff -N linux-2.6.12-ext3-always-nobh.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ linux-2.6.12-ext3-always-nobh.patch	29 Sep 2005 23:04:29 -0000	1.3
@@ -0,0 +1,19 @@
+--- linux-2.6.11/fs/ext3/super.c~	2005-05-11 19:04:49.000000000 -0400
++++ linux-2.6.11/fs/ext3/super.c	2005-05-11 19:08:16.000000000 -0400
+@@ -925,7 +925,6 @@ clear_qf_name:
+ 			*n_blocks_count = option;
+ 			break;
+ 		case Opt_nobh:
+-			set_opt(sbi->s_mount_opt, NOBH);
+ 			break;
+ 		default:
+ 			printk (KERN_ERR
+@@ -943,6 +942,8 @@ clear_qf_name:
+ 	}
+ #endif
+ 
++	set_opt(sbi->s_mount_opt, NOBH);
++
+ 	return 1;
+ }
+ 

linux-2.6.12-pmac-sound-oops.patch:
 pmac.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletion(-)

--- NEW FILE linux-2.6.12-pmac-sound-oops.patch ---
--- linux-2.6.12/sound/ppc/pmac.c.orig	2005-08-17 11:19:46.000000000 +0100
+++ linux-2.6.12/sound/ppc/pmac.c	2005-08-17 11:20:05.000000000 +0100
@@ -765,7 +765,8 @@ snd_pmac_ctrl_intr(int irq, void *devid,
  */
 static void snd_pmac_sound_feature(pmac_t *chip, int enable)
 {
-	ppc_md.feature_call(PMAC_FTR_SOUND_CHIP_ENABLE, chip->node, 0, enable);
+	if (ppc_md.feature_call)
+		ppc_md.feature_call(PMAC_FTR_SOUND_CHIP_ENABLE, chip->node, 0, enable);
 }
 
 /*

linux-2.6.12-scsi-advansys-pcitable.patch:
 drivers/scsi/advansys.c              |   82 +++++++++++++++++------------------
 linux-2.6.12/include/linux/pci_ids.h |    3 +
 2 files changed, 44 insertions(+), 41 deletions(-)

--- NEW FILE linux-2.6.12-scsi-advansys-pcitable.patch ---
Remove a lot of duplicate #defines from the advansys driver.

--- linux-2.6.12/include/linux/pci_ids.h~	2005-07-05 23:18:13.000000000 -0400
+++ linux-2.6.12/include/linux/pci_ids.h	2005-07-05 23:30:02.000000000 -0400
@@ -1101,9 +1101,12 @@
 #define PCI_DEVICE_ID_NEOMAGIC_MAGICGRAPH_128ZVPLUS   0x0083
 
 #define PCI_VENDOR_ID_ASP		0x10cd
+#define PCI_DEVICE_ID_ASP_1200A		0x1100
 #define PCI_DEVICE_ID_ASP_ABP940	0x1200
 #define PCI_DEVICE_ID_ASP_ABP940U	0x1300
 #define PCI_DEVICE_ID_ASP_ABP940UW	0x2300
+#define PCI_DEVICE_ID_38C0800_REV1	0x2500
+#define PCI_DEVICE_ID_38C1600_REV1	0x2700
 
 #define PCI_VENDOR_ID_MACRONIX		0x10d9
 #define PCI_DEVICE_ID_MACRONIX_MX98713	0x0512

--- vanilla/drivers/scsi/advansys.c	2005-06-17 15:48:29.000000000 -0400
+++ linux-2.6.12/drivers/scsi/advansys.c	2005-07-05 23:27:48.000000000 -0400
@@ -889,10 +889,6 @@ typedef unsigned char uchar;
 #define ASC_PCI_ID2DEV(id)    (((id) >> 11) & 0x1F)
 #define ASC_PCI_ID2FUNC(id)   (((id) >> 8) & 0x7)
 #define ASC_PCI_MKID(bus, dev, func) ((((dev) & 0x1F) << 11) | (((func) & 0x7) << 8) | ((bus) & 0xFF))
-#define ASC_PCI_VENDORID                  0x10CD
-#define ASC_PCI_DEVICEID_1200A            0x1100
-#define ASC_PCI_DEVICEID_1200B            0x1200
-#define ASC_PCI_DEVICEID_ULTRA            0x1300
 #define ASC_PCI_REVISION_3150             0x02
 #define ASC_PCI_REVISION_3050             0x03
 
@@ -1493,8 +1489,6 @@ typedef struct asc_dvc_cfg {
 #define ASC_INIT_STATE_END_INQUIRY   0x0080
 #define ASC_INIT_RESET_SCSI_DONE     0x0100
 #define ASC_INIT_STATE_WITHOUT_EEP   0x8000
-#define ASC_PCI_DEVICE_ID_REV_A      0x1100
-#define ASC_PCI_DEVICE_ID_REV_B      0x1200
 #define ASC_BUG_FIX_IF_NOT_DWB       0x0001
 #define ASC_BUG_FIX_ASYN_USE_SYN     0x0002
 #define ASYN_SDTR_DATA_FIX_PCI_REV_AB 0x41
@@ -2101,12 +2095,6 @@ STATIC ASC_DCNT  AscGetMaxDmaCount(ushor
 #define ADV_NUM_PAGE_CROSSING \
     ((ADV_SG_TOTAL_MEM_SIZE + (ADV_PAGE_SIZE - 1))/ADV_PAGE_SIZE)
 
-/* a_condor.h */
-#define ADV_PCI_VENDOR_ID               0x10CD
-#define ADV_PCI_DEVICE_ID_REV_A         0x2300
-#define ADV_PCI_DEVID_38C0800_REV1      0x2500
-#define ADV_PCI_DEVID_38C1600_REV1      0x2700
-
 #define ADV_EEP_DVC_CFG_BEGIN           (0x00)
 #define ADV_EEP_DVC_CFG_END             (0x15)
 #define ADV_EEP_DVC_CTL_BEGIN           (0x16)  /* location of OEM name */
@@ -3570,14 +3558,7 @@ typedef struct scsi_cmnd     REQ, *REQP;
 #define PCI_MAX_SLOT            0x1F
 #define PCI_MAX_BUS             0xFF
 #define PCI_IOADDRESS_MASK      0xFFFE
-#define ASC_PCI_VENDORID        0x10CD
 #define ASC_PCI_DEVICE_ID_CNT   6       /* PCI Device ID count. */
-#define ASC_PCI_DEVICE_ID_1100  0x1100
-#define ASC_PCI_DEVICE_ID_1200  0x1200
-#define ASC_PCI_DEVICE_ID_1300  0x1300
-#define ASC_PCI_DEVICE_ID_2300  0x2300  /* ASC-3550 */
-#define ASC_PCI_DEVICE_ID_2500  0x2500  /* ASC-38C0800 */
-#define ASC_PCI_DEVICE_ID_2700  0x2700  /* ASC-38C1600 */
 
 #ifndef ADVANSYS_STATS
 #define ASC_STATS(shp, counter)
@@ -4331,12 +4312,12 @@ advansys_detect(struct scsi_host_templat
     struct pci_dev      *pci_devp = NULL;
     int                 pci_device_id_cnt = 0;
     unsigned int        pci_device_id[ASC_PCI_DEVICE_ID_CNT] = {
-                                    ASC_PCI_DEVICE_ID_1100,
-                                    ASC_PCI_DEVICE_ID_1200,
-                                    ASC_PCI_DEVICE_ID_1300,
-                                    ASC_PCI_DEVICE_ID_2300,
-                                    ASC_PCI_DEVICE_ID_2500,
-                                    ASC_PCI_DEVICE_ID_2700
+                                    PCI_DEVICE_ID_ASP_1200A,
+                                    PCI_DEVICE_ID_ASP_ABP940,
+                                    PCI_DEVICE_ID_ASP_ABP940U,
+                                    PCI_DEVICE_ID_ASP_ABP940UW,
+                                    PCI_DEVICE_ID_38C0800_REV1,
+                                    PCI_DEVICE_ID_38C1600_REV1
                         };
     ADV_PADDR           pci_memory_address;
 #endif /* CONFIG_PCI */
@@ -4472,7 +4453,7 @@ advansys_detect(struct scsi_host_templat
 
                     /* Find all PCI cards. */
                     while (pci_device_id_cnt < ASC_PCI_DEVICE_ID_CNT) {
-                        if ((pci_devp = pci_find_device(ASC_PCI_VENDORID,
+                        if ((pci_devp = pci_find_device(PCI_VENDOR_ID_ASP,
                             pci_device_id[pci_device_id_cnt], pci_devp)) ==
                             NULL) {
                             pci_device_id_cnt++;
@@ -4578,9 +4559,9 @@ advansys_detect(struct scsi_host_templat
              */
 #ifdef CONFIG_PCI
             if (asc_bus[bus] == ASC_IS_PCI &&
-                (pci_devp->device == ASC_PCI_DEVICE_ID_2300 ||
-                 pci_devp->device == ASC_PCI_DEVICE_ID_2500 ||
-                 pci_devp->device == ASC_PCI_DEVICE_ID_2700))
+                (pci_devp->device == PCI_DEVICE_ID_ASP_ABP940UW ||
+                 pci_devp->device == PCI_DEVICE_ID_38C0800_REV1 ||
+                 pci_devp->device == PCI_DEVICE_ID_38C1600_REV1))
             {
                 boardp->flags |= ASC_IS_WIDE_BOARD;
             }
@@ -4603,11 +4584,11 @@ advansys_detect(struct scsi_host_templat
                 adv_dvc_varp->isr_callback = adv_isr_callback;
                 adv_dvc_varp->async_callback = adv_async_callback;
 #ifdef CONFIG_PCI
-                if (pci_devp->device == ASC_PCI_DEVICE_ID_2300)
+                if (pci_devp->device == PCI_DEVICE_ID_ASP_ABP940UW)
                 {
                     ASC_DBG(1, "advansys_detect: ASC-3550\n");
                     adv_dvc_varp->chip_type = ADV_CHIP_ASC3550;
-                } else if (pci_devp->device == ASC_PCI_DEVICE_ID_2500)
+                } else if (pci_devp->device == PCI_DEVICE_ID_38C0800_REV1)
                 {
                     ASC_DBG(1, "advansys_detect: ASC-38C0800\n");
                     adv_dvc_varp->chip_type = ADV_CHIP_ASC38C0800;
@@ -11929,7 +11910,7 @@ AscInitGetConfig(
         PCIRevisionID = DvcReadPCIConfigByte(asc_dvc,
                                     AscPCIConfigRevisionIDRegister);
 
-        if (PCIVendorID != ASC_PCI_VENDORID) {
+        if (PCIVendorID != PCI_VENDOR_ID_ASP) {
             warn_code |= ASC_WARN_SET_PCI_CONFIG_SPACE;
         }
         prevCmdRegBits = DvcReadPCIConfigByte(asc_dvc,
@@ -11949,15 +11930,15 @@ AscInitGetConfig(
                 warn_code |= ASC_WARN_SET_PCI_CONFIG_SPACE;
             }
         }
-        if ((PCIDeviceID == ASC_PCI_DEVICEID_1200A) ||
-            (PCIDeviceID == ASC_PCI_DEVICEID_1200B)) {
+        if ((PCIDeviceID == PCI_DEVICE_ID_ASP_1200A) ||
+            (PCIDeviceID == PCI_DEVICE_ID_ASP_ABP940)) {
             DvcWritePCIConfigByte(asc_dvc,
                             AscPCIConfigLatencyTimer, 0x00);
             if (DvcReadPCIConfigByte(asc_dvc, AscPCIConfigLatencyTimer)
                 != 0x00) {
                 warn_code |= ASC_WARN_SET_PCI_CONFIG_SPACE;
             }
-        } else if (PCIDeviceID == ASC_PCI_DEVICEID_ULTRA) {
+        } else if (PCIDeviceID == PCI_DEVICE_ID_ASP_ABP940U) {
             if (DvcReadPCIConfigByte(asc_dvc,
                                 AscPCIConfigLatencyTimer) < 0x20) {
                 DvcWritePCIConfigByte(asc_dvc,
@@ -12044,8 +12025,8 @@ AscInitFromAscDvcVar(
         AscSetChipCfgMsw(iop_base, cfg_msw);
         if ((asc_dvc->bus_type & ASC_IS_PCI_ULTRA) == ASC_IS_PCI_ULTRA) {
         } else {
-            if ((pci_device_id == ASC_PCI_DEVICE_ID_REV_A) ||
-                (pci_device_id == ASC_PCI_DEVICE_ID_REV_B)) {
+            if ((pci_device_id == PCI_DEVICE_ID_ASP_1200A) ||
+                (pci_device_id == PCI_DEVICE_ID_ASP_ABP940)) {
                 asc_dvc->bug_fix_cntl |= ASC_BUG_FIX_IF_NOT_DWB;
                 asc_dvc->bug_fix_cntl |= ASC_BUG_FIX_ASYN_USE_SYN;
             }
@@ -14282,8 +14263,8 @@ Default_38C0800_EEPROM_Config __initdata
     0,                          /* 55 reserved */
     0,                          /* 56 cisptr_lsw */
     0,                          /* 57 cisprt_msw */
-    ADV_PCI_VENDOR_ID,          /* 58 subsysvid */
-    ADV_PCI_DEVID_38C0800_REV1, /* 59 subsysid */
+    PCI_VENDOR_ID_ASP,          /* 58 subsysvid */
+    PCI_DEVICE_ID_38C0800_REV1, /* 59 subsysid */
     0,                          /* 60 reserved */
     0,                          /* 61 reserved */
     0,                          /* 62 reserved */
@@ -14412,8 +14393,8 @@ Default_38C1600_EEPROM_Config __initdata
     0,                          /* 55 reserved */
     0,                          /* 56 cisptr_lsw */
     0,                          /* 57 cisprt_msw */
-    ADV_PCI_VENDOR_ID,          /* 58 subsysvid */
-    ADV_PCI_DEVID_38C1600_REV1, /* 59 subsysid */
+    PCI_VENDOR_ID_ASP,          /* 58 subsysvid */
+    PCI_DEVICE_ID_38C1600_REV1, /* 59 subsysid */
     0,                          /* 60 reserved */
     0,                          /* 61 reserved */
     0,                          /* 62 reserved */




The advansys driver needs a lot of TLC. It does all its probing
for devices in a prehistoric way.  This patch at least allows
anaconda to recognise that the devices exist.

https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=162431


--- vanilla/drivers/scsi/advansys.c	2005-06-17 15:48:29.000000000 -0400
+++ linux-2.6.12/drivers/scsi/advansys.c	2005-07-05 23:27:48.000000000 -0400
@@ -18232,3 +18213,22 @@ AdvInquiryHandling(
     }
 }
 MODULE_LICENSE("Dual BSD/GPL");
+
+/* PCI Devices supported by this driver */
+static struct pci_device_id advansys_pci_tbl[] __devinitdata = {
+	{ PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_ASP_1200A,
+	PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+	{ PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_ASP_ABP940,
+	PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+	{ PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_ASP_ABP940U,
+	PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+	{ PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_ASP_ABP940UW,
+	PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+	{ PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_38C0800_REV1,
+	PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+	{ PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_38C1600_REV1,
+	PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+	{ }
+};
+MODULE_DEVICE_TABLE(pci, advansys_pci_tbl);
+

linux-2.6.13-audit-git.patch:
 MAINTAINERS                     |    5 
 arch/ppc64/kernel/asm-offsets.c |    1 
 arch/ppc64/kernel/entry.S       |   16 +
 fs/namei.c                      |    2 
 include/linux/audit.h           |   36 ++--
 kernel/audit.c                  |  128 +++++++++------
 kernel/auditsc.c                |  329 +++++++++++++++++++++++++++-------------
 security/selinux/avc.c          |    4 
 security/selinux/hooks.c        |    2 
 security/selinux/ss/services.c  |    4 
 10 files changed, 355 insertions(+), 172 deletions(-)

--- NEW FILE linux-2.6.13-audit-git.patch ---
diff --git a/MAINTAINERS b/MAINTAINERS
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -371,7 +371,10 @@ W:	http://atmelwlandriver.sourceforge.ne
 S:	Maintained
 
 AUDIT SUBSYSTEM
-L:	linux-audit at redhat.com (subscribers-only)
+P:	David Woodhouse
+M:	dwmw2 at infradead.org
+L:	linux-audit at redhat.com
+W:	http://people.redhat.com/sgrubb/audit/
 S:	Maintained
 
 AX.25 NETWORK LAYER
diff --git a/arch/ppc64/kernel/asm-offsets.c b/arch/ppc64/kernel/asm-offsets.c
--- a/arch/ppc64/kernel/asm-offsets.c
+++ b/arch/ppc64/kernel/asm-offsets.c
@@ -68,6 +68,7 @@ int main(void)
 	DEFINE(THREAD_USED_VR, offsetof(struct thread_struct, used_vr));
 #endif /* CONFIG_ALTIVEC */
 	DEFINE(MM, offsetof(struct task_struct, mm));
+	DEFINE(AUDITCONTEXT, offsetof(struct task_struct, audit_context));
 
 	DEFINE(DCACHEL1LINESIZE, offsetof(struct ppc64_caches, dline_size));
 	DEFINE(DCACHEL1LOGLINESIZE, offsetof(struct ppc64_caches, log_dline_size));
diff --git a/arch/ppc64/kernel/entry.S b/arch/ppc64/kernel/entry.S
--- a/arch/ppc64/kernel/entry.S
+++ b/arch/ppc64/kernel/entry.S
@@ -276,12 +276,20 @@ _GLOBAL(ppc64_rt_sigsuspend)
 _GLOBAL(ppc32_rt_sigsuspend)
 	bl	.save_nvgprs
 	bl	.sys32_rt_sigsuspend
-	/* If sigsuspend() returns zero, we are going into a signal handler */
 70:	cmpdi	0,r3,0
-	beq	.ret_from_except
-	/* If it returned -EINTR, we need to return via syscall_exit to set
+	/* If it returned an error, we need to return via syscall_exit to set
 	   the SO bit in cr0 and potentially stop for ptrace. */
-	b	syscall_exit
+	bne	syscall_exit
+	/* If sigsuspend() returns zero, we are going into a signal handler. We
+	   may need to call audit_syscall_exit() to mark the exit from sigsuspend() */
+	ld	r3,PACACURRENT(r13)
+	ld	r4,AUDITCONTEXT(r3)
+	cmpdi	0,r4,0
+	beq	.ret_from_except	/* No audit_context: Leave immediately. */
+	li	r4, 2			/* AUDITSC_FAILURE */
+	li	r5,-4			/* It's always -EINTR */
+	bl	.audit_syscall_exit
+	b	.ret_from_except
 
 _GLOBAL(ppc_fork)
 	bl	.save_nvgprs
diff --git a/fs/namei.c b/fs/namei.c
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1046,7 +1046,7 @@ int fastcall path_lookup(const char *nam
 out:
 	if (unlikely(current->audit_context
 		     && nd && nd->dentry && nd->dentry->d_inode))
-		audit_inode(name, nd->dentry->d_inode);
+		audit_inode(name, nd->dentry->d_inode, flags);
 	return retval;
 }
 
diff --git a/include/linux/audit.h b/include/linux/audit.h
--- a/include/linux/audit.h
+++ b/include/linux/audit.h
@@ -51,7 +51,8 @@
 #define AUDIT_WATCH_LIST	1009	/* List all file/dir watches */
 #define AUDIT_SIGNAL_INFO	1010	/* Get info about sender of signal to auditd */
 
-#define AUDIT_FIRST_USER_MSG	1100	/* Userspace messages uninteresting to kernel */
+#define AUDIT_FIRST_USER_MSG	1100	/* Userspace messages mostly uninteresting to kernel */
+#define AUDIT_USER_AVC		1107	/* We filter this differently */
 #define AUDIT_LAST_USER_MSG	1199
  
 #define AUDIT_DAEMON_START      1200    /* Daemon startup record */
@@ -75,10 +76,15 @@
 #define AUDIT_KERNEL		2000	/* Asynchronous audit record. NOT A REQUEST. */
 
 /* Rule flags */
-#define AUDIT_PER_TASK 0x01	/* Apply rule at task creation (not syscall) */
-#define AUDIT_AT_ENTRY 0x02	/* Apply rule at syscall entry */
-#define AUDIT_AT_EXIT  0x04	/* Apply rule at syscall exit */
-#define AUDIT_PREPEND  0x10	/* Prepend to front of list */
+#define AUDIT_FILTER_USER	0x00	/* Apply rule to user-generated messages */
+#define AUDIT_FILTER_TASK	0x01	/* Apply rule at task creation (not syscall) */
+#define AUDIT_FILTER_ENTRY	0x02	/* Apply rule at syscall entry */
+#define AUDIT_FILTER_WATCH	0x03	/* Apply rule to file system watches */
+#define AUDIT_FILTER_EXIT	0x04	/* Apply rule at syscall exit */
+
+#define AUDIT_NR_FILTERS	5
+
+#define AUDIT_FILTER_PREPEND	0x10	/* Prepend to front of list */
 
 /* Rule actions */
 #define AUDIT_NEVER    0	/* Do not build context if rule matches */
@@ -199,6 +205,7 @@ struct audit_sig_info {
 struct audit_buffer;
 struct audit_context;
 struct inode;
+struct netlink_skb_parms;
 
 #define AUDITSC_INVALID 0
 #define AUDITSC_SUCCESS 1
@@ -215,7 +222,7 @@ extern void audit_syscall_entry(struct t
 extern void audit_syscall_exit(struct task_struct *task, int failed, long return_code);
 extern void audit_getname(const char *name);
 extern void audit_putname(const char *name);
-extern void audit_inode(const char *name, const struct inode *inode);
+extern void audit_inode(const char *name, const struct inode *inode, unsigned flags);
 
 				/* Private API (for audit.c only) */
 extern int  audit_receive_filter(int type, int pid, int uid, int seq,
@@ -230,6 +237,7 @@ extern int audit_socketcall(int nargs, u
 extern int audit_sockaddr(int len, void *addr);
 extern int audit_avc_path(struct dentry *dentry, struct vfsmount *mnt);
 extern void audit_signal_info(int sig, struct task_struct *t);
+extern int audit_filter_user(struct netlink_skb_parms *cb, int type);
 #else
 #define audit_alloc(t) ({ 0; })
 #define audit_free(t) do { ; } while (0)
@@ -237,7 +245,7 @@ extern void audit_signal_info(int sig, s
 #define audit_syscall_exit(t,f,r) do { ; } while (0)
 #define audit_getname(n) do { ; } while (0)
 #define audit_putname(n) do { ; } while (0)
-#define audit_inode(n,i) do { ; } while (0)
+#define audit_inode(n,i,f) do { ; } while (0)
 #define audit_receive_filter(t,p,u,s,d,l) ({ -EOPNOTSUPP; })
 #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0)
 #define audit_get_loginuid(c) ({ -1; })
@@ -246,16 +254,17 @@ extern void audit_signal_info(int sig, s
 #define audit_sockaddr(len, addr) ({ 0; })
 #define audit_avc_path(dentry, mnt) ({ 0; })
 #define audit_signal_info(s,t) do { ; } while (0)
+#define audit_filter_user(cb,t) ({ 1; })
 #endif
 
 #ifdef CONFIG_AUDIT
 /* These are defined in audit.c */
 				/* Public API */
-extern void		    audit_log(struct audit_context *ctx, int type,
-				      const char *fmt, ...)
-			    __attribute__((format(printf,3,4)));
+extern void		    audit_log(struct audit_context *ctx, int gfp_mask,
+				      int type, const char *fmt, ...)
+				      __attribute__((format(printf,4,5)));
 
-extern struct audit_buffer *audit_log_start(struct audit_context *ctx,int type);
+extern struct audit_buffer *audit_log_start(struct audit_context *ctx, int gfp_mask, int type);
 extern void		    audit_log_format(struct audit_buffer *ab,
 					     const char *fmt, ...)
 			    __attribute__((format(printf,2,3)));
@@ -274,9 +283,10 @@ extern void		    audit_send_reply(int pi
 					     int done, int multi,
 					     void *payload, int size);
 extern void		    audit_log_lost(const char *message);
+extern struct semaphore audit_netlink_sem;
 #else
-#define audit_log(c,t,f,...) do { ; } while (0)
-#define audit_log_start(c,t) ({ NULL; })
+#define audit_log(c,g,t,f,...) do { ; } while (0)
+#define audit_log_start(c,g,t) ({ NULL; })
 #define audit_log_vformat(b,f,a) do { ; } while (0)
 #define audit_log_format(b,f,...) do { ; } while (0)
 #define audit_log_end(b) do { ; } while (0)
diff --git a/kernel/audit.c b/kernel/audit.c
--- a/kernel/audit.c
+++ b/kernel/audit.c
@@ -79,6 +79,8 @@ static int	audit_rate_limit;
 
 /* Number of outstanding audit_buffers allowed. */
 static int	audit_backlog_limit = 64;
+static int	audit_backlog_wait_time = 60 * HZ;
+static int	audit_backlog_wait_overflow = 0;
 
 /* The identity of the user shutting down the audit system. */
 uid_t		audit_sig_uid = -1;
@@ -106,18 +108,12 @@ static LIST_HEAD(audit_freelist);
 static struct sk_buff_head audit_skb_queue;
 static struct task_struct *kauditd_task;
 static DECLARE_WAIT_QUEUE_HEAD(kauditd_wait);
-
-/* There are three lists of rules -- one to search at task creation
- * time, one to search at syscall entry time, and another to search at
- * syscall exit time. */
-static LIST_HEAD(audit_tsklist);
-static LIST_HEAD(audit_entlist);
-static LIST_HEAD(audit_extlist);
+static DECLARE_WAIT_QUEUE_HEAD(audit_backlog_wait);
 
 /* The netlink socket is only to be read by 1 CPU, which lets us assume
  * that list additions and deletions never happen simultaneously in
  * auditsc.c */
-static DECLARE_MUTEX(audit_netlink_sem);
+DECLARE_MUTEX(audit_netlink_sem);
 
 /* AUDIT_BUFSIZ is the size of the temporary buffer used for formatting
  * audit records.  Since printk uses a 1024 byte buffer, this buffer
@@ -137,6 +133,7 @@ struct audit_buffer {
 	struct list_head     list;
 	struct sk_buff       *skb;	/* formatted skb ready to send */
 	struct audit_context *ctx;	/* NULL or associated context */
+	int		     gfp_mask;
 };
 
 static void audit_set_pid(struct audit_buffer *ab, pid_t pid)
@@ -145,11 +142,6 @@ static void audit_set_pid(struct audit_b
 	nlh->nlmsg_pid = pid;
 }
 
-struct audit_entry {
-	struct list_head  list;
-	struct audit_rule rule;
-};
-
 static void audit_panic(const char *message)
 {
 	switch (audit_failure)
@@ -233,7 +225,7 @@ static int audit_set_rate_limit(int limi
 {
 	int old		 = audit_rate_limit;
 	audit_rate_limit = limit;
-	audit_log(NULL, AUDIT_CONFIG_CHANGE, 
+	audit_log(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE, 
 			"audit_rate_limit=%d old=%d by auid=%u",
 			audit_rate_limit, old, loginuid);
 	return old;
@@ -243,7 +235,7 @@ static int audit_set_backlog_limit(int l
 {
 	int old		 = audit_backlog_limit;
 	audit_backlog_limit = limit;
-	audit_log(NULL, AUDIT_CONFIG_CHANGE,
+	audit_log(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE,
 			"audit_backlog_limit=%d old=%d by auid=%u",
 			audit_backlog_limit, old, loginuid);
 	return old;
@@ -255,7 +247,7 @@ static int audit_set_enabled(int state, 
 	if (state != 0 && state != 1)
 		return -EINVAL;
 	audit_enabled = state;
-	audit_log(NULL, AUDIT_CONFIG_CHANGE,
+	audit_log(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE,
 			"audit_enabled=%d old=%d by auid=%u",
 			audit_enabled, old, loginuid);
 	return old;
@@ -269,7 +261,7 @@ static int audit_set_failure(int state, 
 	    && state != AUDIT_FAIL_PANIC)
 		return -EINVAL;
 	audit_failure = state;
-	audit_log(NULL, AUDIT_CONFIG_CHANGE,
+	audit_log(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE,
 			"audit_failure=%d old=%d by auid=%u",
 			audit_failure, old, loginuid);
 	return old;
@@ -281,6 +273,7 @@ int kauditd_thread(void *dummy)
 
 	while (1) {
 		skb = skb_dequeue(&audit_skb_queue);
+		wake_up(&audit_backlog_wait);
 		if (skb) {
 			if (audit_pid) {
 				int err = netlink_unicast(audit_sock, skb, audit_pid, 0);
@@ -290,7 +283,7 @@ int kauditd_thread(void *dummy)
 					audit_pid = 0;
 				}
 			} else {
-				printk(KERN_ERR "%s\n", skb->data + NLMSG_SPACE(0));
+				printk(KERN_NOTICE "%s\n", skb->data + NLMSG_SPACE(0));
 				kfree_skb(skb);
 			}
 		} else {
@@ -423,7 +416,7 @@ static int audit_receive_msg(struct sk_b
 		if (status_get->mask & AUDIT_STATUS_PID) {
 			int old   = audit_pid;
 			audit_pid = status_get->pid;
-			audit_log(NULL, AUDIT_CONFIG_CHANGE,
+			audit_log(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE,
 				"audit_pid=%d old=%d by auid=%u",
 				  audit_pid, old, loginuid);
 		}
@@ -435,15 +428,21 @@ static int audit_receive_msg(struct sk_b
 		break;
 	case AUDIT_USER:
 	case AUDIT_FIRST_USER_MSG...AUDIT_LAST_USER_MSG:
-		ab = audit_log_start(NULL, msg_type);
-		if (!ab)
-			break;	/* audit_panic has been called */
-		audit_log_format(ab,
-				 "user pid=%d uid=%u auid=%u"
-				 " msg='%.1024s'",
-				 pid, uid, loginuid, (char *)data);
-		audit_set_pid(ab, pid);
-		audit_log_end(ab);
+		if (!audit_enabled && msg_type != AUDIT_USER_AVC)
+			return 0;
+
+		err = audit_filter_user(&NETLINK_CB(skb), msg_type);
+		if (err == 1) {
+			err = 0;
+			ab = audit_log_start(NULL, GFP_KERNEL, msg_type);
+			if (ab) {
+				audit_log_format(ab,
+						 "user pid=%d uid=%u auid=%u msg='%.1024s'",
+						 pid, uid, loginuid, (char *)data);
+				audit_set_pid(ab, pid);
+				audit_log_end(ab);
+			}
+		}
 		break;
 	case AUDIT_ADD:
 	case AUDIT_DEL:
@@ -522,7 +521,7 @@ static int __init audit_init(void)
 	skb_queue_head_init(&audit_skb_queue);
 	audit_initialized = 1;
 	audit_enabled = audit_default;
-	audit_log(NULL, AUDIT_KERNEL, "initialized");
+	audit_log(NULL, GFP_KERNEL, AUDIT_KERNEL, "initialized");
 	return 0;
 }
 __initcall(audit_init);
@@ -560,7 +559,7 @@ static void audit_buffer_free(struct aud
 }
 
 static struct audit_buffer * audit_buffer_alloc(struct audit_context *ctx,
-						int gfp_mask, int type)
+						unsigned int __nocast gfp_mask, int type)
 {
 	unsigned long flags;
 	struct audit_buffer *ab = NULL;
@@ -586,6 +585,7 @@ static struct audit_buffer * audit_buffe
 		goto err;
 
 	ab->ctx = ctx;
+	ab->gfp_mask = gfp_mask;
 	nlh = (struct nlmsghdr *)skb_put(ab->skb, NLMSG_SPACE(0));
 	nlh->nlmsg_type = type;
 	nlh->nlmsg_flags = 0;
@@ -605,26 +605,27 @@ err:
  * (timestamp,serial) tuple is unique for each syscall and is live from
  * syscall entry to syscall exit.
  *
- * Atomic values are only guaranteed to be 24-bit, so we count down.
- *
  * NOTE: Another possibility is to store the formatted records off the
  * audit context (for those records that have a context), and emit them
  * all at syscall exit.  However, this could delay the reporting of
  * significant errors until syscall exit (or never, if the system
  * halts). */
+
 unsigned int audit_serial(void)
 {
-	static atomic_t serial = ATOMIC_INIT(0xffffff);
-	unsigned int a, b;
+	static spinlock_t serial_lock = SPIN_LOCK_UNLOCKED;
+	static unsigned int serial = 0;
+
+	unsigned long flags;
+	unsigned int ret;
 
+	spin_lock_irqsave(&serial_lock, flags);
 	do {
-		a = atomic_read(&serial);
-		if (atomic_dec_and_test(&serial))
-			atomic_set(&serial, 0xffffff);
-		b = atomic_read(&serial);
-	} while (b != a - 1);
+		ret = ++serial;
+	} while (unlikely(!ret));
+	spin_unlock_irqrestore(&serial_lock, flags);
 
-	return 0xffffff - b;
+	return ret;
 }
 
 static inline void audit_get_stamp(struct audit_context *ctx, 
@@ -644,17 +645,43 @@ static inline void audit_get_stamp(struc
  * syscall, then the syscall is marked as auditable and an audit record
  * will be written at syscall exit.  If there is no associated task, tsk
  * should be NULL. */
-struct audit_buffer *audit_log_start(struct audit_context *ctx, int type)
+
+struct audit_buffer *audit_log_start(struct audit_context *ctx, int gfp_mask,
+				     int type)
 {
 	struct audit_buffer	*ab	= NULL;
 	struct timespec		t;
 	unsigned int		serial;
+	int reserve;
+	unsigned long timeout_start = jiffies;
 
 	if (!audit_initialized)
 		return NULL;
 
-	if (audit_backlog_limit
-	    && skb_queue_len(&audit_skb_queue) > audit_backlog_limit) {
+	if (gfp_mask & __GFP_WAIT)
+		reserve = 0;
+	else
+		reserve = 5; /* Allow atomic callers to go up to five 
+				entries over the normal backlog limit */
+
+	while (audit_backlog_limit
+	       && skb_queue_len(&audit_skb_queue) > audit_backlog_limit + reserve) {
+		if (gfp_mask & __GFP_WAIT && audit_backlog_wait_time
+		    && time_before(jiffies, timeout_start + audit_backlog_wait_time)) {
+
+			/* Wait for auditd to drain the queue a little */
+			DECLARE_WAITQUEUE(wait, current);
+			set_current_state(TASK_INTERRUPTIBLE);
+			add_wait_queue(&audit_backlog_wait, &wait);
+
+			if (audit_backlog_limit &&
+			    skb_queue_len(&audit_skb_queue) > audit_backlog_limit)
+				schedule_timeout(timeout_start + audit_backlog_wait_time - jiffies);
+
+			__set_current_state(TASK_RUNNING);
+			remove_wait_queue(&audit_backlog_wait, &wait);
+			continue;
+		}
 		if (audit_rate_check())
 			printk(KERN_WARNING
 			       "audit: audit_backlog=%d > "
@@ -662,10 +689,12 @@ struct audit_buffer *audit_log_start(str
 			       skb_queue_len(&audit_skb_queue),
 			       audit_backlog_limit);
 		audit_log_lost("backlog limit exceeded");
+		audit_backlog_wait_time = audit_backlog_wait_overflow;
+		wake_up(&audit_backlog_wait);
 		return NULL;
 	}
 
-	ab = audit_buffer_alloc(ctx, GFP_ATOMIC, type);
+	ab = audit_buffer_alloc(ctx, gfp_mask, type);
 	if (!ab) {
 		audit_log_lost("out of memory in audit_log_start");
 		return NULL;
@@ -689,7 +718,7 @@ static inline int audit_expand(struct au
 {
 	struct sk_buff *skb = ab->skb;
 	int ret = pskb_expand_head(skb, skb_headroom(skb), extra,
-				   GFP_ATOMIC);
+				   ab->gfp_mask);
 	if (ret < 0) {
 		audit_log_lost("out of memory in audit_expand");
 		return 0;
@@ -808,7 +837,7 @@ void audit_log_d_path(struct audit_buffe
 		audit_log_format(ab, " %s", prefix);
 
 	/* We will allow 11 spaces for ' (deleted)' to be appended */
-	path = kmalloc(PATH_MAX+11, GFP_KERNEL);
+	path = kmalloc(PATH_MAX+11, ab->gfp_mask);
 	if (!path) {
 		audit_log_format(ab, "<no memory>");
 		return;
@@ -840,7 +869,7 @@ void audit_log_end(struct audit_buffer *
 			ab->skb = NULL;
 			wake_up_interruptible(&kauditd_wait);
 		} else {
-			printk("%s\n", ab->skb->data + NLMSG_SPACE(0));
+			printk(KERN_NOTICE "%s\n", ab->skb->data + NLMSG_SPACE(0));
 		}
 	}
 	audit_buffer_free(ab);
@@ -849,12 +878,13 @@ void audit_log_end(struct audit_buffer *
 /* Log an audit record.  This is a convenience function that calls
  * audit_log_start, audit_log_vformat, and audit_log_end.  It may be
  * called in any context. */
-void audit_log(struct audit_context *ctx, int type, const char *fmt, ...)
+void audit_log(struct audit_context *ctx, int gfp_mask, int type, 
+	       const char *fmt, ...)
 {
 	struct audit_buffer *ab;
 	va_list args;
 
-	ab = audit_log_start(ctx, type);
+	ab = audit_log_start(ctx, gfp_mask, type);
 	if (ab) {
 		va_start(args, fmt);
 		audit_log_vformat(ab, fmt, args);
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -39,6 +39,9 @@
 #include <linux/audit.h>
 #include <linux/personality.h>
 #include <linux/time.h>
+#include <linux/kthread.h>
+#include <linux/netlink.h>
+#include <linux/compiler.h>
 #include <asm/unistd.h>
 
 /* 0 = no checking
@@ -95,6 +98,7 @@ struct audit_names {
 	uid_t		uid;
 	gid_t		gid;
 	dev_t		rdev;
+	unsigned	flags;
 };
 
 struct audit_aux_data {
@@ -167,9 +171,16 @@ struct audit_context {
 /* There are three lists of rules -- one to search at task creation
  * time, one to search at syscall entry time, and another to search at
  * syscall exit time. */
-static LIST_HEAD(audit_tsklist);
-static LIST_HEAD(audit_entlist);
-static LIST_HEAD(audit_extlist);
+static struct list_head audit_filter_list[AUDIT_NR_FILTERS] = {
+	LIST_HEAD_INIT(audit_filter_list[0]),
+	LIST_HEAD_INIT(audit_filter_list[1]),
+	LIST_HEAD_INIT(audit_filter_list[2]),
+	LIST_HEAD_INIT(audit_filter_list[3]),
+	LIST_HEAD_INIT(audit_filter_list[4]),
+#if AUDIT_NR_FILTERS != 5
+#error Fix audit_filter_list initialiser
+#endif
+};
 
 struct audit_entry {
 	struct list_head  list;
@@ -179,9 +190,36 @@ struct audit_entry {
 
 extern int audit_pid;
 
+/* Copy rule from user-space to kernel-space.  Called from 
+ * audit_add_rule during AUDIT_ADD. */
+static inline int audit_copy_rule(struct audit_rule *d, struct audit_rule *s)
+{
+	int i;
+
+	if (s->action != AUDIT_NEVER
+	    && s->action != AUDIT_POSSIBLE
+	    && s->action != AUDIT_ALWAYS)
+		return -1;
+	if (s->field_count < 0 || s->field_count > AUDIT_MAX_FIELDS)
+		return -1;
+	if ((s->flags & ~AUDIT_FILTER_PREPEND) >= AUDIT_NR_FILTERS)
+		return -1;
+
+	d->flags	= s->flags;
+	d->action	= s->action;
+	d->field_count	= s->field_count;
+	for (i = 0; i < d->field_count; i++) {
+		d->fields[i] = s->fields[i];
+		d->values[i] = s->values[i];
+	}
+	for (i = 0; i < AUDIT_BITMASK_SIZE; i++) d->mask[i] = s->mask[i];
+	return 0;
+}
+
 /* Check to see if two rules are identical.  It is called from
+ * audit_add_rule during AUDIT_ADD and 
  * audit_del_rule during AUDIT_DEL. */
-static int audit_compare_rule(struct audit_rule *a, struct audit_rule *b)
+static inline int audit_compare_rule(struct audit_rule *a, struct audit_rule *b)
 {
 	int i;
 
@@ -210,19 +248,37 @@ static int audit_compare_rule(struct aud
 /* Note that audit_add_rule and audit_del_rule are called via
  * audit_receive() in audit.c, and are protected by
  * audit_netlink_sem. */
-static inline int audit_add_rule(struct audit_entry *entry,
-				 struct list_head *list)
+static inline int audit_add_rule(struct audit_rule *rule,
+				  struct list_head *list)
 {
-	if (entry->rule.flags & AUDIT_PREPEND) {
-		entry->rule.flags &= ~AUDIT_PREPEND;
+	struct audit_entry  *entry;
+
+	/* Do not use the _rcu iterator here, since this is the only
+	 * addition routine. */
+	list_for_each_entry(entry, list, list) {
+		if (!audit_compare_rule(rule, &entry->rule)) {
+			return -EEXIST;
+		}
+	}
+
+	if (!(entry = kmalloc(sizeof(*entry), GFP_KERNEL)))
+		return -ENOMEM;
+	if (audit_copy_rule(&entry->rule, rule)) {
+		kfree(entry);
+		return -EINVAL;
+	}
+
+	if (entry->rule.flags & AUDIT_FILTER_PREPEND) {
+		entry->rule.flags &= ~AUDIT_FILTER_PREPEND;
 		list_add_rcu(&entry->list, list);
 	} else {
 		list_add_tail_rcu(&entry->list, list);
 	}
+
 	return 0;
 }
 
-static void audit_free_rule(struct rcu_head *head)
+static inline void audit_free_rule(struct rcu_head *head)
 {
 	struct audit_entry *e = container_of(head, struct audit_entry, rcu);
 	kfree(e);
@@ -245,82 +301,82 @@ static inline int audit_del_rule(struct 
 			return 0;
 		}
 	}
-	return -EFAULT;		/* No matching rule */
+	return -ENOENT;		/* No matching rule */
 }
 
-/* Copy rule from user-space to kernel-space.  Called during
- * AUDIT_ADD. */
-static int audit_copy_rule(struct audit_rule *d, struct audit_rule *s)
+static int audit_list_rules(void *_dest)
 {
+	int pid, seq;
+	int *dest = _dest;
+	struct audit_entry *entry;
 	int i;
 
-	if (s->action != AUDIT_NEVER
-	    && s->action != AUDIT_POSSIBLE
-	    && s->action != AUDIT_ALWAYS)
-		return -1;
-	if (s->field_count < 0 || s->field_count > AUDIT_MAX_FIELDS)
-		return -1;
-
-	d->flags	= s->flags;
-	d->action	= s->action;
-	d->field_count	= s->field_count;
-	for (i = 0; i < d->field_count; i++) {
-		d->fields[i] = s->fields[i];
-		d->values[i] = s->values[i];
+	pid = dest[0];
+	seq = dest[1];
+	kfree(dest);
+
+	down(&audit_netlink_sem);
+
+	/* The *_rcu iterators not needed here because we are
+	   always called with audit_netlink_sem held. */
+	for (i=0; i<AUDIT_NR_FILTERS; i++) {
+		list_for_each_entry(entry, &audit_filter_list[i], list)
+			audit_send_reply(pid, seq, AUDIT_LIST, 0, 1,
+					 &entry->rule, sizeof(entry->rule));
 	}
-	for (i = 0; i < AUDIT_BITMASK_SIZE; i++) d->mask[i] = s->mask[i];
+	audit_send_reply(pid, seq, AUDIT_LIST, 1, 1, NULL, 0);
+	
+	up(&audit_netlink_sem);
 	return 0;
 }
 
 int audit_receive_filter(int type, int pid, int uid, int seq, void *data,
 							uid_t loginuid)
 {
-	u32		   flags;
-	struct audit_entry *entry;
+	struct task_struct *tsk;
+	int *dest;
 	int		   err = 0;
+	unsigned listnr;
 
 	switch (type) {
 	case AUDIT_LIST:
-		/* The *_rcu iterators not needed here because we are
-		   always called with audit_netlink_sem held. */
-		list_for_each_entry(entry, &audit_tsklist, list)
-			audit_send_reply(pid, seq, AUDIT_LIST, 0, 1,
-					 &entry->rule, sizeof(entry->rule));
-		list_for_each_entry(entry, &audit_entlist, list)
-			audit_send_reply(pid, seq, AUDIT_LIST, 0, 1,
-					 &entry->rule, sizeof(entry->rule));
-		list_for_each_entry(entry, &audit_extlist, list)
-			audit_send_reply(pid, seq, AUDIT_LIST, 0, 1,
-					 &entry->rule, sizeof(entry->rule));
-		audit_send_reply(pid, seq, AUDIT_LIST, 1, 1, NULL, 0);
+		/* We can't just spew out the rules here because we might fill
+		 * the available socket buffer space and deadlock waiting for
+		 * auditctl to read from it... which isn't ever going to
+		 * happen if we're actually running in the context of auditctl
+		 * trying to _send_ the stuff */
+		 
+		dest = kmalloc(2 * sizeof(int), GFP_KERNEL);
+		if (!dest)
+			return -ENOMEM;
+		dest[0] = pid;
+		dest[1] = seq;
+
+		tsk = kthread_run(audit_list_rules, dest, "audit_list_rules");
+		if (IS_ERR(tsk)) {
+			kfree(dest);
+			err = PTR_ERR(tsk);
+		}
 		break;
 	case AUDIT_ADD:
-		if (!(entry = kmalloc(sizeof(*entry), GFP_KERNEL)))
-			return -ENOMEM;
-		if (audit_copy_rule(&entry->rule, data)) {
-			kfree(entry);
+		listnr =((struct audit_rule *)data)->flags & ~AUDIT_FILTER_PREPEND;
+		if (listnr >= AUDIT_NR_FILTERS)
 			return -EINVAL;
-		}
-		flags = entry->rule.flags;
-		if (!err && (flags & AUDIT_PER_TASK))
-			err = audit_add_rule(entry, &audit_tsklist);
-		if (!err && (flags & AUDIT_AT_ENTRY))
-			err = audit_add_rule(entry, &audit_entlist);
-		if (!err && (flags & AUDIT_AT_EXIT))
-			err = audit_add_rule(entry, &audit_extlist);
-		audit_log(NULL, AUDIT_CONFIG_CHANGE, 
-				"auid=%u added an audit rule\n", loginuid);
+
+		err = audit_add_rule(data, &audit_filter_list[listnr]);
+		if (!err)
+			audit_log(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE,
+				  "auid=%u added an audit rule\n", loginuid);
 		break;
 	case AUDIT_DEL:
-		flags =((struct audit_rule *)data)->flags;
-		if (!err && (flags & AUDIT_PER_TASK))
-			err = audit_del_rule(data, &audit_tsklist);
-		if (!err && (flags & AUDIT_AT_ENTRY))
-			err = audit_del_rule(data, &audit_entlist);
-		if (!err && (flags & AUDIT_AT_EXIT))
-			err = audit_del_rule(data, &audit_extlist);
-		audit_log(NULL, AUDIT_CONFIG_CHANGE,
-				"auid=%u removed an audit rule\n", loginuid);
+		listnr =((struct audit_rule *)data)->flags & ~AUDIT_FILTER_PREPEND;
+		if (listnr >= AUDIT_NR_FILTERS)
+			return -EINVAL;
+
+		err = audit_del_rule(data, &audit_filter_list[listnr]);
+		if (!err)
+			audit_log(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE,
+				  "auid=%u removed an audit rule\n", loginuid);
 		break;
 	default:
 		return -EINVAL;
@@ -384,8 +440,12 @@ static int audit_filter_rules(struct tas
 				result = (ctx->return_code == value);
 			break;
 		case AUDIT_SUCCESS:
-			if (ctx && ctx->return_valid)
-				result = (ctx->return_valid == AUDITSC_SUCCESS);
+			if (ctx && ctx->return_valid) {
+				if (value)
+					result = (ctx->return_valid == AUDITSC_SUCCESS);
+				else
+					result = (ctx->return_valid == AUDITSC_FAILURE);
+			}
 			break;
 		case AUDIT_DEVMAJOR:
 			if (ctx) {
@@ -454,7 +514,7 @@ static enum audit_state audit_filter_tas
 	enum audit_state   state;
 
 	rcu_read_lock();
-	list_for_each_entry_rcu(e, &audit_tsklist, list) {
+	list_for_each_entry_rcu(e, &audit_filter_list[AUDIT_FILTER_TASK], list) {
 		if (audit_filter_rules(tsk, &e->rule, NULL, &state)) {
 			rcu_read_unlock();
 			return state;
@@ -474,20 +534,84 @@ static enum audit_state audit_filter_sys
 					     struct list_head *list)
 {
 	struct audit_entry *e;
+	enum audit_state state;
+
+	if (audit_pid && tsk->tgid == audit_pid)
+		return AUDIT_DISABLED;
+
+	rcu_read_lock();
+	if (!list_empty(list)) {
+		    int word = AUDIT_WORD(ctx->major);
+		    int bit  = AUDIT_BIT(ctx->major);
+
+		    list_for_each_entry_rcu(e, list, list) {
+			    if ((e->rule.mask[word] & bit) == bit
+				&& audit_filter_rules(tsk, &e->rule, ctx, &state)) {
+				    rcu_read_unlock();
+				    return state;
+			    }
+		    }
+	}
+	rcu_read_unlock();
+	return AUDIT_BUILD_CONTEXT;
+}
+
+static int audit_filter_user_rules(struct netlink_skb_parms *cb,
+			      struct audit_rule *rule,
+			      enum audit_state *state)
+{
+	int i;
+
+	for (i = 0; i < rule->field_count; i++) {
+		u32 field  = rule->fields[i] & ~AUDIT_NEGATE;
+		u32 value  = rule->values[i];
+		int result = 0;
+
+		switch (field) {
+		case AUDIT_PID:
+			result = (cb->creds.pid == value);
+			break;
+		case AUDIT_UID:
+			result = (cb->creds.uid == value);
+			break;
+		case AUDIT_GID:
+			result = (cb->creds.gid == value);
+			break;
+		case AUDIT_LOGINUID:
+			result = (cb->loginuid == value);
+			break;
+		}
+
+		if (rule->fields[i] & AUDIT_NEGATE)
+			result = !result;
+		if (!result)
+			return 0;
+	}
+	switch (rule->action) {
+	case AUDIT_NEVER:    *state = AUDIT_DISABLED;	    break;
+	case AUDIT_POSSIBLE: *state = AUDIT_BUILD_CONTEXT;  break;
+	case AUDIT_ALWAYS:   *state = AUDIT_RECORD_CONTEXT; break;
+	}
+	return 1;
+}
+
+int audit_filter_user(struct netlink_skb_parms *cb, int type)
+{
+	struct audit_entry *e;
 	enum audit_state   state;
-	int		   word = AUDIT_WORD(ctx->major);
-	int		   bit  = AUDIT_BIT(ctx->major);
+	int ret = 1;
 
 	rcu_read_lock();
-	list_for_each_entry_rcu(e, list, list) {
-		if ((e->rule.mask[word] & bit) == bit
- 		    && audit_filter_rules(tsk, &e->rule, ctx, &state)) {
-			rcu_read_unlock();
-			return state;
+	list_for_each_entry_rcu(e, &audit_filter_list[AUDIT_FILTER_USER], list) {
+		if (audit_filter_user_rules(cb, &e->rule, &state)) {
+			if (state == AUDIT_DISABLED)
+				ret = 0;
+			break;
 		}
 	}
 	rcu_read_unlock();
-	return AUDIT_BUILD_CONTEXT;
+
+	return ret; /* Audit by default */
 }
 
 /* This should be called with task_lock() held. */
@@ -504,7 +628,7 @@ static inline struct audit_context *audi
 
 	if (context->in_syscall && !context->auditable) {
 		enum audit_state state;
-		state = audit_filter_syscall(tsk, context, &audit_extlist);
+		state = audit_filter_syscall(tsk, context, &audit_filter_list[AUDIT_FILTER_EXIT]);
 		if (state == AUDIT_RECORD_CONTEXT)
 			context->auditable = 1;
 	}
@@ -679,13 +803,13 @@ static void audit_log_task_info(struct a
 	up_read(&mm->mmap_sem);
 }
 
-static void audit_log_exit(struct audit_context *context)
+static void audit_log_exit(struct audit_context *context, unsigned int gfp_mask)
 {
 	int i;
 	struct audit_buffer *ab;
 	struct audit_aux_data *aux;
 
-	ab = audit_log_start(context, AUDIT_SYSCALL);
+	ab = audit_log_start(context, gfp_mask, AUDIT_SYSCALL);
 	if (!ab)
 		return;		/* audit_panic has been called */
 	audit_log_format(ab, "arch=%x syscall=%d",
@@ -717,7 +841,7 @@ static void audit_log_exit(struct audit_
 
 	for (aux = context->aux; aux; aux = aux->next) {
 
-		ab = audit_log_start(context, aux->type);
+		ab = audit_log_start(context, GFP_KERNEL, aux->type);
 		if (!ab)
 			continue; /* audit_panic has been called */
 
@@ -754,14 +878,14 @@ static void audit_log_exit(struct audit_
 	}
 
 	if (context->pwd && context->pwdmnt) {
-		ab = audit_log_start(context, AUDIT_CWD);
+		ab = audit_log_start(context, GFP_KERNEL, AUDIT_CWD);
 		if (ab) {
 			audit_log_d_path(ab, "cwd=", context->pwd, context->pwdmnt);
 			audit_log_end(ab);
 		}
 	}
 	for (i = 0; i < context->name_count; i++) {
-		ab = audit_log_start(context, AUDIT_PATH);
+		ab = audit_log_start(context, GFP_KERNEL, AUDIT_PATH);
 		if (!ab)
 			continue; /* audit_panic has been called */
 
@@ -770,6 +894,8 @@ static void audit_log_exit(struct audit_
 			audit_log_format(ab, " name=");
 			audit_log_untrustedstring(ab, context->names[i].name);
 		}
+		audit_log_format(ab, " flags=%x\n", context->names[i].flags);
+			 
 		if (context->names[i].ino != (unsigned long)-1)
 			audit_log_format(ab, " inode=%lu dev=%02x:%02x mode=%#o"
 					     " ouid=%u ogid=%u rdev=%02x:%02x",
@@ -799,9 +925,11 @@ void audit_free(struct task_struct *tsk)
 		return;
 
 	/* Check for system calls that do not go through the exit
-	 * function (e.g., exit_group), then free context block. */
-	if (context->in_syscall && context->auditable && context->pid != audit_pid)
-		audit_log_exit(context);
+	 * function (e.g., exit_group), then free context block. 
+	 * We use GFP_ATOMIC here because we might be doing this 
+	 * in the context of the idle thread */
+	if (context->in_syscall && context->auditable)
+		audit_log_exit(context, GFP_ATOMIC);
 
 	audit_free_context(context);
 }
@@ -876,11 +1004,11 @@ void audit_syscall_entry(struct task_str
 
 	state = context->state;
 	if (state == AUDIT_SETUP_CONTEXT || state == AUDIT_BUILD_CONTEXT)
-		state = audit_filter_syscall(tsk, context, &audit_entlist);
+		state = audit_filter_syscall(tsk, context, &audit_filter_list[AUDIT_FILTER_ENTRY]);
 	if (likely(state == AUDIT_DISABLED))
 		return;
 
-	context->serial     = audit_serial();
+	context->serial     = 0;
 	context->ctime      = CURRENT_TIME;
 	context->in_syscall = 1;
 	context->auditable  = !!(state == AUDIT_RECORD_CONTEXT);
@@ -903,10 +1031,10 @@ void audit_syscall_exit(struct task_stru
 	/* Not having a context here is ok, since the parent may have
 	 * called __put_task_struct. */
 	if (likely(!context))
-		return;
+		goto out;
 
-	if (context->in_syscall && context->auditable && context->pid != audit_pid)
-		audit_log_exit(context);
+	if (context->in_syscall && context->auditable)
+		audit_log_exit(context, GFP_KERNEL);
 
 	context->in_syscall = 0;
 	context->auditable  = 0;
@@ -919,9 +1047,9 @@ void audit_syscall_exit(struct task_stru
 	} else {
 		audit_free_names(context);
 		audit_free_aux(context);
-		audit_zero_context(context, context->state);
 		tsk->audit_context = context;
 	}
+ out:
 	put_task_struct(tsk);
 }
 
@@ -996,7 +1124,7 @@ void audit_putname(const char *name)
 
 /* Store the inode and device from a lookup.  Called from
  * fs/namei.c:path_lookup(). */
-void audit_inode(const char *name, const struct inode *inode)
+void audit_inode(const char *name, const struct inode *inode, unsigned flags)
 {
 	int idx;
 	struct audit_context *context = current->audit_context;
@@ -1022,17 +1150,20 @@ void audit_inode(const char *name, const
 		++context->ino_count;
 #endif
 	}
-	context->names[idx].ino  = inode->i_ino;
-	context->names[idx].dev	 = inode->i_sb->s_dev;
-	context->names[idx].mode = inode->i_mode;
-	context->names[idx].uid  = inode->i_uid;
-	context->names[idx].gid  = inode->i_gid;
-	context->names[idx].rdev = inode->i_rdev;
+	context->names[idx].flags = flags;
+	context->names[idx].ino   = inode->i_ino;
+	context->names[idx].dev	  = inode->i_sb->s_dev;
+	context->names[idx].mode  = inode->i_mode;
+	context->names[idx].uid   = inode->i_uid;
+	context->names[idx].gid   = inode->i_gid;
+	context->names[idx].rdev  = inode->i_rdev;
 }
 
 void auditsc_get_stamp(struct audit_context *ctx,
 		       struct timespec *t, unsigned int *serial)
 {
+	if (!ctx->serial)
+		ctx->serial = audit_serial();
 	t->tv_sec  = ctx->ctime.tv_sec;
 	t->tv_nsec = ctx->ctime.tv_nsec;
 	*serial    = ctx->serial;
@@ -1044,7 +1175,7 @@ int audit_set_loginuid(struct task_struc
 	if (task->audit_context) {
 		struct audit_buffer *ab;
 
-		ab = audit_log_start(NULL, AUDIT_LOGIN);
+		ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_LOGIN);
 		if (ab) {
 			audit_log_format(ab, "login pid=%d uid=%u "
 				"old auid=%u new auid=%u",
@@ -1153,7 +1284,7 @@ void audit_signal_info(int sig, struct t
 	extern pid_t audit_sig_pid;
 	extern uid_t audit_sig_uid;
 
-	if (unlikely(audit_pid && t->pid == audit_pid)) {
+	if (unlikely(audit_pid && t->tgid == audit_pid)) {
 		if (sig == SIGTERM || sig == SIGHUP) {
 			struct audit_context *ctx = current->audit_context;
 			audit_sig_pid = current->pid;
diff --git a/security/selinux/avc.c b/security/selinux/avc.c
--- a/security/selinux/avc.c
+++ b/security/selinux/avc.c
@@ -242,7 +242,7 @@ void __init avc_init(void)
 	avc_node_cachep = kmem_cache_create("avc_node", sizeof(struct avc_node),
 					     0, SLAB_PANIC, NULL, NULL);
 
-	audit_log(current->audit_context, AUDIT_KERNEL, "AVC INITIALIZED\n");
+	audit_log(current->audit_context, GFP_KERNEL, AUDIT_KERNEL, "AVC INITIALIZED\n");
 }
 
 int avc_get_hash_stats(char *page)
@@ -550,7 +550,7 @@ void avc_audit(u32 ssid, u32 tsid,
 			return;
 	}
 
-	ab = audit_log_start(current->audit_context, AUDIT_AVC);
+	ab = audit_log_start(current->audit_context, GFP_ATOMIC, AUDIT_AVC);
 	if (!ab)
 		return;		/* audit_panic has been called */
 	audit_log_format(ab, "avc:  %s ", denied ? "denied" : "granted");
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -3442,7 +3442,7 @@ static int selinux_nlmsg_perm(struct soc
 	err = selinux_nlmsg_lookup(isec->sclass, nlh->nlmsg_type, &perm);
 	if (err) {
 		if (err == -EINVAL) {
-			audit_log(current->audit_context, AUDIT_SELINUX_ERR,
+			audit_log(current->audit_context, GFP_KERNEL, AUDIT_SELINUX_ERR,
 				  "SELinux:  unrecognized netlink message"
 				  " type=%hu for sclass=%hu\n",
 				  nlh->nlmsg_type, isec->sclass);
diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -365,7 +365,7 @@ static int security_validtrans_handle_fa
 		goto out;
 	if (context_struct_to_string(tcontext, &t, &tlen) < 0)
 		goto out;
-	audit_log(current->audit_context, AUDIT_SELINUX_ERR,
+	audit_log(current->audit_context, GFP_ATOMIC, AUDIT_SELINUX_ERR,
 	          "security_validate_transition:  denied for"
 	          " oldcontext=%s newcontext=%s taskcontext=%s tclass=%s",
 	          o, n, t, policydb.p_class_val_to_name[tclass-1]);
@@ -771,7 +771,7 @@ static int compute_sid_handle_invalid_co
 		goto out;
 	if (context_struct_to_string(newcontext, &n, &nlen) < 0)
 		goto out;
-	audit_log(current->audit_context, AUDIT_SELINUX_ERR,
+	audit_log(current->audit_context, GFP_ATOMIC, AUDIT_SELINUX_ERR,
 		  "security_compute_sid:  invalid context %s"
 		  " for scontext=%s"
 		  " tcontext=%s"


--- NEW FILE linux-2.6.13.tar.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info

iD8DBQBDElIWyGugalF9Dw4RApe/AJ418agzvXnbZyZg5s8LD/17PPEgbgCgi7H7
nS+lRuZ5mc6LfAV+jSqG3JI=
=ZRIY
-----END PGP SIGNATURE-----


--- NEW FILE patch-2.6.13.2.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info

iD8DBQBDLSfmyGugalF9Dw4RAsogAJwNc6z8dyNKx4PIZDHaukmB9RC2JgCeK1nq
T6Z6CTjg6O530O2pekdfbUg=
=4zNz
-----END PGP SIGNATURE-----


Index: .cvsignore
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/.cvsignore,v
retrieving revision 1.157
retrieving revision 1.158
diff -u -r1.157 -r1.158
--- .cvsignore	15 Aug 2005 05:56:56 -0000	1.157
+++ .cvsignore	29 Sep 2005 23:04:12 -0000	1.158
@@ -1,10 +1,7 @@
 linux-2.6.*.tar.bz2
-patch-2.6.*-bk*.bz2
 patch-2.6.*-rc*.bz2
-patch-2.6.*-final*.bz2
 kernel-2.6.*.config
 temp-*
-kernel-2.6.12
-linux-2.6.12.tar.bz2
-linux-2.6-acpi-20050729.patch.bz2
-patch-2.6.12.5.bz2
+kernel-2.6.13
+linux-2.6.13.tar.bz2
+patch-2.6.13.2.bz2






Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/kernel-2.6.spec,v
retrieving revision 1.1456
retrieving revision 1.1457
diff -u -r1.1456 -r1.1457
--- kernel-2.6.spec	22 Sep 2005 06:05:24 -0000	1.1456
+++ kernel-2.6.spec	29 Sep 2005 23:04:13 -0000	1.1457
@@ -3,14 +3,9 @@
 # What parts do we want to build?  We must build at least one kernel.
 # These are the kernels that are built IF the architecture allows it.
 
-%define FC3 0
-%define FC4 1
-
 %define buildup 1
 %define buildsmp 1
-%if %{FC4}
 %define includexen 1
-%endif
 %define builddoc 0
 
 # Versions of various parts
@@ -21,16 +16,11 @@
 # that the kernel isn't the stock distribution kernel, for example by
 # adding some text to the end of the version number.
 #
-%define sublevel 12
+%define sublevel 13
 %define kversion 2.6.%{sublevel}
 %define rpmversion 2.6.%{sublevel}
-%define rhbsys  %([ -r /etc/beehive-root -o -n "%{?__beehive_build}" ] && echo || echo .`whoami`)
-%if %{FC3}
-%define release %(R="$Revision$"; RR="${R##: }"; echo ${RR%%?})_FC3%{rhbsys}
-%endif
-%if %{FC4}
+%define rhbsys  %([ -r /etc/beehive-root -o -n "%{?__beehive_build}" ] && echo || echo .`whoami`@`hostname -s|sed s/-//`)
 %define release %(R="$Revision$"; RR="${R##: }"; echo ${RR%%?})_FC4%{rhbsys}
-%endif
 %define signmodules 0
 %define make_target bzImage
 
@@ -163,7 +153,7 @@
 License: GPLv2
 Version: %{rpmversion}
 Release: %{release}
-ExclusiveArch: noarch %{all_x86} x86_64 ppc ppc64 ppc64iseries sparc sparc64
+ExclusiveArch: noarch %{all_x86} x86_64 ppc ppc64 sparc sparc64
 ExclusiveOS: Linux
 Provides: kernel = %{version}
 Provides: kernel-drm = 4.3.0
@@ -213,10 +203,11 @@
 #
 # Patches 0 through 100 are meant for core subsystem upgrades
 #
-Patch1: patch-2.6.12.5.bz2
-Patch2: patch-2.6.12.6pre.patch
+Patch1: patch-2.6.13.2.bz2
 
 # Patches 100 through 500 are meant for architecture patches
+Patch100: linux-2.6-bzimage.patch
+Patch101: linux-2.6.13-audit-git.patch
 
 # 200 - 299   x86(-64)
 
@@ -227,18 +218,10 @@
 Patch300: linux-2.6.2-ppc64-build.patch
 Patch301: linux-2.6.12-serial-of.patch
 Patch302: linux-2.6.10-ppc-headerabuse.patch
-Patch303: linux-2.6-windtunnel-printk.patch
 
 # 400 - 499   ia64
-Patch400: linux-2.6.3-ia64-build.patch
-
 # 500 - 599   s390(x)
-Patch500: linux-2.6.1-s390-compile.patch
-Patch501: linux-2.6.9-s390-autoraid.patch
-Patch502: linux-2.6.9-s390-zfcp_port-fix.patch
-
 # 600 - 699   sparc(64)
-Patch600: linux-2.6.3-sparc-addbzimage.patch
 
 # 700 - 799 Xen
 Patch700: linux-2.6.12-xen.patch
@@ -246,11 +229,14 @@
 Patch702: linux-2.6.9-xen-compile.patch
 
 #
-# Patches 500 through 1000 are reserved for bugfixes to the core system
+# Patches 800 through 899 are reserved for bugfixes to the core system
 # and patches related to how RPMs are build
 #
-Patch800: linux-2.4.0-nonintconfig.patch
-Patch801: linux-2.6.0-must_check.patch
+Patch800: linux-2.6-build-nonintconfig.patch
+Patch801: linux-2.6-build-userspace-headers-warning.patch
+Patch802: linux-2.6-build-qconfig-qt-lib64.patch
+Patch803: linux-2.6-build-reference-discarded-debug_loc.patch
+Patch804: linux-2.6-build-reference-discarded-opd.patch
 
 Patch810: linux-2.6.11-execshield.patch
 Patch811: linux-2.6.10-x86_64-read-implies-exec32.patch
@@ -267,15 +253,26 @@
 Patch905: linux-2.6.7-modsign-include.patch
 
 # Tux http accelerator.
-Patch910: linux-2.6.11-tux.patch
+Patch910: linux-2.6-tux.patch
 
 #
 # Patches 1000 to 5000 are reserved for bugfixes to drivers and filesystems
 #
 Patch1000: linux-2.4.0-test11-vidfail.patch
-Patch1010: linux-2.6.10-periodic-slab-debug.patch
-Patch1011: linux-2.6.11-slab-backtrace.patch
-Patch1020: linux-2.6.4-stackusage.patch
+
+Patch1010: linux-2.6-debug-periodic-slab-check.patch
+Patch1011: linux-2.6-debug-slab-backtrace.patch
+Patch1012: linux-2.6-debug-list_head.patch
+Patch1013: linux-2.6-debug-taint-vm.patch
+Patch1014: linux-2.6-debug-taint-check.patch
+Patch1015: linux-2.6-debug-singlebiterror.patch
+Patch1016: linux-2.6-debug-detect-softlockups.patch
+Patch1017: linux-2.6-debug-spinlock-taint.patch
+Patch1018: linux-2.6-debug-spinlock-panic.patch
+Patch1019: linux-2.6-debug-Wundef.patch
+Patch1020: linux-2.6-debug-disable-builtins.patch
+Patch1021: linux-2.6-debug-sleep-in-irq-warning.patch
+Patch1022: linux-2.6-debug-reference-discarded-return-result.patch
 
 Patch1050: linux-2.6.11-devmem.patch
 Patch1051: linux-2.6.8-devmem-xen.patch
@@ -284,35 +281,28 @@
 Patch1061: linux-2.6.10-crash-xen.patch
 Patch1070: linux-2.6.0-sleepon.patch
 
+# Tweak some defaults.
+Patch1080: linux-2.6.11-default-elevator.patch
+Patch1081: linux-2.6-max-symlinks.patch
+Patch1082: linux-2.6-optimise-for-size.patch
+
 # SCSI bits.
 Patch1101: linux-2.6.9-scsi-advansys-enabler.patch
 Patch1102: linux-2.6.9-scsi-megaraid-legacy.patch
 Patch1103: linux-2.6.12-scsi-blacklist.patch
-Patch1104: linux-2.6.12-scsicam-geom-fix.patch
-Patch1105: linux-2.6-scsi-sym2-alloc_lcb_tags-atomic.patch
+Patch1104: linux-2.6.12-scsi-advansys-pcitable.patch
 Patch1106: linux-2.6-scsi-aic-dma39bit.patch
 
 # NFS bits.
 Patch1200: linux-2.6.9-NFSD-non-null-getxattr.patch
-Patch1201: linux-2.6.8-lockd-racewarn2.patch
-Patch1202: linux-2.6.9-lockd-block-nosleep.patch
-Patch1203: linux-2.6.9-lockd-reclaims.patch
-Patch1204: linux-2.6.12-nfsd-ctlbits.patch
-Patch1205: linux-2.6-nfs-enoent.patch
 
 # NIC driver updates
-Patch1300: linux-2.6.9-net-tr-irqlock-fix.patch
 Patch1301: linux-2.6.12-net-sundance-ip100A.patch
-Patch1302: linux-2.6.12-net-make-orinoco-suck-less.patch
-Patch1304: linux-2.6.12-net-atm-lanai-nodev-rmmod.patch
+Patch1302: linux-2.6.12-net-atm-lanai-nodev-rmmod.patch
+Patch1303: linux-2.6-net-acenic-use-after-free.patch
 
 # USB bits
-Patch1400: linux-2.6.12-usb-old_scheme_first.patch
-Patch1401: linux-2.6.12-rc3-ehci-misc-updates.patch
-Patch1402: linux-2.6.11-random-ehci-patch.patch
-Patch1403: linux-2.6-usbmon-deficiency-workaround.patch
-Patch1404: linux-2.6-usbhid-wireless-security-lock.patch
-Patch1405: linux-2.6-usb-transcend-nosense.patch
+Patch1400: linux-2.6-usbmon-deficiency-workaround.patch
 
 # Netdump and Diskdump bits.
 Patch1500: linux-2.6-crashdump-common.patch
@@ -323,59 +313,48 @@
 Patch1505: linux-2.6-dump_smp_call_function.patch
 
 # Misc bits.
-Patch1600: linux-2.6.11-i2c-config.patch
-Patch1610: linux-2.6.11-atkbd-dell-multimedia.patch
-Patch1620: linux-2.6.11-isdn-icn-nodev.patch
-Patch1640: linux-2.6.11-panic-stackdump.patch
-Patch1700: linux-2.6.10-revert-module-invalidparam.patch
-Patch1710: linux-2.6.12rc-ac-ide-fixes.patch
-Patch1711: linux-2.6-ide-tune-locking.patch
-Patch1712: linux-2.6-ide-scsi-check_condition.patch
-Patch1720: linux-2.6.9-module_version.patch
-Patch1730: linux-2.6.9-spinlock-debug-panic.patch
-Patch1740: linux-2.6.11-default-elevator.patch
-Patch1770: linux-2.6.11-taint-check.patch
-Patch1800: linux-2.6.11-parport-sysctl-perms.patch
-Patch1801: linux-2.6-procfs-i_nlink-miscalculate.patch
-Patch1810: linux-2.6.11-libata-promise-pata-on-sata.patch
-Patch1820: linux-2.6.12-input-kill-stupid-messages.patch
-Patch1830: linux-2.6.12-audit-merge.patch
-Patch1831: linux-2.6.13-rc3-audit-git.patch
-Patch1860: linux-2.6.11-serial-tickle-nmi.patch
-Patch1870: linux-2.6.12-missing-exports.patch
-Patch1880: linux-2.6.11-radeon-backlight.patch
-Patch1890: linux-2.6.12-firedire-init-breakage.patch 
-Patch1900: linux-2.6.12-pwc-warning.patch
-Patch1910: linux-2.6.12-ns558-nodev-rmmod.patch
-Patch1930: linux-2.6-appletouch-update.patch
-Patch1940: linux-2.6-powernow-k8-update.patch
-Patch1950: linux-2.6-selinux-addrlen-checks.patch
-Patch1960: linux-2.6-input-alps-typo.patch
-
-Patch2000: linux-2.6.11-vm-taint.patch
-Patch2001: linux-2.6.9-vm-oomkiller-debugging.patch
-Patch2002: linux-2.6.12-vm-singlebiterror.patch
-
-Patch2100: linux-2.6-acpi-20050729.patch.bz2
-Patch2101: linux-2.6-acpi-xen.patch
-Patch2102: linux-2.6-acpi-rollup-20050902.patch
-Patch2110: linux-2.6.11-acpi-thinkpad-c2c3.patch
-
-Patch2200: linux-2.6-alsa-snd-intel8x0m-semaphore.patch
-
-Patch2999: linux-2.6.3-printopen.patch
-
-Patch3000: linux-2.6-CAN-2005-2490.patch
-Patch3001: linux-2.6-CAN-2005-2492.patch
+Patch1600: linux-2.6-procfs-i_nlink-miscalculate.patch
+Patch1601: linux-2.6.11-atkbd-dell-multimedia.patch
+Patch1602: linux-2.6.11-panic-stackdump.patch
+Patch1603: linux-2.6.11-acpi-thinkpad-c2c3.patch
+Patch1604: linux-2.6-sound-emu10k1-ac97.patch
+Patch1605: linux-2.6.9-module_version.patch
+Patch1606: linux-2.6-agp-sworks-hang.patch
+Patch1607: linux-2.6-pcmcia-single-port-off-by-one.patch
+Patch1608: linux-2.6-pwc-powerup-by-default.patch
+Patch1609: linux-2.6-w1-hush-debug.patch
+Patch1610: linux-2.6.11-libata-promise-pata-on-sata.patch
+Patch1611: linux-2.6.12-input-kill-stupid-messages.patch
+Patch1612: linux-2.6-input-usblegacy.patch
+Patch1613: linux-2.6-modules-ignore-whitespace.patch
+Patch1614: linux-2.6.11-serial-tickle-nmi.patch
+Patch1615: linux-2.6.12-missing-exports.patch
+Patch1616: linux-2.6-radeon-backlight.patch
+Patch1617: linux-2.6-futex-wake_op.patch
+Patch1618: linux-2.6.10-revert-module-invalidparam.patch
+
+Patch1800: linux-2.6-ide-tune-locking.patch
+
+# Warn about usage of various obsolete functionality that may go away.
+Patch1900: linux-2.6-obsolete-idescsi-warning.patch
+Patch1901: linux-2.6-obsolete-oss-warning.patch
+
+# no external module should use these symbols.
+Patch1910: linux-2.6-unexport-symbols.patch
+
+
+# VM bits.
+Patch2000: linux-2.6.9-vm-oomkiller-debugging.patch
+Patch2001: linux-2.6-vm-silence-atomic-alloc-failures.patch
 
 #
 # External drivers that are about to get accepted upstream
 #
 
 # Intel Centrino wireless drivers.
-Patch3020: linux-2.6.9-ipw2100.patch
-Patch3021: linux-2.6.9-ipw2200.patch
-Patch3022: linux-2.6.9-ieee80211.patch
+Patch3000: linux-2.6.9-ipw2100.patch
+Patch3001: linux-2.6.9-ipw2200.patch
+Patch3002: linux-2.6.9-ieee80211.patch 
 
 #
 # 10000 to 20000 is for stuff that has to come last due to the
@@ -383,8 +362,7 @@
 # Not patches you're too lazy for to put in the proper place.
 #
 
-Patch10000: linux-2.6.0-compile.patch
-Patch10001: linux-2.6-compile-fixes.patch
+#Patch10000: linux-2.6-compile-fixes.patch
 
 # END OF PATCH DEFINITIONS
 
@@ -539,22 +517,24 @@
 
 %prep
 if [ ! -d kernel-%{kversion}/vanilla ]; then
+ # Ok, first time we do a make prep.
 %setup -q -n %{name}-%{version} -c
-rm -f pax_global_header
-mv linux-%{kversion} vanilla
+ rm -f pax_global_header
+ mv linux-%{kversion} vanilla
 else
+ # We already have a vanilla dir.
  cd kernel-%{kversion}
+ rm -rf linux-%{kversion}
 fi
-rm -rf linux-%{kversion}
 cp -rl vanilla linux-%{kversion}
-
 cd linux-%{kversion}
 
+# Update to latest upstream.
+%patch1 -p1
+
 #
-# Patches 0 through 100 are meant for core subsystem upgrades
+# Patches 10 through 100 are meant for core subsystem upgrades
 # 
-%patch1 -p1
-%patch2 -p1
 
 #
 # Patches to back out
@@ -563,13 +543,15 @@
 #
 # Architecture patches
 #
+%patch100 -p1
+%patch101 -p1
 
 #
 # x86(-64)
 #
 # Compile 686 kernels tuned for Pentium4.
 %patch200 -p1
-# AMD errata 122
+# errata 122 workaround
 %patch201 -p1
 
 # 
@@ -580,31 +562,6 @@
 %patch300 -p1
 %patch301 -p1
 %patch302 -p1
-%patch303 -p1
-
-#
-# ia64
-#
-
-# Basic build fixes
-%patch400 -p1
-
-
-#
-# s390
-#
-
-# Basic build fixes
-%patch500 -p1
-# Auto raidstart for S390
-%patch501 -p1
-# Recover after aborted nameserver request.
-%patch502 -p1
-
-#
-# sparc/sparc64
-#
-%patch600 -p1
 
 #
 # Xen
@@ -625,13 +582,13 @@
 # also gives a list of missing options at the end. Useful for automated
 # builds (as used in the buildsystem).
 %patch800 -p1
-
-#
-# Patch that adds a __must_check attribute for functions for which checking
-# the return value is mantadory (eg copy_from_user)
-#
+# Warn if someone tries to build userspace using kernel headers
 %patch801 -p1
-
+# Fix qt config tool compilation on 64bit.
+%patch802 -p1
+# reference_discarded additions.
+%patch803 -p1
+%patch804 -p1
 
 # Exec shield 
 %patch810 -p1
@@ -677,15 +634,20 @@
 # in that case
 %patch1000 -p1
 
-# Periodically scan slab caches for corruption.
+# Various low-impact patches to aid debugging.
 %patch1010 -p1
-# Stack backtrace if we find corruption.
 %patch1011 -p1
-
-#
-# Fix the extreme stack usage in some kernel functions
-#
+%patch1012 -p1
+%patch1013 -p1
+%patch1014 -p1
+%patch1015 -p1
+#%patch1016 -p1
+%patch1017 -p1
+%patch1018 -p1
+%patch1019 -p1
 %patch1020 -p1
+%patch1021 -p1
+%patch1022 -p1
 
 #
 # Make /dev/mem a need-to-know function 
@@ -708,6 +670,14 @@
 #
 %patch1070 -p1
 
+# Adjust some defaults.
+# Make CFQ default elevator again
+%patch1080 -p1
+# Bump up the number of recursive symlinks.
+%patch1081 -p1
+# Make optimise for size available without selecting CONFIG_EMBEDDED
+%patch1082 -p1
+
 #
 # SCSI Bits.
 #
@@ -717,10 +687,8 @@
 %patch1102 -p1
 # Blacklist some SCSI devices that don't like having LUNs probed.
 %patch1103 -p1
-# SCSI CAM geometry fix.
+# Add a pci table to advansys driver.
 %patch1104 -p1
-# Fix up sleeping in invalid context in sym2 driver.
-%patch1105 -p1
 # Fix aic7xxx >4GB
 %patch1106 -p1
 
@@ -728,32 +696,17 @@
 # Various upstream NFS/NFSD fixes.
 #
 %patch1200 -p1
-%patch1201 -p1
-%patch1202 -p1
-%patch1203 -p1
-%patch1204 -p1
-%patch1205 -p1
 
 # NIC driver fixes.
-# Use correct spinlock functions in token ring net code
-%patch1300 -p1
 # New PCI ID for sundance driver.
 %patch1301 -p1
-# Make orinoco driver suck less.
-%patch1302 -p1
 # Fix rmmod lanai
-%patch1304 -p1
+%patch1302 -p1
+# Acenic use after free
+%patch1303 -p1
 
 # USB Bits.
-# Enable both old and new style USB initialisation.
-#%patch1400 -p1
-# Fix port power switching for EHCI
-#%patch1401 -p1
-# Do something else originally described as "Alan's hint for ehci"
-#%patch1402 -p1
-%patch1403 -p1
-%patch1404 -p1
-%patch1405 -p1
+%patch1400 -p1
 
 # netdump bits
 %patch1500 -p1
@@ -768,105 +721,70 @@
 #
 
 # Misc fixes
-# Make some I2C drivers arch dependant.
+# Fix incorrect n_link in proc
 %patch1600 -p1
 # Make multimedia buttons on Dell Inspiron 8200 work.
-%patch1610 -p1
-# ISDN ICN driver barfs if probed with no cards present.
-%patch1620 -p1
+%patch1601 -p1
 # Print stack trace when we panic.
-%patch1640 -p1
-# Don't barf on obsolete module parameters.
-%patch1700 -p1
-# Numerous IDE fixes.
-%patch1710 -p1
-%patch1711 -p1
-%patch1712 -p1
+%patch1602 -p1
+# Blacklist another 'No C2/C3 states' Thinkpad R40e BIOS.
+%patch1603 -p1
+# Fix AC97/emu10k1 bugs.
+%patch1604 -p1
 # Add missing MODULE_VERSION tags to some modules.
-%patch1720 -p1
-# Make spinlock debugging panic instead of continue.
-%patch1730 -p1
-# Make CFQ default elevator again
-%patch1740 -p1
-# Check tainted bit on oops.
-%patch1770 -p1
-# Fix up some permissions in /proc
-%patch1800 -p1
-# Fix up miscalculated i_nlink in /proc
-%patch1801 -p1
+%patch1605 -p1
+# Fix hang with serverworks AGP
+%patch1606 -p1
+# Fix off by one in PCMCIA port reservation
+%patch1607 -p1
+# Powerup PWC driver by default.
+%patch1608 -p1
+# Silence silly debug msg in w1 driver
+%patch1609 -p1
 # Support PATA on Promise SATA.
-%patch1810 -p1
+%patch1610 -p1
 # The input layer spews crap no-one cares about.
-%patch1820 -p1
-# Audit code from git tree which was imported into 2.6.12-git1
-%patch1830 -p1
-# Audit code from git tree which is still in 2.6.12-mm
-%patch1831 -p1
+%patch1611 -p1
+# usb legacy workaround.
+%patch1612 -p1
+# Ignore whitespace at the EOL in modprobe.conf
+%patch1613 -p1
 # Tickle the NMI whilst doing serial writes.
-%patch1860 -p1
+%patch1614 -p1
 # Missing EXPORT_SYMBOL's
-%patch1870 -p1
+%patch1615 -p1
 # Radeon on thinkpad backlight power-management goodness.
-%patch1880 -p1
-# Fix ochi1394 smp init.
-%patch1890 -p1
-# Fix warning in pwc driver.
+%patch1616 -p1
+# FUTEX_WAKE_OP support.
+%patch1617 -p1
+# Fix unknown module-param handling.
+%patch1618 -p1
+# Fix IDE locking bug.
+%patch1800 -p1
+
+# Warn about obsolete functionality usage.
 %patch1900 -p1
-# Fix oops in ns558 on rmmod
+%patch1901 -p1
+# Remove kernel-internal functionality that nothing external should use.
 %patch1910 -p1
-# Fix Appletouch tapping.
-%patch1930 -p1
-# powernow-k8 driver update from 2.6.13rc7
-%patch1940 -p1
-# Fix addrlen checks in selinux_socket_connect
-%patch1950 -p1
-# ALPS typo fix.
-%patch1960 -p1
 
 #
 # VM related fixes.
 #
-# Display taint bits on VM error.
-%patch2000 -p1
 # Extra debugging on OOM Kill.
+%patch2000 -p1
+# Silence GFP_ATOMIC failures.
 %patch2001 -p1
-# Spot single bit errors in slab corruption.
-%patch2002 -p1
 
 
-# ACPI update.
-%patch2100 -p1
-# xen fixup for ACPI update
-%if %{includexen}
-%patch2101 -p1
-%endif
-# Various ACPI fixes from post 2.6.13
-%patch2102 -p1
-# Blacklist another 'No C2/C3 states' Thinkpad R40e BIOS.
-%patch2110 -p1
-
-# Fix 'semaphore is not ready' error in snd-intel8x0m
-%patch2200 -p1
-
-#
-# Local hack (off for any shipped kernels) to printk all files opened 
-# the first 180 seconds after boot for debugging userspace startup 
-# speeds
-#
-#%patch2999 -p1
-
-# Security fixes.
-%patch3000 -p1
-%patch3001 -p1
-
 #
 # External drivers that are about to get accepted upstream
 #
 
 # Intel wireless
-%patch3020 -p1
-%patch3021 -p1
-%patch3022 -p1
+%patch3000 -p1
+%patch3001 -p1
+%patch3002 -p1
 
 #
 # Patches 5000 to 6000 are reserved for new drivers that are about to
@@ -881,8 +799,7 @@
 #
 # misc small stuff to make things compile or otherwise improve performance
 #
-%patch10000 -p1
-%patch10001 -p1
+#%patch10000 -p1
 
 
 # END OF PATCH APPLICATIONS
@@ -1024,6 +941,9 @@
     cp -a asm-xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
 %endif
     cp -a `readlink asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
+	if [ "$Arch" = "x86_64" ]; then
+		cp -a asm-i386 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
+	fi
     # Make sure the Makefile and version.h have a matching timestamp so that
     # external modules can be built
     touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/linux/version.h
@@ -1299,174 +1219,303 @@
 %endif
 
 %changelog
-* Thu Sep 22 2005 Dave Jones <davej at redhat.com> [2.6.12-1.1456_FC4]
-- Disable crash driver on Xen kernels.
+* Wed Sep 28 2005 Dave Jones <davej at redhat.com> [2.6.13-1.1526_FC4]
+- Fix boot-hang with serverworks AGP. (#154673)
+- Fix off by one in pcmcia port reservation.
+- Power up pwc cams by default. (#140258)
+- Silence silly debug msg in w1 driver. (#167403)
+- Don't abort module loading if passed unknown params.
 
-* Wed Sep 14 2005 Dave Jones <davej at redhat.com> [2.6.12-1.1455_FC4]
-- Fixes for CAN-2005-2490 and CAN-2005-2492
+* Mon Sep 26 2005 Dave Jones <davej at redhat.com>
+- Fix asm-x86_64 dependancy on asm-i386. (#150266)
 
-* Thu Sep  8 2005 Rik van Riel <riel at redhat.com>
-- upgrade to a newer Xen snapshot
-- exclude Xen TPM bits, since those conflict with 2.6.12.5
-- enable highmem for Xen kernels (#162226)
-- add workaround for glibc bug on VDSO note parsing (Roland) (#166984)
+* Fri Sep 23 2005 Dave Jones <davej at redhat.com>
+- Add another Radeon to the power saving backlight patch. (#165297)
 
-* Mon Sep  5 2005 Dave Jones <davej at redhat.com>
+* Fri Sep 23 2005 Dave Jones <davej at redhat.com> [2.6.13-1.1525_FC4]
+- Fix some emu10k1/ac97 bugs. (#169152)
 - Fix aic7xxx issue with >4GB. (#167049)
 
-* Fri Sep  2 2005 Dave Jones <davej at redhat.com>
-- Various post 2.6.13 ACPI updates. (20050902)
+* Tue Sep 20 2005 Dave Jones <davej at redhat.com>
+- 2.6.13.2
+
+* Sun Aug 28 2005 Dave Jones <davej at redhat.com>
+- 2.6.13 final.
+
+* Sat Aug 27 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc7-git2
 
-* Mon Aug 29 2005 Dave Jones <davej at redhat.com>
-- Fix local builds when '-' is in the hostname.
-- Update ALPS driver to 2.6.13 level.
+* Sat Aug 27 2005 Dave Jones <davej at redhat.com>
+- Enabled voluntary preemption.
 
-* Fri Aug 26 2005 Dave Jones <davej at redhat.com> [2.6.12-1.1447_FC4]
+* Fri Aug 26 2005 Dave Jones <davej at redhat.com>
+- Add another bios rev to the "thinkpad that cant do c2/c3" list. (#165590)
+- Add another thinkpad to the radeon-pm list. (#166123)
 - Better identify local builds. (#159696)
-- Fix disk/net dump & netconsole. (#152586)
-- Fix up sleeping in invalid context in sym2 driver. (#164995)
-- Fix 'semaphore is not ready' error in snd-intel8x0m.
-- Restore hwclock functionality on some systems. (#144894)
-- Merge patches proposed for 2.6.12.6
-- Fix typo in ALPS driver.
-- Fix 'No sense' error with Transcend USB key. (#162559)
-- Fix up ide-scsi check for medium not present. (#160868)
-- powernow-k8 driver update from 2.6.13rc7.
+- Fix up some missing exported symbols.
+- Build network drivers for Xen0 kernel.
 
-* Tue Aug 23 2005 Dave Jones <davej at redhat.com> [2.6.12-1.1435_FC4]
-- Work around AMD x86-64 errata 122.
+* Thu Aug 25 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc7-git1
+- FUTEX_WAKE_OP support.
+
+* Tue Aug 23 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc7
+- Net/Diskdump/netconsole update from Jeff "The Yellow Dart" Moyer.
 
 * Tue Aug 23 2005 Rik van Riel <riel at redhat.com>
-- upgrade to today's Xen snapshot
+- upgrade to latest upstream Xen snapshot
+
+* Mon Aug 22 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc6-git13
+
+* Sat Aug 20 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc6-git12
+
+* Sat Aug 20 2005 Dave Jones <davej at redhat.com>
+- Disable -Os again, to see if some odd bugs 'go away'.
+- Add errata 122 workaround for AMD x86-64 CPUs.
 
-* Mon Aug 22 2005 Rik van Riel <riel at redhat.com>
-- make sure that the vsyscall-note is linked in so the right glibc is used
+* Fri Aug 19 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc6-git11
 
-* Sun Aug 21 2005 Rik van Riel <riel at redhat.com>
-- fix the Xen vsyscall problem
+* Thu Aug 18 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc6-git10
+- Drop a bunch of bogus patches.
 
 * Thu Aug 18 2005 David Woodhouse <dwmw2 at redhat.com>
 - Don't probe 8250 ports on ppc32 unless they're in the device tree
-- Enable ISDN, 8250 console, i8042 keyboard controller on ppc32
+- Prevent snd-powermac from oopsing on non-Mac hardware
 - Audit updates from git tree
 
-* Wed Aug 17 2005 Rik van Riel <riel at redhat.com>
-- temporarily disable the vsyscall page for Xen
+* Thu Aug 18 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc6-git9
+- Fix up the 'last item on the boot cmdline gets eaten' bug.
+- Better workaround for the usbmon DMA deficiency.
 
 * Tue Aug 16 2005 Dave Jones <davej at redhat.com>
-- Restrict ipsec socket policy loading to CAP_NET_ADMIN. (CAN-2005-2555)
-
-* Mon Aug 15 2005 Rik van Riel <riel at redhat.com>
-- upgrade Xen to a newer version
+- 2.6.13-rc6-git8
 
 * Mon Aug 15 2005 Dave Jones <davej at redhat.com>
-- 2.6.11.5
+- 2.6.13-rc6-git7
 - Fix module_verify_elf check that rejected valid .ko files. (#165528)
 
+* Sun Aug 14 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc6-git6
+
+* Sat Aug 13 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc6-git5
+
+* Fri Aug 12 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc6-git4
+- Bump mkinitrd dependancy.
+
 * Thu Aug 11 2005 Dave Jones <davej at redhat.com>
-- Audit speedup in syscall path.
-- Update to a newer ACPI drop.
+- 2.6.13-rc6-git3
+
+* Thu Aug 11 2005 David Woodhouse <dwmw2 at redhat.com>
+- Enable ISDN and CONFIG_SERIAL_8250_CONSOLE for PPC32
+
+* Wed Aug 10 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc6-git2
+- Enable CONFIG_I2C_I801 for x86-64.
+
+* Tue Aug 09 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc6-git1
+- PCMCIA/PCCARD are now built non-modular for improved resource management.
+- Fix incorrect n_link count in procfs.
+- Fix missing declaration in the ppc64 kernel.
+
+* Tue Aug 09 2005 Dave Jones <davej at redhat.com>
+- Improve the spinlock debugging panic code.
+  (Worse case, users can now boot with 'dontpanic')
+- Add new patch to deal with the 'white space at eol of modprobe.conf' bug.
+  (This one doesn't ignore obsolete parameters).
+
+* Mon Aug 08 2005 Dave Jones <davej at redhat.com>
+- Various specfile cleanup.
+  - dropped dead patches, renamed some patches, updated package conflicts:
+- Improve megaraid compatiblity hack.
+  (Now the legacy driver doesn't claim support for the drivers
+   that the newer driver supports).
+- Disable building of sk98lin driver. (Use sk98 instead).
+
+* Sun Aug 07 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc6
+
+* Sat Aug 06 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc5-git4
+
+* Fri Aug 05 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc5-git3
+- Add support for netcell revolution IDE controller. (#164330)
+
+* Thu Aug 04 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc5-git2
+
+* Wed Aug 03 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc5-git1
+
+* Tue Aug 02 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc5
 
-* Fri Aug  5 2005 Dave Jones <davej at redhat.com> [2.6.12-1.1420_FC4]
-- update to final 2.6.12.4 patchset.
-- ACPI update to 20050729.
-- Disable experimental ACPI HOTKEY driver. (#163355)
-
-* Thu Aug  4 2005 Dave Jones <davej at redhat.com>
-- Enable Amiga partition support. (#149802)
-
-* Wed Aug  3 2005 Dave Jones <davej at redhat.com> [2.6.12-1.1411_FC4]
-- Include pre-release 2.6.12.4 patchset
-- Silence some messages from PowerMac thermal driver. (#158739)
-- nfs server intermitently claimed ENOENT on existing files or directories. (#150759)
-- Stop usbhid driver incorrectly claiming Wireless Security Lock as a mouse. (#147479)
-- Further NFSD fixing for non-standard ports.
-- Fix up miscalculated i_nlink in /proc (#162418)
-- Fix addrlen checks in selinux_socket_connect. (#164165)
+* Mon Aug 01 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc4-git4
+
+* Mon Aug 01 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc4-git3
+
+* Fri Jul 29 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc4-git1
 
 * Thu Jul 28 2005 Dave Jones <davej at redhat.com>
-- Fix compilation with older gcc. (#164041)
+- 2.6.13-rc4
 
-* Fri Jul 15 2005 Dave Jones <davej at redhat.com>
-- Enable the DC395x driver. (#151010)
+* Thu Jul 28 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc3-git9
+
+* Thu Jul 28 2005 David Woodhouse <dwmw2 at redhat.com>
+- Enable i8042 and Amiga partitions on PPC (for Pegasos II, CHRP)
+
+* Wed Jul 27 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc3-git8
 
-* Fri Jul 15 2005 Dave Jones <davej at redhat.com> [2.6.12-1.1398_FC4]
-- Include a number of patches likely to show up in 2.6.12.3
+* Mon Jul 25 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc3-git7
+
+* Sat Jul 23 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc3-git5
+
+* Mon Jul 18 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc3-git4
+
+* Sun Jul 17 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc3-git4
+
+* Fri Jul 15 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc3-git2
 
 * Thu Jul 14 2005 Dave Jones <davej at redhat.com>
-- Add Appletouch support.
+- 2.6.13-rc3-git1
 
-* Wed Jul 13 2005 David Woodhouse <dwmw2 at redhat.com>
-- Audit updates. In particular, don't printk audit messages that 
-  are passed from userspace when auditing is disabled.
+* Wed Jul 13 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc3
 
 * Tue Jul 12 2005 Dave Jones <davej at redhat.com>
-- Fix up several reports of CD's causing crashes.
-- Make -p port arg of rpc.nfsd work.
-- Work around a usbmon deficiency.
-- Fix connection tracking bug with bridging. (#162438)
-
-* Mon Jul 11 2005 Dave Jones <davej at redhat.com>
-- Fix up locking in piix IDE driver whilst tuning chipset.
-
-* Tue Jul  5 2005 Dave Jones <davej at redhat.com>
-- Fixup ACPI IRQ routing bug that prevented booting for some folks.
-- Reenable ISA I2C drivers for x86-64.
-- Bump requirement on mkinitrd to something newer (#160492)
+- 2.6.13-rc2-git5
+- Fix IDE locking bug de jour.
+- Workaround a usbmon deficiency.
+- Re-add Tux again.
+
+* Sun Jul 10 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc2-git3
+
+* Fri Jul 08 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc2-git2
+
+* Thu Jul 07 2005 Dave Jones <davej at redhat.com>
+- Fix exec-shield to not randomize to between end-of-binary and start-of-brk
+
+* Wed Jul 06 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc2
+
+* Tue Jul 05 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc1-git7
+- Radeon power saving for another T41 (#159791)
+- Drop x86-64 SMP kernels, and make generic kernel use SMP.
+- Add pci table to advansys scsi driver. (#162431)
+
+* Mon Jul 04 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc1-git6
+
+* Fri Jul 01 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc1-git3
+  - Xen broke again, so is temporarily disabled. Sorry :(
+- Add a vdso marker to /proc/*/maps even if the vDSO is randomized
+
+* Thu Jun 30 2005 Dave Jones <davej at redhat.com>
+- 2.6.13-rc1-git2
 
 * Wed Jun 29 2005 Dave Jones <davej at redhat.com>
-- 2.6.12.2
+- 2.6.13-rc1
+
+* Tue Jun 28 2005 Dave Jones <davej at redhat.com>
+- 2.6.12-git10
+
+* Mon Jun 27 2005 Dave Jones <davej at redhat.com>
+- 2.6.12-git9
 
 * Mon Jun 27 2005 Dave Jones <davej at redhat.com>
-- Disable multipath caches. (#161168)
-- Reenable AMD756 I2C driver for x86-64. (#159609)
-- Add more IBM r40e BIOS's to the C2/C3 blacklist.
+- 2.6.12-git8
 
 * Thu Jun 23 2005 Dave Jones <davej at redhat.com>
-- Make orinoco driver suck less.
-  (Scanning/roaming/ethtool support).
-- Exec-shield randomisation fix.
-- pwc driver warning fix.
-- Prevent potential oops in tux with symlinks. (#160219)
+- 2.6.12-git5
+- Revert ipw drivers back to those shipped with FC4 for the time being..
+- Make Orinoco driver suck less.
+  (Scanning/Roaming/Ethtool support).
 
 * Wed Jun 22 2005 Dave Jones <davej at redhat.com>
-- 2.6.12.1
-  - Clean up subthread exec (CAN-2005-1913)
-  - ia64 ptrace + sigrestore_context (CAN-2005-1761)
+- 2.6.12-git4
+- Bring back the IDE fixes from -ac
 
-* Wed Jun 22 2005 David Woodhouse <dwmw2 at redhat.com>
-- Update audit support
+* Tue Jun 21 2005 Dave Jones <davej at redhat.com>
+- 2.6.12-git3
+  - Welcome back Tux.
+- Don't disable sysenter if booted with exec_shield=0
+- Fix up and reenable Xen.
 
 * Mon Jun 20 2005 Dave Jones <davej at redhat.com>
-- Rebase to 2.6.12
-  - Temporarily drop Alans IDE fixes whilst they get redone.
-- Enable userspace queueing of ipv6 packets.
+- 2.6.12-git2
+  - temporarily disable Tux as the rebase broke it.
+
+* Mon Jun 13 2005 Peter Jones <pjones at redhat.com>
+- Reenable fixed ipw drivers.
+
+* Mon Jun 13 2005 Dave Jones <davej at redhat.com>
+- 2.6.12-rc6-git5
+
+* Thu Jun 09 2005 Dave Jones <davej at redhat.com>
+- 2.6.12-rc6-git3
+- Temporarily disable the ipw drivers until I sort them out.
 
 * Tue Jun  7 2005 Dave Jones <davej at redhat.com>
-- Drop recent b44 changes which broke some setups.
+- 2.6.12-rc6-git1
+- Disable hercules fb.
+  If you have one of these, please put it back in the trash. Thanks.
+
+* Mon Jun  6 2005 Dave Jones <davej at redhat.com>
+- 2.6.12-rc6
+- Copy asm-i386 into x86-64's kernel-devel too. (#150266)
+
+* Sat Jun  4 2005 Dave Jones <davej at redhat.com>
+- 2.6.12-rc5-git9
+
+* Fri Jun  3 2005 Dave Jones <davej at redhat.com>
+- 2.6.12-rc5-git8
+
+* Thu Jun  2 2005 Dave Jones <davej at redhat.com>
+- 2.6.12-rc5-git7
 
 * Wed Jun  1 2005 Dave Jones <davej at redhat.com>
-- Fix up ALI IDE regression. (#157175)
+- 2.6.12-rc5-git6
 
-* Mon May 30 2005 Dave Jones <davej at redhat.com>
-- Fix up VIA IRQ quirk.
+* Tue May 31 2005 Dave Jones <davej at redhat.com>
+- 2.6.12-rc5-git5
 
 * Sun May 29 2005 Dave Jones <davej at redhat.com>
 - Fix slab corruption in firewire (#158424)
+- 2.6.12-rc5-git4
+
+* Sat May 28 2005 Dave Jones <davej at redhat.com>
+- 2.6.12-rc5-git3
 
 * Fri May 27 2005 Dave Jones <davej at redhat.com>
-- remove non-cleanroom pwc driver compression.
-- Fix unintialised value in single bit error detector. (#158825)
+- 2.6.12-rc5-git2
 
-* Wed May 25 2005 Dave Jones <davej at redhat.com>
-- Disable TPM driver, it breaks 8139 driver.
-- Revert to previous version of ipw2x00 drivers.
-  The newer ones sadly brought too many problems this close to
-  the release. I'll look at updating them again for an update.
-- Update to 2.6.12rc5
-  Fix potential local DoS. 1-2 other small fixes.
-- Tweak to fix up some vdso arithmetic.
-- Disable sysenter again for now.
+* Thu May 26 2005 Dave Jones <davej at redhat.com>
+- Specfile adjustments for FC5
+- 2.6.12-rc5-git1
+- Fix unintialised value in single bit error detector. (#158825)
 
 * Wed May 25 2005 David Woodhouse <dwmw2 at redhat.com>
 - Turn off CONFIG_ISA on PPC again. It makes some Macs unhappy (#149200)
@@ -1478,7 +1527,6 @@
   kobject ordering, tg3 fixes, ppc32 ipic fix,
   ppc64 powermac smp fix. token-ring fixes,
   TCP fix. ipv6 fix.
-- Disable slab debugging.
 
 * Mon May 23 2005 Dave Jones <davej at redhat.com>
 - Add extra id to SATA Sil driver. (#155748)

linux-2.6-compile-fixes.patch:
 0 files changed

Index: linux-2.6-compile-fixes.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6-compile-fixes.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-compile-fixes.patch	6 Aug 2005 02:06:57 -0000	1.3
+++ linux-2.6-compile-fixes.patch	29 Sep 2005 23:04:26 -0000	1.4
@@ -1,207 +0,0 @@
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/arch/ppc/kernel/head.S linux-10001/arch/ppc/kernel/head.S
---- linux-10000/arch/ppc/kernel/head.S
-+++ linux-10001/arch/ppc/kernel/head.S
-@@ -1512,7 +1512,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_HIGH_B
- flush_tlbs:
- 	lis	r10, 0x40
- 1:	addic.	r10, r10, -0x1000
--	tlbie	r10
-+	tlbie	r10,0
- 	blt	1b
- 	sync
- 	blr
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/arch/ppc/kernel/misc.S linux-10001/arch/ppc/kernel/misc.S
---- linux-10000/arch/ppc/kernel/misc.S
-+++ linux-10001/arch/ppc/kernel/misc.S
-@@ -565,7 +565,7 @@ _GLOBAL(_tlbie)
- 	SYNC_601
- 	isync
- #else /* CONFIG_SMP */
--	tlbie	r3
-+	tlbie	r3,0
- 	sync
- #endif /* CONFIG_SMP */
- #endif /* ! CONFIG_40x */
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/arch/ppc/Makefile linux-10001/arch/ppc/Makefile
---- linux-10000/arch/ppc/Makefile
-+++ linux-10001/arch/ppc/Makefile
-@@ -78,6 +78,7 @@ CPPFLAGS_vmlinux.lds	:= -Upowerpc
- 
- # All the instructions talk about "make bzImage".
- bzImage: zImage
-+	cp vmlinux arch/ppc/boot/bzImage
- 
- boot := arch/$(ARCH)/boot
- 
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/arch/ppc/mm/hashtable.S linux-10001/arch/ppc/mm/hashtable.S
---- linux-10000/arch/ppc/mm/hashtable.S
-+++ linux-10001/arch/ppc/mm/hashtable.S
-@@ -375,7 +375,7 @@ _GLOBAL(hash_page_patch_A)
- 	 */
- 	andi.	r6,r6,_PAGE_HASHPTE
- 	beq+	10f			/* no PTE: go look for an empty slot */
--	tlbie	r4
-+	tlbie	r4,0
- 
- 	addis	r4,r7,htab_hash_searches at ha
- 	lwz	r6,htab_hash_searches at l(r4)
-@@ -616,7 +616,7 @@ _GLOBAL(flush_hash_patch_B)
- 3:	li	r0,0
- 	STPTE	r0,0(r12)		/* invalidate entry */
- 4:	sync
--	tlbie	r4			/* in hw tlb too */
-+	tlbie	r4,0			/* in hw tlb too */
- 	sync
- 
- 8:	ble	cr1,9f			/* if all ptes checked */
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/arch/ppc/platforms/pmac_sleep.S linux-10001/arch/ppc/platforms/pmac_sleep.S
---- linux-10000/arch/ppc/platforms/pmac_sleep.S
-+++ linux-10001/arch/ppc/platforms/pmac_sleep.S
-@@ -340,7 +340,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_HIGH_B
- 	/* Flush all TLBs */
- 	lis	r4,0x1000
- 1:	addic.	r4,r4,-0x1000
--	tlbie	r4
-+	tlbie	r4, 0
- 	blt	1b
- 	sync
- 
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/arch/ppc64/boot/main.c linux-10001/arch/ppc64/boot/main.c
---- linux-10000/arch/ppc64/boot/main.c
-+++ linux-10001/arch/ppc64/boot/main.c
-@@ -8,6 +8,7 @@
-  * as published by the Free Software Foundation; either version
-  * 2 of the License, or (at your option) any later version.
-  */
-+#define __KERNGLUE__
- #include "ppc32-types.h"
- #include "zlib.h"
- #include <linux/elf.h>
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/arch/ppc64/Makefile linux-10001/arch/ppc64/Makefile
---- linux-10000/arch/ppc64/Makefile
-+++ linux-10001/arch/ppc64/Makefile
-@@ -68,7 +68,7 @@ endif
- 
- # Enable unit-at-a-time mode when possible. It shrinks the
- # kernel considerably.
--CFLAGS += $(call cc-option,-funit-at-a-time)
-+CFLAGS += $(call cc-option,-fno-unit-at-a-time)
- 
- head-y := arch/ppc64/kernel/head.o
- 
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/crypto/Makefile linux-10001/crypto/Makefile
---- linux-10000/crypto/Makefile
-+++ linux-10001/crypto/Makefile
-@@ -35,3 +35,5 @@ obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o
- 
- obj-$(CONFIG_CRYPTO_SIGNATURE) += signature/
- obj-$(CONFIG_CRYPTO_MPILIB) += mpi/
-+
-+CFLAGS_twofish.o += -fno-schedule-insns
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/drivers/md/Makefile linux-10001/drivers/md/Makefile
---- linux-10000/drivers/md/Makefile
-+++ linux-10001/drivers/md/Makefile
-@@ -15,6 +15,8 @@ raid6-objs	:= raid6main.o raid6algos.o r
- 		   raid6mmx.o raid6sse1.o raid6sse2.o
- hostprogs-y	:= mktables
- 
-+CFLAGS_raid6int8.o += -O2
-+
- # Note: link order is important.  All raid personalities
- # and xor.o must come before md.o, as they each initialise 
- # themselves, and md.o may use the personalities when it 
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/include/asm-ppc/ppc_asm.h linux-10001/include/asm-ppc/ppc_asm.h
---- linux-10000/include/asm-ppc/ppc_asm.h
-+++ linux-10001/include/asm-ppc/ppc_asm.h
-@@ -116,7 +116,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601)
- 	li	r4,1024;			\
- 	mtctr	r4;				\
- 	lis	r4,KERNELBASE at h;		\
--0:	tlbie	r4;				\
-+0:	tlbie	r4, 0;				\
- 	addi	r4,r4,0x1000;			\
- 	bdnz	0b
- #endif
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/include/linux/config.h linux-10001/include/linux/config.h
---- linux-10000/include/linux/config.h
-+++ linux-10001/include/linux/config.h
-@@ -2,7 +2,7 @@
- #define _LINUX_CONFIG_H
- 
- #include <linux/autoconf.h>
--#ifndef __KERNEL__
-+#if !defined (__KERNEL__) && !defined(__KERNGLUE__)
- #error including kernel header in userspace; use the glibc headers instead!
- #endif
- #endif
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/scripts/kconfig/Makefile linux-10001/scripts/kconfig/Makefile
---- linux-10000/scripts/kconfig/Makefile
-+++ linux-10001/scripts/kconfig/Makefile
-@@ -126,7 +126,7 @@ QTLIBPATH = $(QTDIR)/lib
- 
- # QT needs some extra effort...
- $(obj)/.tmp_qtcheck:
--	@set -e; for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
-+	@set -e; for d in $$QTDIR /usr/share/qt* /usr/lib/qt* /usr/lib64/qt* ; do \
- 	  if [ -f $$d/include/qconfig.h ]; then DIR=$$d; break; fi; \
- 	done; \
- 	if [ -z "$$DIR" ]; then \
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/scripts/reference_discarded.pl linux-10001/scripts/reference_discarded.pl
---- linux-10000/scripts/reference_discarded.pl
-+++ linux-10001/scripts/reference_discarded.pl
-@@ -96,6 +96,7 @@ foreach $object (keys(%object)) {
- 		     $from !~ /\.debug_aranges$/ &&
- 		     $from !~ /\.debug_ranges$/ &&
- 		     $from !~ /\.debug_line$/ &&
-+		     $from !~ /\.debug_loc$/ &&
- 		     $from !~ /\.debug_frame$/ &&
- 		     $from !~ /\.exitcall\.exit$/ &&
- 		     $from !~ /\.eh_frame$/ &&
-diff -urNp --exclude-from=/home/davej/.exclude linux-10000/sound/core/oss/Makefile linux-10001/sound/core/oss/Makefile
---- linux-10000/sound/core/oss/Makefile
-+++ linux-10001/sound/core/oss/Makefile
-@@ -3,6 +3,7 @@
- # Copyright (c) 1999 by Jaroslav Kysela <perex at suse.cz>
- #
- 
-+CFLAGS_pcm_plugin.o += -g0
- snd-mixer-oss-objs := mixer_oss.o
- 
- snd-pcm-oss-objs := pcm_oss.o pcm_plugin.o \
---- linux-2.6.11/drivers/firmware/pcdp.c~	2005-05-28 19:12:41.000000000 -0400
-+++ linux-2.6.11/drivers/firmware/pcdp.c	2005-05-28 19:12:51.000000000 -0400
-@@ -15,6 +15,7 @@
- #include <linux/console.h>
- #include <linux/efi.h>
- #include <linux/serial.h>
-+#include <acpi/actypes.h>
- #include "pcdp.h"
- 
- static int __init
---- linux-2.6.11/drivers/char/agp/hp-agp.c~	2005-05-28 19:13:50.000000000 -0400
-+++ linux-2.6.11/drivers/char/agp/hp-agp.c	2005-05-28 19:14:14.000000000 -0400
-@@ -14,9 +14,8 @@
- #include <linux/pci.h>
- #include <linux/init.h>
- #include <linux/agp_backend.h>
--
-+#include <acpi/acpixf.h>
- #include <asm/acpi-ext.h>
--
- #include "agp.h"
- 
- #ifndef log2
---- linux-2.6.12/drivers/net/sk98lin/skge.c~	2005-08-05 18:52:38.000000000 -0400
-+++ linux-2.6.12/drivers/net/sk98lin/skge.c	2005-08-05 18:52:53.000000000 -0400
-@@ -5220,8 +5220,10 @@ static struct pci_driver skge_driver = {
- 	.id_table	= skge_pci_tbl,
- 	.probe		= skge_probe_one,
- 	.remove		= __devexit_p(skge_remove_one),
-+#ifdef CONFIG_PM
- 	.suspend	= skge_suspend,
- 	.resume		= skge_resume,
-+#endif
- };
- 
- static int __init skge_init(void)
-

linux-2.6-crashdump-common.patch:
 Documentation/sysrq.txt         |    8 +
 arch/i386/kernel/nmi.c          |    1 
 arch/i386/kernel/traps.c        |    3 
 arch/i386/mm/init.c             |   47 +++++++
 arch/i386/mm/pgtable.c          |    3 
 arch/ia64/kernel/process.c      |   30 ++++
 arch/ia64/kernel/traps.c        |    6 
 arch/ia64/mm/contig.c           |    3 
 arch/ia64/mm/discontig.c        |    3 
 arch/ia64/mm/init.c             |   90 +++++++++++++-
 arch/ppc64/kernel/process.c     |    1 
 arch/ppc64/kernel/traps.c       |    3 
 arch/ppc64/mm/init.c            |   29 ++++
 arch/s390/kernel/traps.c        |    6 
 arch/x86_64/kernel/process.c    |    2 
 arch/x86_64/kernel/traps.c      |    6 
 arch/x86_64/mm/fault.c          |    1 
 arch/x86_64/mm/init.c           |   33 +++++
 drivers/char/sysrq.c            |   13 +-
 include/asm-generic/crashdump.h |   47 +++++++
 include/asm-i386/crashdump.h    |  123 ++++++++++++++++++++
 include/asm-i386/kmap_types.h   |    4 
 include/asm-ia64/crashdump.h    |   72 +++++++++++
 include/asm-ppc64/crashdump.h   |   61 +++++++++
 include/asm-x86_64/crashdump.h  |   86 +++++++++++++
 include/linux/kernel.h          |   18 ++
 kernel/Makefile                 |    2 
 kernel/dump.c                   |  246 ++++++++++++++++++++++++++++++++++++++++
 kernel/panic.c                  |    4 
 kernel/printk.c                 |   20 +++
 kernel/sched.c                  |    2 
 31 files changed, 961 insertions(+), 12 deletions(-)

Index: linux-2.6-crashdump-common.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6-crashdump-common.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-crashdump-common.patch	26 Aug 2005 07:13:50 -0000	1.2
+++ linux-2.6-crashdump-common.patch	29 Sep 2005 23:04:26 -0000	1.3
@@ -18,15 +18,90 @@
  static void sysrq_handle_sync(int key, struct pt_regs *pt_regs,
  			      struct tty_struct *tty) 
  {
-@@ -284,7 +284,7 @@ static struct sysrq_key_op *sysrq_key_ta
+@@ -289,7 +300,7 @@
  		 it is handled specially on the sparc
  		 and will never arrive */
  /* b */	&sysrq_reboot_op,
--/* c */ NULL,
-+/* c */ &sysrq_crash_op,
- /* d */	NULL,
- /* e */	&sysrq_term_op,
- /* f */	&sysrq_moom_op,
+-#ifdef CONFIG_KEXEC
++#if defined(CONFIG_KEXEC) || defined(CONFIG_NETDUMP) || defined(CONFIG_DISKDUMP)
+ /* c */ &sysrq_crashdump_op,
+ #else
+ /* c */	NULL,
+--- /dev/null	2005-08-18 08:15:49.820487896 -0400
++++ linux-2.6.12/include/asm-ia64/crashdump.h	2005-08-18 14:23:59.000000000 -0400
+@@ -0,0 +1,72 @@
++#ifndef _ASM_IA64_CRASHDUMP_H
++#define _ASM_IA64_CRASHDUMP_H
++
++/*
++ * linux/include/asm-ia64/crashdump.h
++ *
++ * Copyright (c) 2004 FUJITSU LIMITED
++ * Copyright (c) 2003 Red Hat, Inc. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2, or (at your option)
++ * any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#ifdef __KERNEL__
++
++#include <linux/elf.h>
++#include <asm/unwind.h>
++#include <asm/ptrace.h>
++
++extern void ia64_do_copy_regs(struct unw_frame_info *, void *arg);
++extern void ia64_freeze_cpu(struct unw_frame_info *, void *arg);
++extern void ia64_start_dump(struct unw_frame_info *, void *arg);
++extern int page_is_ram(unsigned long);
++extern unsigned long next_ram_page(unsigned long);
++
++#define platform_timestamp(x) ({ x = ia64_get_itc(); })
++
++#define platform_fix_regs()					\
++{								\
++	struct unw_frame_info *info = platform_arg;		\
++								\
++	current->thread.ksp = (__u64)info->sw - 16;		\
++	myregs = *regs;						\
++}
++
++#define platform_init_stack(stackptr) do { } while (0)
++#define platform_cleanup_stack(stackptr) do { } while (0)
++
++typedef asmlinkage void (*crashdump_func_t)(struct pt_regs *, void *);
++
++/* Container to hold dump hander information */
++struct dump_call_param {
++	crashdump_func_t func;
++	struct pt_regs	*regs;
++};
++
++static inline void platform_start_crashdump(void *stackptr,
++					    crashdump_func_t dumpfunc,
++					    struct pt_regs *regs)
++{
++	struct dump_call_param param;
++
++	param.func = dumpfunc;
++	param.regs = regs;
++	unw_init_running(ia64_start_dump, &param);
++}
++
++#endif /* __KERNEL__ */
++
++#endif /* _ASM_IA64_CRASHDUMP_H */
 --- /dev/null	2005-08-18 08:15:49.820487896 -0400
 +++ linux-2.6.12/include/asm-ppc64/crashdump.h	2005-08-18 14:23:59.000000000 -0400
 @@ -0,0 +1,61 @@
@@ -741,18 +816,19 @@
  /**
   * init_idle - set up an idle thread for a given CPU
   * @idle: task in question
---- linux-2.6.12/kernel/panic.c~	2005-08-26 02:38:59.000000000 -0400
-+++ linux-2.6.12/kernel/panic.c	2005-08-26 02:39:18.000000000 -0400
-@@ -70,6 +70,9 @@ NORET_TYPE void panic(const char * fmt, 
- 	printk(KERN_EMERG "Kernel panic - not syncing: %s\n",buf);
+--- linux-2.6.12/kernel/panic.c.orig	2005-08-18 12:41:17.000000000 -0400
++++ linux-2.6.12/kernel/panic.c	2005-08-18 14:31:42.000000000 -0400
+@@ -89,6 +89,10 @@
+  	dump_stack();
  	bust_spinlocks(0);
  
++#if defined(CONFIG_NETDUMP) || defined(CONFIG_DISKDUMP)
 +	if (crashdump_func())
 +		BUG();
-+
- #ifdef CONFIG_SMP
- 	smp_send_stop();
- #endif
++#endif
+ 	/*
+ 	 * If we have crashed and we have a crash kernel loaded let it handle
+ 	 * everything else.
 --- linux-2.6.12/arch/s390/kernel/traps.c.orig	2005-08-18 12:40:01.000000000 -0400
 +++ linux-2.6.12/arch/s390/kernel/traps.c	2005-08-18 14:23:59.000000000 -0400
 @@ -286,12 +286,16 @@
@@ -981,6 +1057,235 @@
  	oops_end();
  	do_exit(SIGSEGV); 
  }
+--- linux-2.6.12/arch/ia64/mm/init.c.orig	2005-08-18 12:41:13.000000000 -0400
++++ linux-2.6.12/arch/ia64/mm/init.c	2005-08-18 14:23:59.000000000 -0400
+@@ -258,12 +258,94 @@
+ 	}
+ }
+ 
+-int page_is_ram(unsigned long pagenr)
++struct curr_mem_request {
++	unsigned long requested;
++	unsigned long min_physaddr;
++	int found;
++};
++
++/*
++ *  Check whether a physical address fits within the memory descriptor
++ *  block sent from efi_mmap_walk(). If it fits, set found.
++ */
++static int
++verify_physaddr (unsigned long start, unsigned long end, void *arg)
++{
++	struct curr_mem_request *cr = arg;
++
++	start = __pa(start);
++	end = __pa(end);
++
++	if ((cr->requested >= start) && (cr->requested + PAGE_SIZE) <= end) {
++		cr->found = 1;
++		return -1;
++	}
++
++	return 0;
++}
++
++/*
++ * If physical page 'nr' is valid RAM then return 1.  Otherwise return 0.
++ */
++
++int
++page_is_ram (unsigned long pagenr)
++{
++	struct curr_mem_request cr;
++
++	if (!pfn_valid(pagenr))
++		return 0;
++
++	cr.requested = pagenr << PAGE_SHIFT;
++	cr.found = 0;
++
++	efi_memmap_walk(verify_physaddr, &cr);
++
++	return cr.found;
++}
++EXPORT_SYMBOL_GPL(page_is_ram);
++
++static int
++find_next (unsigned long start, unsigned long end, void *arg)
+ {
+-      //FIXME: implement w/efi walk
+-      printk("page is ram is called!!!!!\n");	
+-      return 1;
++	struct curr_mem_request *cr = (struct curr_mem_request *)arg;
++
++	start = __pa(start);
++	end = __pa(end);
++
++	if ((cr->requested >= start) && (cr->requested + PAGE_SIZE) <= end) {
++		cr->min_physaddr = cr->requested;
++		cr->found = 1;
++		return -1;
++	}
++	if ((cr->requested < start) && (start + PAGE_SIZE) <= end)
++		if (start < cr->min_physaddr) {
++			cr->min_physaddr = start;
++			cr->found = 1;
++		}
++
++	return 0;
++}
++
++unsigned long
++next_ram_page (unsigned long pagenr)
++{
++	struct curr_mem_request cr;
++
++	pagenr++;
++
++	cr.requested = pagenr << PAGE_SHIFT;
++	cr.found = 0;
++	cr.min_physaddr = ULONG_MAX;
++
++	efi_memmap_walk(find_next, &cr);
++
++	if (cr.found)
++		return cr.min_physaddr >> PAGE_SHIFT;
++	else
++		return ULONG_MAX;
+ }
++EXPORT_SYMBOL_GPL(next_ram_page);
+ 
+ /*
+  * This installs a clean page in the kernel's page table.
+--- linux-2.6.12/arch/ia64/mm/discontig.c.orig	2005-08-18 12:39:57.000000000 -0400
++++ linux-2.6.12/arch/ia64/mm/discontig.c	2005-08-18 14:23:59.000000000 -0400
+@@ -21,6 +21,7 @@
+ #include <linux/acpi.h>
+ #include <linux/efi.h>
+ #include <linux/nodemask.h>
++#include <linux/module.h>
+ #include <asm/pgalloc.h>
+ #include <asm/tlb.h>
+ #include <asm/meminit.h>
+@@ -556,6 +557,8 @@
+ 	printk("%d free buffer pages\n", nr_free_buffer_pages());
+ }
+ 
++EXPORT_SYMBOL_GPL(show_mem);
++
+ /**
+  * call_pernode_memory - use SRAT to call callback functions with node info
+  * @start: physical start of range
+--- linux-2.6.12/arch/ia64/mm/contig.c.orig	2005-06-17 15:48:29.000000000 -0400
++++ linux-2.6.12/arch/ia64/mm/contig.c	2005-08-18 14:23:59.000000000 -0400
+@@ -19,6 +19,7 @@
+ #include <linux/efi.h>
+ #include <linux/mm.h>
+ #include <linux/swap.h>
++#include <linux/module.h>
+ 
+ #include <asm/meminit.h>
+ #include <asm/pgalloc.h>
+@@ -65,6 +66,8 @@
+ 		pgtable_quicklist_total_size());
+ }
+ 
++EXPORT_SYMBOL_GPL(show_mem);
++
+ /* physical address where the bootmem map is located */
+ unsigned long bootmap_start;
+ 
+--- linux-2.6.12/arch/ia64/kernel/process.c.orig	2005-08-18 12:41:05.000000000 -0400
++++ linux-2.6.12/arch/ia64/kernel/process.c	2005-08-18 14:25:30.000000000 -0400
+@@ -41,6 +41,7 @@
+ #include <asm/uaccess.h>
+ #include <asm/unwind.h>
+ #include <asm/user.h>
++#include <asm/diskdump.h>
+ 
+ #include "entry.h"
+ 
+@@ -154,6 +155,8 @@
+ 		show_stack(NULL, NULL);
+ }
+ 
++EXPORT_SYMBOL_GPL(show_regs);
++
+ void
+ do_notify_resume_user (sigset_t *oldset, struct sigscratch *scr, long in_syscall)
+ {
+@@ -591,11 +594,13 @@
+ }
+ 
+ void
+-do_copy_regs (struct unw_frame_info *info, void *arg)
++ia64_do_copy_regs (struct unw_frame_info *info, void *arg)
+ {
+ 	do_copy_task_regs(current, info, arg);
+ }
+ 
++EXPORT_SYMBOL_GPL(ia64_do_copy_regs);
++
+ void
+ do_dump_fpu (struct unw_frame_info *info, void *arg)
+ {
+@@ -608,7 +613,7 @@
+ 	struct unw_frame_info tcore_info;
+ 
+ 	if (current == task) {
+-		unw_init_running(do_copy_regs, regs);
++		unw_init_running(ia64_do_copy_regs, regs);
+ 	} else {
+ 		memset(&tcore_info, 0, sizeof(tcore_info));
+ 		unw_init_from_blocked_task(&tcore_info, task);
+@@ -620,7 +625,7 @@
+ void
+ ia64_elf_core_copy_regs (struct pt_regs *pt, elf_gregset_t dst)
+ {
+-	unw_init_running(do_copy_regs, dst);
++	unw_init_running(ia64_do_copy_regs, dst);
+ }
+ 
+ int
+@@ -821,3 +826,22 @@
+ 	machine_halt();
+ }
+ 
++
++void
++ia64_freeze_cpu (struct unw_frame_info *info, void *arg)
++{
++	current->thread.ksp = (__u64)(info->sw) - 16;
++	for (;;) local_irq_disable();
++}
++
++EXPORT_SYMBOL_GPL(ia64_freeze_cpu);
++
++void
++ia64_start_dump (struct unw_frame_info *info, void *arg)
++{
++	struct dump_call_param *param = arg;
++
++	param->func(param->regs, info);
++}
++
++EXPORT_SYMBOL_GPL(ia64_start_dump);
+--- linux-2.6.12/arch/ia64/kernel/traps.c.orig	2005-08-18 12:39:57.000000000 -0400
++++ linux-2.6.12/arch/ia64/kernel/traps.c	2005-08-18 14:23:59.000000000 -0400
+@@ -108,6 +108,12 @@
+   	} else
+ 		printk(KERN_ERR "Recursive die() failure, output suppressed\n");
+ 
++	try_crashdump(regs);
++	if (panic_on_oops) {
++		if (netdump_func)
++			netdump_func = NULL;
++		panic("Fatal exception");
++	}
+ 	bust_spinlocks(0);
+ 	die.lock_owner = -1;
+ 	spin_unlock_irq(&die.lock);
 --- linux-2.6.12/arch/ppc64/mm/init.c.orig	2005-08-18 12:41:13.000000000 -0400
 +++ linux-2.6.12/arch/ppc64/mm/init.c	2005-08-18 14:23:59.000000000 -0400
 @@ -113,6 +113,7 @@

linux-2.6-crashdump-reboot-exports.patch:
 i386/kernel/process.c  |    2 ++
 i386/kernel/reboot.c   |    4 ++++
 ia64/kernel/process.c  |    4 ++++
 ppc64/kernel/setup.c   |    4 ++++
 s390/kernel/process.c  |    2 ++
 s390/kernel/setup.c    |    4 ++++
 x86_64/kernel/reboot.c |    4 ++++
 7 files changed, 24 insertions(+)

Index: linux-2.6-crashdump-reboot-exports.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6-crashdump-reboot-exports.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-crashdump-reboot-exports.patch	26 Aug 2005 07:04:29 -0000	1.2
+++ linux-2.6-crashdump-reboot-exports.patch	29 Sep 2005 23:04:26 -0000	1.3
@@ -1,3 +1,72 @@
+--- linux-2.6.12/arch/s390/kernel/process.c.orig	2005-08-22 14:11:14.469588353 -0400
++++ linux-2.6.12/arch/s390/kernel/process.c	2005-08-22 14:11:31.717710903 -0400
+@@ -158,6 +158,8 @@ void show_regs(struct pt_regs *regs)
+ 		show_trace(0,(unsigned long *) regs->gprs[15]);
+ }
+ 
++EXPORT_SYMBOL(show_regs);
++
+ extern void kernel_thread_starter(void);
+ 
+ __asm__(".align 4\n"
+--- linux-2.6.12/arch/s390/kernel/setup.c.orig	2005-08-22 14:11:53.530072038 -0400
++++ linux-2.6.12/arch/s390/kernel/setup.c	2005-08-22 14:12:09.611389274 -0400
+@@ -299,12 +299,16 @@ void machine_restart(char *command)
+ 	_machine_restart(command);
+ }
+ 
++EXPORT_SYMBOL(machine_restart);
++
+ void machine_halt(void)
+ {
+ 	console_unblank();
+ 	_machine_halt();
+ }
+ 
++EXPORT_SYMBOL(machine_halt);
++
+ void machine_power_off(void)
+ {
+ 	console_unblank();
+--- linux-2.6.12/arch/ia64/kernel/process.c.orig	2005-08-22 14:07:34.782386720 -0400
++++ linux-2.6.12/arch/ia64/kernel/process.c	2005-08-22 14:07:36.013178773 -0400
+@@ -812,12 +812,16 @@ machine_restart (char *restart_cmd)
+ 	(*efi.reset_system)(EFI_RESET_WARM, 0, 0, NULL);
+ }
+ 
++EXPORT_SYMBOL(machine_restart);
++
+ void
+ machine_halt (void)
+ {
+ 	cpu_halt();
+ }
+ 
++EXPORT_SYMBOL(machine_halt);
++
+ void
+ machine_power_off (void)
+ {
+--- linux-2.6.12/arch/ppc64/kernel/setup.c.orig	2005-08-22 14:09:24.318964809 -0400
++++ linux-2.6.12/arch/ppc64/kernel/setup.c	2005-08-22 14:09:43.133825875 -0400
+@@ -695,6 +695,8 @@ void machine_restart(char *cmd)
+ 	while (1) ;
+ }
+ 
++EXPORT_SYMBOL(machine_restart);
++
+ void machine_power_off(void)
+ {
+ 	machine_shutdown();
+@@ -720,6 +722,8 @@ void machine_halt(void)
+ 	while (1) ;
+ }
+ 
++EXPORT_SYMBOL(machine_halt);
++
+ static int ppc64_panic_event(struct notifier_block *this,
+                              unsigned long event, void *ptr)
+ {
 --- linux-2.6.12/arch/i386/kernel/process.c.orig	2005-08-22 14:06:18.768231301 -0400
 +++ linux-2.6.12/arch/i386/kernel/process.c	2005-08-22 14:06:19.889041887 -0400
 @@ -327,6 +327,8 @@ void show_regs(struct pt_regs * regs)
@@ -9,3 +78,37 @@
  /*
   * This gets run with %ebx containing the
   * function to call, and %edx containing
+--- linux-2.6.12/arch/i386/kernel/reboot.c.orig	2005-08-22 14:06:57.191738225 -0400
++++ linux-2.6.12/arch/i386/kernel/reboot.c	2005-08-22 14:06:46.392563059 -0400
+@@ -341,10 +341,14 @@ void machine_restart(char * __unused)
+ 	machine_emergency_restart();
+ }
+ 
++EXPORT_SYMBOL(machine_restart);
++
+ void machine_halt(void)
+ {
+ }
+ 
++EXPORT_SYMBOL(machine_halt);
++
+ void machine_power_off(void)
+ {
+ 	machine_shutdown();
+--- linux-2.6.12/arch/x86_64/kernel/reboot.c.orig	2005-08-22 14:08:25.688786610 -0400
++++ linux-2.6.12/arch/x86_64/kernel/reboot.c	2005-08-22 14:08:17.449178506 -0400
+@@ -147,10 +147,14 @@ void machine_restart(char * __unused)
+ 	machine_emergency_restart();
+ }
+ 
++EXPORT_SYMBOL(machine_restart);
++
+ void machine_halt(void)
+ {
+ }
+ 
++EXPORT_SYMBOL(machine_halt);
++
+ void machine_power_off(void)
+ {
+ 	if (!reboot_force) {

linux-2.6-diskdump.patch:
 drivers/block/Kconfig          |    5 
 drivers/block/Makefile         |    1 
 drivers/block/diskdump.c       | 1121 +++++++++++++++++++++++++++++++++++++++++
 include/asm-generic/diskdump.h |   13 
 include/asm-i386/diskdump.h    |   55 ++
 include/asm-ia64/diskdump.h    |   63 ++
 include/asm-ppc/diskdump.h     |    6 
 include/asm-ppc64/diskdump.h   |   55 ++
 include/asm-s390/diskdump.h    |    6 
 include/asm-x86_64/diskdump.h  |   44 +
 include/linux/diskdump.h       |  186 ++++++
 include/linux/interrupt.h      |    4 
 include/linux/timer.h          |    3 
 include/linux/workqueue.h      |    3 
 kernel/softirq.c               |   32 +
 kernel/timer.c                 |   43 +
 kernel/workqueue.c             |   34 +
 17 files changed, 1670 insertions(+), 4 deletions(-)

Index: linux-2.6-diskdump.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6-diskdump.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-diskdump.patch	26 Aug 2005 06:53:13 -0000	1.1
+++ linux-2.6-diskdump.patch	29 Sep 2005 23:04:27 -0000	1.2
@@ -1242,38 +1242,32 @@
  
  #include <asm/uaccess.h>
  #include <asm/unistd.h>
-@@ -438,8 +438,9 @@ static int cascade(tvec_base_t *base, tv
+@@ -460,8 +462,9 @@ static int cascade(tvec_base_t *base, tv
  static inline void __run_timers(tvec_base_t *base)
  {
  	struct timer_list *timer;
 +	unsigned long flags;
  
--	spin_lock_irq(&base->lock);
-+	spin_lock_irqsave(&base->lock, flags);
+-	spin_lock_irq(&base->t_base.lock);
++	spin_lock_irqsave(&base->t_base.lock, flags);
  	while (time_after_eq(jiffies, base->timer_jiffies)) {
  		struct list_head work_list = LIST_HEAD_INIT(work_list);
  		struct list_head *head = &work_list;
-@@ -468,7 +469,7 @@ repeat:
+@@ -487,7 +490,7 @@ static inline void __run_timers(tvec_bas
+ 
  			set_running_timer(base, timer);
- 			smp_wmb();
- 			timer->base = NULL;
--			spin_unlock_irq(&base->lock);
-+			spin_unlock_irqrestore(&base->lock, flags);
+ 			detach_timer(timer, 1);
+-			spin_unlock_irq(&base->t_base.lock);
++			spin_unlock_irqrestore(&base->t_base.lock, flags);
  			{
- 				u32 preempt_count = preempt_count();
+ 				int preempt_count = preempt_count();
  				fn(data);
-@@ -477,12 +478,12 @@ repeat:
- 					BUG();
- 				}
- 			}
--			spin_lock_irq(&base->lock);
-+			spin_lock_irqsave(&base->lock, flags);
- 			goto repeat;
+@@ -504,7 +507,7 @@ static inline void __run_timers(tvec_bas
  		}
  	}
  	set_running_timer(base, NULL);
--	spin_unlock_irq(&base->lock);
-+	spin_unlock_irqrestore(&base->lock, flags);
+-	spin_unlock_irq(&base->t_base.lock);
++	spin_unlock_irqrestore(&base->t_base.lock, flags);
  }
  
  #ifdef CONFIG_NO_IDLE_HZ

linux-2.6-dump_smp_call_function.patch:
 arch/i386/kernel/smp.c   |   44 ++++++++++++++++++++++++++++++++++++++++++++
 arch/ia64/kernel/smp.c   |   44 ++++++++++++++++++++++++++++++++++++++++++++
 arch/ppc64/kernel/smp.c  |   45 ++++++++++++++++++++++++++++++++++++++++++++-
 arch/x86_64/kernel/smp.c |   45 +++++++++++++++++++++++++++++++++++++++++++++
 drivers/block/diskdump.c |    2 +-
 drivers/net/netdump.c    |    2 +-
 include/linux/smp.h      |    2 ++
 7 files changed, 181 insertions(+), 3 deletions(-)

Index: linux-2.6-dump_smp_call_function.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6-dump_smp_call_function.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-dump_smp_call_function.patch	27 Aug 2005 00:05:52 -0000	1.4
+++ linux-2.6-dump_smp_call_function.patch	29 Sep 2005 23:04:27 -0000	1.5
@@ -133,14 +133,6 @@
   *
 --- linux-2.6.12/arch/i386/kernel/smp.c.orig	2005-08-23 10:50:15.380598925 -0400
 +++ linux-2.6.12/arch/i386/kernel/smp.c	2005-08-23 10:53:29.712621271 -0400
-@@ -19,6 +19,7 @@
- #include <linux/mc146818rtc.h>
- #include <linux/cache.h>
- #include <linux/interrupt.h>
-+#include <linux/module.h>
- 
- #include <asm/mtrr.h>
- #include <asm/tlbflush.h>
 @@ -489,6 +489,7 @@ void smp_send_reschedule(int cpu)
   * static memory requirements. It also looks cleaner.
   */

linux-2.6-netdump.patch:
 drivers/net/Kconfig           |    7 
 drivers/net/Makefile          |    1 
 drivers/net/netdump.c         |  550 ++++++++++++++++++++++++++++++++++++++++++
 drivers/net/netdump.h         |   90 ++++++
 include/asm-generic/netdump.h |   48 +++
 include/asm-i386/netdump.h    |   79 ++++++
 include/asm-ia64/netdump.h    |   82 ++++++
 include/asm-ppc64/netdump.h   |   79 ++++++
 include/asm-s390/netdump.h    |    6 
 include/asm-x86_64/netdump.h  |   79 ++++++
 include/linux/netdevice.h     |    8 
 include/linux/netpoll.h       |    4 
 net/core/netpoll.c            |   17 +
 13 files changed, 1039 insertions(+), 11 deletions(-)

Index: linux-2.6-netdump.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6-netdump.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-netdump.patch	26 Aug 2005 06:53:13 -0000	1.1
+++ linux-2.6-netdump.patch	29 Sep 2005 23:04:27 -0000	1.2
@@ -644,22 +644,22 @@
 +
 +module_init(init_netdump);
 +module_exit(cleanup_netdump);
---- linux-2.6.12/net/Kconfig~	2005-08-26 02:41:34.000000000 -0400
-+++ linux-2.6.12/net/Kconfig	2005-08-26 02:41:54.000000000 -0400
-@@ -618,6 +618,13 @@ endmenu
- 
- endmenu
- 
-+config NETDUMP
-+  tristate "Network kernel crash dump support"
-+  depends on NETPOLL && NETPOLL_TRAP && (X86 || PPC_PSERIES || IA64)
-+  ---help---
-+  Enable this option if you have a netdump server and you would like
-+  to collect kernel crash dumps.
+--- linux-2.6.12/drivers/net/Kconfig.netdump.orig	2005-08-19 17:45:43.052483533 -0400
++++ linux-2.6.12/drivers/net/Kconfig	2005-08-19 17:48:14.835252548 -0400
+@@ -2545,6 +2545,13 @@ config NETCONSOLE
+ 	If you want to log kernel messages over the network, enable this.
+ 	See <file:Documentation/networking/netconsole.txt> for details.
+ 
++ config NETDUMP
++	tristate "Network kernel crash dump support"
++	depends on NETPOLL && NETPOLL_TRAP && (X86 || PPC_PSERIES || IA64)
++	---help---
++	Enable this option if you have a netdump server and you would like
++	to collect kernel crash dumps.
 +
- config NETPOLL
- 	def_bool NETCONSOLE
+ endif #NETDEVICES
  
+ config NETPOLL
 --- linux-2.6.12/drivers/net/Makefile.netdump.orig	2005-08-19 17:45:43.053483367 -0400
 +++ linux-2.6.12/drivers/net/Makefile	2005-08-19 17:47:33.025203810 -0400
 @@ -195,3 +195,4 @@ obj-$(CONFIG_IRDA) += irda/
@@ -682,15 +682,15 @@
  
  /*
   * We maintain a small pool of fully-sized skbs, to make sure the
-@@ -132,7 +132,7 @@ static int checksum_udp(struct sk_buff *
-  */
+@@ -132,7 +134,7 @@ static int checksum_udp(struct sk_buff *
  static void poll_napi(struct netpoll *np)
  {
+ 	struct netpoll_info *npinfo = np->dev->npinfo;
 -	int budget = 16;
 +	int budget = netdump_mode ? 64 : 16;
  
  	if (test_bit(__LINK_STATE_RX_SCHED, &np->dev->state) &&
- 	    np->poll_owner != smp_processor_id() &&
+ 	    npinfo->poll_owner != smp_processor_id() &&
 @@ -203,6 +205,7 @@ static void zap_completion_queue(void)
  	}
  
@@ -928,10 +928,10 @@
  
 --- linux-2.6.12/include/linux/netpoll.h.netdump.orig	2005-08-19 17:46:01.045492820 -0400
 +++ linux-2.6.12/include/linux/netpoll.h	2005-08-19 17:47:33.041201150 -0400
-@@ -17,7 +17,8 @@ struct netpoll {
+@@ -17,7 +17,8 @@ struct netpoll;
+ struct netpoll {
  	struct net_device *dev;
  	char dev_name[16], *name;
- 	int rx_flags;
 -	void (*rx_hook)(struct netpoll *, int, char *, int);
 +	void (*rx_hook)(struct netpoll *, short, char *, int);
 +	void (*dump_func)(struct pt_regs *);

linux-2.6-usb-transcend-nosense.patch:
 unusual_devs.h |   10 ++++++++++
 1 files changed, 10 insertions(+)

Index: linux-2.6-usb-transcend-nosense.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6-usb-transcend-nosense.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-usb-transcend-nosense.patch	26 Aug 2005 23:15:39 -0000	1.1
+++ linux-2.6-usb-transcend-nosense.patch	29 Sep 2005 23:04:27 -0000	1.2
@@ -1,3 +1,6 @@
+
+bugzilla 162559
+
 --- linux-2.6.13-rc6/drivers/usb/storage/unusual_devs.h	2005-08-14 20:57:45.000000000 -0700
 +++ linux-2.6.13-rc6-lem/drivers/usb/storage/unusual_devs.h	2005-08-18 14:27:54.000000000 -0700
 @@ -96,6 +96,16 @@ UNUSUAL_DEV(  0x0436, 0x0005, 0x0100, 0x

linux-2.6-usbhid-wireless-security-lock.patch:
 hid-core.c |    4 ++++
 1 files changed, 4 insertions(+)

Index: linux-2.6-usbhid-wireless-security-lock.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6-usbhid-wireless-security-lock.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-usbhid-wireless-security-lock.patch	3 Aug 2005 21:32:14 -0000	1.1
+++ linux-2.6-usbhid-wireless-security-lock.patch	29 Sep 2005 23:04:27 -0000	1.2
@@ -1,3 +1,6 @@
+
+bugzilla 147479
+
 diff -ur linux-2.6.11.orig/drivers/usb/input/hid-core.c linux-2.6.11/drivers/usb/input/hid-core.c
 --- linux-2.6.11.orig/drivers/usb/input/hid-core.c	2005-03-02 08:38:10.000000000 +0100
 +++ linux-2.6.11/drivers/usb/input/hid-core.c	2005-07-24 19:25:35.000000000 +0200

linux-2.6-usbmon-deficiency-workaround.patch:
 Makefile   |    2 +-
 mon_dma.c  |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 mon_text.c |   35 +++++++++++++++++------------------
 usb_mon.h  |    4 ++++
 4 files changed, 77 insertions(+), 19 deletions(-)

Index: linux-2.6-usbmon-deficiency-workaround.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6-usbmon-deficiency-workaround.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-usbmon-deficiency-workaround.patch	12 Jul 2005 20:53:12 -0000	1.1
+++ linux-2.6-usbmon-deficiency-workaround.patch	29 Sep 2005 23:04:27 -0000	1.2
@@ -1,38 +1,149 @@
 
-We have usbmon enabled now and it's good, but usb-storage moved away
-from under me a little bit. It now maps everything for DMA beforehand,
-which makes usbmon to miss the SCSI commands and replies.
-
-I am going to address this problem in usbmon, where it belongs, but
-it requires some work which is not done.
-
-What do you think about carrying the attached patch for a few months
-(I hope to turn around sooner, but you know how that works!)
+I came around with the usbmon fix (although it's for i386 only at this
+time - I would gladly take a patch for x86_64). So, would you please
+drop the workaround in usb-storage, patch 1402, and apply the attached
+instead?
 
 -- Pete
 
-diff -urp -X dontdiff linux-2.6.12/drivers/usb/storage/transport.c linux-2.6.12-lem/drivers/usb/storage/transport.c
---- linux-2.6.12/drivers/usb/storage/transport.c	2005-06-21 12:58:48.000000000 -0700
-+++ linux-2.6.12-lem/drivers/usb/storage/transport.c	2005-07-06 14:00:30.000000000 -0700
-@@ -948,8 +948,9 @@ int usb_stor_Bulk_max_lun(struct us_data
+diff -urpN -X dontdiff linux-2.6.13-rc6/drivers/usb/mon/Makefile linux-2.6.13-rc6-lem/drivers/usb/mon/Makefile
+--- linux-2.6.13-rc6/drivers/usb/mon/Makefile	2005-08-14 20:57:43.000000000 -0700
++++ linux-2.6.13-rc6-lem/drivers/usb/mon/Makefile	2005-08-15 11:25:32.000000000 -0700
+@@ -2,7 +2,7 @@
+ # Makefile for USB Core files and filesystem
+ #
  
- int usb_stor_Bulk_transport(struct scsi_cmnd *srb, struct us_data *us)
+-usbmon-objs	:= mon_main.o mon_stat.o mon_text.o
++usbmon-objs	:= mon_main.o mon_stat.o mon_text.o mon_dma.o
+ 
+ # This does not use CONFIG_USB_MON because we want this to use a tristate.
+ obj-$(CONFIG_USB)	+= usbmon.o
+diff -urpN -X dontdiff linux-2.6.13-rc6/drivers/usb/mon/mon_dma.c linux-2.6.13-rc6-lem/drivers/usb/mon/mon_dma.c
+--- linux-2.6.13-rc6/drivers/usb/mon/mon_dma.c	1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.13-rc6-lem/drivers/usb/mon/mon_dma.c	2005-08-15 16:11:51.000000000 -0700
+@@ -0,0 +1,55 @@
++/*
++ * The USB Monitor, inspired by Dave Harding's USBMon.
++ * 
++ * mon_dma.c: Library which snoops on DMA areas.
++ *
++ * Copyright (C) 2005 Pete Zaitcev (zaitcev at redhat.com)
++ */
++#include <linux/kernel.h>
++#include <linux/list.h>
++#include <linux/highmem.h>
++#include <asm/page.h>
++
++#include <linux/usb.h>	/* Only needed for declarations in usb_mon.h */
++#include "usb_mon.h"
++
++#ifdef __i386__		/* CONFIG_ARCH_I386 does not exit */
++#define MON_HAS_UNMAP 1
++
++#define phys_to_page(phys)	pfn_to_page((phys) >> PAGE_SHIFT)
++
++char mon_dmapeek(unsigned char *dst, dma_addr_t dma_addr, int len)
++{
++	struct page *pg;
++	unsigned long flags;
++	unsigned char *map;
++	unsigned char *ptr;
++
++	/*
++	 * On i386, a DMA handle is the "physical" address of a page.
++	 * In other words, the bus address is equal to physical address.
++	 * There is no IOMMU.
++	 */
++	pg = phys_to_page(dma_addr);
++
++	/*
++	 * We are called from hardware IRQs in case of callbacks.
++	 * But we can be called from softirq or process context in case
++	 * of submissions. In such case, we need to protect KM_IRQ0.
++	 */
++	local_irq_save(flags);
++	map = kmap_atomic(pg, KM_IRQ0);
++	ptr = map + (dma_addr & (PAGE_SIZE-1));
++	memcpy(dst, ptr, len);
++	kunmap_atomic(map, KM_IRQ0);
++	local_irq_restore(flags);
++	return 0;
++}
++#endif /* __i386__ */
++
++#ifndef MON_HAS_UNMAP
++char mon_dmapeek(unsigned char *dst, dma_addr_t dma_addr, int len)
++{
++	return 'D';
++}
++#endif
+diff -urpN -X dontdiff linux-2.6.13-rc6/drivers/usb/mon/mon_text.c linux-2.6.13-rc6-lem/drivers/usb/mon/mon_text.c
+--- linux-2.6.13-rc6/drivers/usb/mon/mon_text.c	2005-08-14 20:57:43.000000000 -0700
++++ linux-2.6.13-rc6-lem/drivers/usb/mon/mon_text.c	2005-08-15 11:44:13.000000000 -0700
+@@ -91,25 +91,11 @@ static inline char mon_text_get_data(str
+     int len, char ev_type)
  {
--	struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf;
--	struct bulk_cs_wrap *bcs = (struct bulk_cs_wrap *) us->iobuf;
-+	/* Offset into iobuf a little in order to defeat pre-set DMA */
-+	struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) (us->iobuf + 4);
-+	struct bulk_cs_wrap *bcs = (struct bulk_cs_wrap *) (us->iobuf + 4);
- 	unsigned int transfer_length = srb->request_bufflen;
- 	unsigned int residue;
- 	int result;
-@@ -960,7 +961,7 @@ int usb_stor_Bulk_transport(struct scsi_
- 	/* Take care of BULK32 devices; set extra byte to 0 */
- 	if ( unlikely(us->flags & US_FL_BULK32)) {
- 		cbwlen = 32;
--		us->iobuf[31] = 0;
-+		((unsigned char *)bcb)[31] = 0;
+ 	int pipe = urb->pipe;
+-	unsigned char *data;
+-
+-	/*
+-	 * The check to see if it's safe to poke at data has an enormous
+-	 * number of corner cases, but it seems that the following is
+-	 * more or less safe.
+-	 *
+-	 * We do not even try to look transfer_buffer, because it can
+-	 * contain non-NULL garbage in case the upper level promised to
+-	 * set DMA for the HCD.
+-	 */
+-	if (urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
+-		return 'D';
+ 
+ 	if (len <= 0)
+ 		return 'L';
+-
+-	if ((data = urb->transfer_buffer) == NULL)
+-		return 'Z';	/* '0' would be not as pretty. */
++	if (len >= DATA_MAX)
++		len = DATA_MAX;
+ 
+ 	/*
+ 	 * Bulk is easy to shortcut reliably. 
+@@ -126,8 +112,21 @@ static inline char mon_text_get_data(str
+ 		}
  	}
  
- 	/* set up the command wrapper */
+-	if (len >= DATA_MAX)
+-		len = DATA_MAX;
++	/*
++	 * The check to see if it's safe to poke at data has an enormous
++	 * number of corner cases, but it seems that the following is
++	 * more or less safe.
++	 *
++	 * We do not even try to look transfer_buffer, because it can
++	 * contain non-NULL garbage in case the upper level promised to
++	 * set DMA for the HCD.
++	 */
++	if (urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
++		return mon_dmapeek(ep->data, urb->transfer_dma, len);
++
++	if (urb->transfer_buffer == NULL)
++		return 'Z';	/* '0' would be not as pretty. */
++
+ 	memcpy(ep->data, urb->transfer_buffer, len);
+ 	return 0;
+ }
+diff -urpN -X dontdiff linux-2.6.13-rc6/drivers/usb/mon/usb_mon.h linux-2.6.13-rc6-lem/drivers/usb/mon/usb_mon.h
+--- linux-2.6.13-rc6/drivers/usb/mon/usb_mon.h	2005-06-17 12:48:29.000000000 -0700
++++ linux-2.6.13-rc6-lem/drivers/usb/mon/usb_mon.h	2005-08-15 16:12:42.000000000 -0700
+@@ -43,6 +45,10 @@ struct mon_reader {
+ void mon_reader_add(struct mon_bus *mbus, struct mon_reader *r);
+ void mon_reader_del(struct mon_bus *mbus, struct mon_reader *r);
+ 
++/*
++ */
++extern char mon_dmapeek(unsigned char *dst, dma_addr_t dma_addr, int len);
++
+ extern struct semaphore mon_lock;
+ 
+ extern struct file_operations mon_fops_text;
 

linux-2.6.0-sleepon.patch:
 drivers/block/DAC960.c        |   12 +++++++++++-
 drivers/net/tokenring/ibmtr.c |    9 ++++++++-
 include/linux/wait.h          |    6 +++---
 kernel/sched.c                |   28 +++++++++++++++-------------
 net/sunrpc/clnt.c             |    9 ++++++++-
 5 files changed, 45 insertions(+), 19 deletions(-)

Index: linux-2.6.0-sleepon.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.0-sleepon.patch,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- linux-2.6.0-sleepon.patch	22 Mar 2005 07:00:21 -0000	1.13
+++ linux-2.6.0-sleepon.patch	29 Sep 2005 23:04:28 -0000	1.14
@@ -63,17 +63,6 @@
  	return i? 0 : -EAGAIN;
  }
  
-diff -urNp --exclude-from=/home/davej/.exclude linux-1060/fs/lockd/clntlock.c linux-1070/fs/lockd/clntlock.c
---- linux-1060/fs/lockd/clntlock.c
-+++ linux-1070/fs/lockd/clntlock.c
-@@ -70,6 +70,7 @@ nlmclnt_block(struct nlm_host *host, str
- 	 * nlmclnt_lock for an explanation.
- 	 */
- 	sleep_on_timeout(&block.b_wait, 30*HZ);
-+	#warning race
- 
- 	for (head = &nlm_blocked; *head; head = &(*head)->b_next) {
- 		if (*head == &block) {
 diff -urNp --exclude-from=/home/davej/.exclude linux-1060/include/linux/wait.h linux-1070/include/linux/wait.h
 --- linux-1060/include/linux/wait.h
 +++ linux-1070/include/linux/wait.h

linux-2.6.11-acpi-thinkpad-c2c3.patch:
 processor_idle.c |    6 ++++++
 1 files changed, 6 insertions(+)

Index: linux-2.6.11-acpi-thinkpad-c2c3.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.11-acpi-thinkpad-c2c3.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6.11-acpi-thinkpad-c2c3.patch	5 Aug 2005 22:14:57 -0000	1.3
+++ linux-2.6.11-acpi-thinkpad-c2c3.patch	29 Sep 2005 23:04:28 -0000	1.4
@@ -1,3 +1,5 @@
+https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=165590
+
 --- linux-2.6.12/drivers/acpi/processor_idle.c~	2005-08-01 00:26:50.000000000 -0400
 +++ linux-2.6.12/drivers/acpi/processor_idle.c	2005-08-01 00:27:53.000000000 -0400
 @@ -101,6 +101,9 @@ static struct dmi_system_id __initdata p
@@ -10,3 +12,15 @@
  	{ set_max_cstate, "Medion 41700", {
  	  DMI_MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"),
  	  DMI_MATCH(DMI_BIOS_VERSION,"R01-A1J") }, (void*)1},
+--- linux-2.6.12/drivers/acpi/processor_idle.c~	2005-08-26 00:51:18.000000000 -0400
++++ linux-2.6.12/drivers/acpi/processor_idle.c	2005-08-26 00:51:59.000000000 -0400
+@@ -103,6 +103,9 @@ static struct dmi_system_id __initdata p
+ 	{ set_max_cstate, "IBM ThinkPad R40e", {
+ 	  DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
+ 	  DMI_MATCH(DMI_BIOS_VERSION,"1SET61WW") }, (void*)1},
++	{ set_max_cstate, "IBM ThinkPad R40e", {
++	  DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
++	  DMI_MATCH(DMI_BIOS_VERSION,"1SET68WW") }, (void*)1},
+ 	{ set_max_cstate, "Medion 41700", {
+ 	  DMI_MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"),
+ 	  DMI_MATCH(DMI_BIOS_VERSION,"R01-A1J") }, (void*)1},

linux-2.6.11-devmem.patch:
 arch/i386/mm/init.c          |   19 +++++
 arch/ia64/mm/init.c          |    7 ++
 arch/ppc64/mm/init.c         |   12 +++
 arch/s390/mm/init.c          |    5 +
 arch/x86_64/mm/init.c        |   20 +++++
 drivers/char/mem.c           |  146 ++++++-------------------------------------
 fs/proc/kcore.c              |    2 
 include/asm-alpha/page.h     |    1 
 include/asm-arm/page.h       |    2 
 include/asm-arm26/page.h     |    2 
 include/asm-cris/page.h      |    2 
 include/asm-h8300/page.h     |    2 
 include/asm-i386/page.h      |    4 +
 include/asm-ia64/page.h      |    2 
 include/asm-m68k/page.h      |    2 
 include/asm-m68knommu/page.h |    2 
 include/asm-mips/page.h      |    2 
 include/asm-parisc/page.h    |    2 
 include/asm-ppc/page.h       |    2 
 include/asm-ppc64/page.h     |    2 
 include/asm-s390/page.h      |    2 
 include/asm-sh/page.h        |    2 
 include/asm-sh64/page.h      |    2 
 include/asm-sparc/page.h     |    2 
 include/asm-sparc64/page.h   |    2 
 include/asm-um/page.h        |    1 
 include/asm-v850/page.h      |    2 
 include/asm-x86_64/page.h    |    4 +
 28 files changed, 130 insertions(+), 125 deletions(-)

Index: linux-2.6.11-devmem.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.11-devmem.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6.11-devmem.patch	6 Apr 2005 20:44:18 -0000	1.3
+++ linux-2.6.11-devmem.patch	29 Sep 2005 23:04:28 -0000	1.4
@@ -125,8 +125,8 @@
 +	cursor = from >> PAGE_SHIFT;
 +	while ((cursor << PAGE_SHIFT) < to) {
 +		if (!devmem_is_allowed(cursor)) {
-+			printk ("Program %s tried to read /dev/mem between %lx->%lx."
-+					"We stopped at %lx\n", current->comm, from, to, cursor);
++			printk ("Program %s tried to read /dev/mem between %lx->%lx.\n",
++					current->comm, from, to);
 +			return 0;
 +		}
 +		cursor++;
@@ -290,7 +290,7 @@
 - 	return virtr + wrote;
 -}
 -
- #if defined(CONFIG_ISA) || !defined(__mc68000__)
+ #if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI))
  static ssize_t read_port(struct file * file, char __user * buf,
  			 size_t count, loff_t *ppos)
 @@ -717,7 +617,6 @@ static struct file_operations mem_fops =

linux-2.6.11-execshield-vdso.patch:
 linux-2.6.11/arch/i386/kernel/sysenter.c   |   71 +++++++++++++++++------------
 linux-2.6.11/fs/binfmt_elf.c               |   17 ++----
 linux-2.6.11/include/asm-i386/elf.h        |    7 ++
 linux-2.6.11/include/asm-i386/page.h       |    5 ++
 linux-2.6.11/include/linux/mm.h            |    5 ++
 linux-2.6.11/mm/mmap.c                     |   39 +++++++++++++++
 linux-2.6.12/arch/i386/kernel/cpu/common.c |    7 ++
 linux/fs/proc/task_mmu.c                   |   15 ++++--
 8 files changed, 123 insertions(+), 43 deletions(-)

Index: linux-2.6.11-execshield-vdso.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.11-execshield-vdso.patch,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- linux-2.6.11-execshield-vdso.patch	25 May 2005 23:26:28 -0000	1.9
+++ linux-2.6.11-execshield-vdso.patch	29 Sep 2005 23:04:28 -0000	1.10
@@ -1,18 +1,3 @@
---- linux-2.6.8/arch/i386/kernel/cpu/common.c~	2004-10-12 17:21:42.945526432 -0400
-+++ linux-2.6.8/arch/i386/kernel/cpu/common.c	2004-10-12 17:24:30.941987088 -0400
-@@ -384,6 +377,12 @@ void __init identify_cpu(struct cpuinfo_
- 	if (disable_pse)
- 		clear_bit(X86_FEATURE_PSE, c->x86_capability);
- 
-+	/* hack: disable SEP for non-NX cpus; SEP breaks Execshield. */
-+	#ifdef CONFIG_HIGHMEM64G
-+	if (!test_bit(X86_FEATURE_NX, c->x86_capability)) 
-+	#endif
-+		clear_bit(X86_FEATURE_SEP, c->x86_capability);
-+
- 	/* If the model name is still unset, do table lookup. */
- 	if ( !c->x86_model_id[0] ) {
- 		char *p;
 --- linux-2.6.11/arch/i386/kernel/sysenter.c
 +++ linux-2.6.11/arch/i386/kernel/sysenter.c
 @@ -48,13 +48,6 @@ static int __init sysenter_setup(void)
@@ -263,14 +248,55 @@
  	compute_creds(bprm);
  	current->flags &= ~PF_FORKNOEXEC;
  	create_elf_tables(bprm, &loc->elf_ex, (interpreter_type == INTERPRETER_AOUT),
---- linux-2.6.11/arch/i386/kernel/sysenter.c~	2005-05-25 19:25:10.000000000 -0400
-+++ linux-2.6.11/arch/i386/kernel/sysenter.c	2005-05-25 19:25:41.000000000 -0400
-@@ -51,7 +51,7 @@ static int __init sysenter_setup(void)
- 
- 	sysenter_page = virt_to_page(page);
+--- linux-2.6.12/arch/i386/kernel/cpu/common.c~	2005-06-21 14:36:07.000000000 -0400
++++ linux-2.6.12/arch/i386/kernel/cpu/common.c	2005-06-21 14:39:50.000000000 -0400
+@@ -403,6 +403,13 @@ void __devinit identify_cpu(struct cpuin
+ 	if (disable_pse)
+ 		clear_bit(X86_FEATURE_PSE, c->x86_capability);
  
--	if (!boot_cpu_has(X86_FEATURE_SEP)) {
-+	if (1 || (!boot_cpu_has(X86_FEATURE_SEP))) {
- 		memcpy(page,
- 		       &vsyscall_int80_start,
- 		       &vsyscall_int80_end - &vsyscall_int80_start);
++	if (exec_shield != 0) {
++#ifdef CONFIG_HIGHMEM64G   /* NX implies PAE */
++		if (!test_bit(X86_FEATURE_NX, c->x86_capability))
++#endif
++		clear_bit(X86_FEATURE_SEP, c->x86_capability);
++	}
++
+ 	/* If the model name is still unset, do table lookup. */
+ 	if ( !c->x86_model_id[0] ) {
+ 		char *p;
+
+btw., the patch below (against 1381-FC4) adds a vdso marker to
+/proc/*/maps even if the vDSO is randomized a'ka Roland's patch.
+
+	Ingo
+
+Index: linux/fs/proc/task_mmu.c
+===================================================================
+--- linux.orig/fs/proc/task_mmu.c
++++ linux/fs/proc/task_mmu.c
+@@ -142,14 +142,19 @@ static int show_map(struct seq_file *m, 
+ 			if (map->vm_end == mm->brk) {
+ 				pad_len_spaces(m, len);
+ 				seq_puts(m, "[heap]");
+-			} else {
+-				if (map->vm_start <= mm->start_stack &&
++			} else if (map->vm_start <= mm->start_stack &&
+ 					map->vm_end >= mm->start_stack) {
+ 
+-					pad_len_spaces(m, len);
+-					seq_puts(m, "[stack]");
+-				}
++				pad_len_spaces(m, len);
++				seq_puts(m, "[stack]");
++			}
++#ifdef __i386__
++			else if (map->vm_start ==
++					(unsigned long)mm->context.vdso) {
++				pad_len_spaces(m, len);
++				seq_puts(m, "[vdso]");
+ 			}
++#endif
+ 		} else {
+ 			pad_len_spaces(m, len);
+ 			seq_puts(m, "[vdso]");
+

linux-2.6.11-execshield.patch:
 linux-2.6.11/arch/i386/kernel/traps.c          |  111 ++++++++++++++++-------
 linux-2.6.11/arch/x86_64/mm/fault.c            |    2 
 linux-2.6.12/include/asm-x86_64/processor.h    |    5 +
 linux-2.6.12/mm/mmap.c                         |    2 
 linux-810/arch/i386/kernel/asm-offsets.c       |    1 
 linux-810/arch/i386/kernel/entry.S             |    8 +
 linux-810/arch/i386/kernel/process.c           |   59 ++++++++++++
 linux-810/arch/i386/kernel/signal.c            |    4 
 linux-810/arch/i386/kernel/smp.c               |    3 
 linux-810/arch/i386/kernel/sysenter.c          |   55 +++++++++++
 linux-810/arch/i386/kernel/traps.c             |   48 +++++++++-
 linux-810/arch/i386/kernel/vsyscall-sysenter.S |    6 -
 linux-810/arch/i386/kernel/vsyscall.lds.S      |    4 
 linux-810/arch/i386/mm/init.c                  |    6 +
 linux-810/arch/i386/mm/mmap.c                  |    6 -
 linux-810/arch/ia64/ia32/binfmt_elf32.c        |    2 
 linux-810/arch/x86_64/ia32/ia32_binfmt.c       |    2 
 linux-810/arch/x86_64/kernel/process.c         |    7 -
 linux-810/arch/x86_64/mm/Makefile              |    2 
 linux-810/arch/x86_64/mm/mmap.c                |   95 +++++++++++++++++++
 linux-810/drivers/char/random.c                |    7 +
 linux-810/fs/binfmt_elf.c                      |  120 ++++++++++++++++++++-----
 linux-810/fs/proc/array.c                      |    8 +
 linux-810/fs/proc/base.c                       |    4 
 linux-810/fs/proc/task_mmu.c                   |   25 ++++-
 linux-810/include/asm-i386/desc.h              |   14 ++
 linux-810/include/asm-i386/elf.h               |   42 +++++---
 linux-810/include/asm-i386/mmu.h               |    6 +
 linux-810/include/asm-i386/pgalloc.h           |    1 
 linux-810/include/asm-i386/processor.h         |    8 +
 linux-810/include/asm-i386/thread_info.h       |    1 
 linux-810/include/asm-ia64/pgalloc.h           |    4 
 linux-810/include/asm-ppc/pgalloc.h            |    5 +
 linux-810/include/asm-ppc64/pgalloc.h          |    5 +
 linux-810/include/asm-s390/pgalloc.h           |    4 
 linux-810/include/asm-sparc/pgalloc.h          |    4 
 linux-810/include/asm-sparc64/pgalloc.h        |    4 
 linux-810/include/asm-x86_64/pgalloc.h         |    7 +
 linux-810/include/linux/mm.h                   |    9 +
 linux-810/include/linux/resource.h             |    5 -
 linux-810/include/linux/sched.h                |    9 +
 linux-810/include/linux/sysctl.h               |    3 
 linux-810/kernel/signal.c                      |   38 +++++++
 linux-810/kernel/sysctl.c                      |   39 ++++++++
 linux-810/mm/fremap.c                          |   10 +-
 linux-810/mm/mmap.c                            |  105 ++++++++++++++++++++-
 linux-810/mm/mprotect.c                        |    5 -
 linux-810/mm/mremap.c                          |    4 
 48 files changed, 801 insertions(+), 123 deletions(-)

Index: linux-2.6.11-execshield.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.11-execshield.patch,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- linux-2.6.11-execshield.patch	23 Jun 2005 23:58:55 -0000	1.10
+++ linux-2.6.11-execshield.patch	29 Sep 2005 23:04:28 -0000	1.11
@@ -152,13 +152,13 @@
  
  #include <asm/cpufeature.h>
  #include <asm/msr.h>
-@@ -41,11 +42,20 @@ void enable_sep_cpu(void *info)
+@@ -41,11 +42,20 @@ void enable_sep_cpu(void)
  extern const char vsyscall_int80_start, vsyscall_int80_end;
  extern const char vsyscall_sysenter_start, vsyscall_sysenter_end;
  
 +struct page *sysenter_page;
 +
- static int __init sysenter_setup(void)
+ int __init sysenter_setup(void)
  {
  	void *page = (void *)get_zeroed_page(GFP_ATOMIC);
  
@@ -174,10 +174,8 @@
  
  	if (!boot_cpu_has(X86_FEATURE_SEP)) {
  		memcpy(page,
-@@ -63,3 +73,46 @@ static int __init sysenter_setup(void)
+@@ -63,1 +73,44 @@ static int __init sysenter_setup(void)
  }
- 
- __initcall(sysenter_setup);
 +
 +extern void SYSENTER_RETURN_OFFSET;
 +
@@ -1187,23 +1185,20 @@
  #define pmd_populate_kernel(mm, pmd, pte) \
  		set_pmd(pmd, __pmd(_PAGE_TABLE | __pa(pte)))
  #define pud_populate(mm, pud, pmd) \
---- linux-2.6.11/include/asm-x86_64/processor.h~	2005-05-18 14:02:29.000000000 -0400
-+++ linux-2.6.11/include/asm-x86_64/processor.h	2005-05-18 14:03:14.000000000 -0400
-@@ -160,7 +160,13 @@ static inline void clear_in_cr4 (unsigne
- /*
-  * User space process size. 47bits minus one guard page.
+--- linux-2.6.12/include/asm-x86_64/processor.h~	2005-06-22 14:01:10.000000000 -0400
++++ linux-2.6.12/include/asm-x86_64/processor.h	2005-06-22 14:02:14.000000000 -0400
+@@ -162,6 +162,11 @@ static inline void clear_in_cr4 (unsigne
   */
--#define TASK_SIZE	(0x800000000000UL - 4096)
-+#define TASK_SIZE_64	(0x800000000000UL - 4096)
-+#define TASK_SIZE	(test_thread_flag(TIF_IA32) ? IA32_PAGE_OFFSET : TASK_SIZE_64)
-+
+ #define TASK_SIZE64	(0x800000000000UL - 4096)
+ 
 +#define __HAVE_ARCH_ALIGN_STACK
 +extern unsigned long arch_align_stack(unsigned long sp);
 +
 +#define HAVE_ARCH_PICK_MMAP_LAYOUT
- 
++
  /* This decides where the kernel will search for a free chunk of vm
   * space during mmap's.
+  */
 diff -urNp --exclude-from=/home/davej/.exclude linux-801/include/linux/mm.h linux-810/include/linux/mm.h
 --- linux-801/include/linux/mm.h
 +++ linux-810/include/linux/mm.h
@@ -1262,16 +1257,16 @@
  extern unsigned long
  arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
  			  unsigned long len, unsigned long pgoff,
-@@ -212,6 +218,9 @@ struct mm_struct {
+@@ -224,6 +224,9 @@ struct mm_struct {
  	unsigned long (*get_unmapped_area) (struct file *filp,
  				unsigned long addr, unsigned long len,
  				unsigned long pgoff, unsigned long flags);
 +	unsigned long (*get_unmapped_exec_area) (struct file *filp,
 +				unsigned long addr, unsigned long len,
 +				unsigned long pgoff, unsigned long flags);
- 	void (*unmap_area) (struct vm_area_struct *area);
- 	unsigned long mmap_base;		/* base of mmap area */
- 	unsigned long free_area_cache;		/* first hole */
+ 	void (*unmap_area) (struct mm_struct *mm, unsigned long addr);
+         unsigned long mmap_base;		/* base of mmap area */
+         unsigned long cached_hole_size;         /* if non-zero, the largest hole below free_area_cache */
 diff -urNp --exclude-from=/home/davej/.exclude linux-801/include/linux/sysctl.h linux-810/include/linux/sysctl.h
 --- linux-801/include/linux/sysctl.h
 +++ linux-810/include/linux/sysctl.h
@@ -1667,20 +1662,11 @@
  	instr = (unsigned char *)convert_rip_to_linear(current, regs);
  	max_instr = instr + 15;
  
--	if ((regs->cs & 3) != 0 && instr >= (unsigned char *)TASK_SIZE)
-+	if ((regs->cs & 3) != 0 && instr >= (unsigned char *)TASK_SIZE_64)
+-	if (user_mode(regs) && instr >= (unsigned char *)TASK_SIZE)
++	if (user_mode(regs) && instr >= (unsigned char *)TASK_SIZE64)
  		return 0;
  
  	while (scan_more && instr < max_instr) { 
-@@ -350,7 +350,7 @@ asmlinkage void do_page_fault(struct pt_
- 	 * (error_code & 4) == 0, and that the fault was not a
- 	 * protection error (error_code & 1) == 0.
- 	 */
--	if (unlikely(address >= TASK_SIZE)) {
-+	if (unlikely(address >= TASK_SIZE_64)) {
- 		if (!(error_code & 5) &&
- 		      ((address >= VMALLOC_START && address < VMALLOC_END) ||
- 		       (address >= MODULES_VADDR && address < MODULES_END))) {
 --- linux-2.6.11/arch/i386/kernel/traps.c.~1~
 +++ linux-2.6.11/arch/i386/kernel/traps.c
 @@ -457,17 +457,89 @@ DO_ERROR(10, SIGSEGV, "invalid TSS", inv
@@ -1821,9 +1807,9 @@
  	if (print_fatal_signals) {
  		printk("#GPF(%ld[seg:%lx]) at %08lx, CPU#%d.\n", error_code, error_code/8, regs->eip, smp_processor_id());
  		printk(" exec_limit: %08lx, user_cs: %08lx/%08lx.\n", current->mm->context.exec_limit, current->mm->context.user_cs.a, current->mm->context.user_cs.b);
---- 1/mm/mmap.c.orig
-+++ 2/mm/mmap.c
-@@ -1303,7 +1303,7 @@ unsigned long arch_get_unmapped_exec_are
+--- linux-2.6.12/mm/mmap.c~	2005-07-07 15:20:55.000000000 -0400
++++ linux-2.6.12/mm/mmap.c	2005-07-07 15:21:21.000000000 -0400
+@@ -1422,7 +1422,7 @@ unsigned long arch_get_unmapped_exec_are
  			 * as much as possible:
  			 */
  			if (addr >= 0x01000000) {
@@ -1832,4 +1818,3 @@
  				vma = find_vma(mm, tmp);
  				if (TASK_SIZE - len >= tmp &&
  				    (!vma || tmp + len <= vma->vm_start))
-

linux-2.6.12-serial-of.patch:
 arch/ppc64/kernel/setup.c   |  180 ----------------------------------------
 drivers/serial/8250_of.c    |  197 ++++++++++++++++++++++++++++++++++++++++++++
 drivers/serial/Kconfig      |    5 +
 drivers/serial/Makefile     |    1 
 include/asm-ppc/pc_serial.h |   16 ---
 5 files changed, 204 insertions(+), 195 deletions(-)

Index: linux-2.6.12-serial-of.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.12-serial-of.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6.12-serial-of.patch	18 Aug 2005 07:54:08 -0000	1.2
+++ linux-2.6.12-serial-of.patch	29 Sep 2005 23:04:40 -0000	1.3
@@ -1,15 +1,15 @@
---- linux-2.6.12/drivers/serial/Makefile.sof	2005-08-18 08:24:49.000000000 +0100
-+++ linux-2.6.12/drivers/serial/Makefile	2005-08-18 08:25:33.000000000 +0100
-@@ -17,6 +17,7 @@ obj-$(CONFIG_SERIAL_8250) += 8250.o $(se
- obj-$(CONFIG_SERIAL_8250_CS) += serial_cs.o
- obj-$(CONFIG_SERIAL_8250_ACORN) += 8250_acorn.o
- obj-$(CONFIG_SERIAL_8250_CONSOLE) += 8250_early.o
+--- linux-2.6.12/drivers/serial/Makefile~	2005-08-11 13:51:50.000000000 +0100
++++ linux-2.6.12/drivers/serial/Makefile	2005-08-15 21:08:49.000000000 +0100
+@@ -22,6 +22,7 @@ obj-$(CONFIG_SERIAL_8250_ACCENT) += 8250
+ obj-$(CONFIG_SERIAL_8250_BOCA) += 8250_boca.o
+ obj-$(CONFIG_SERIAL_8250_HUB6) += 8250_hub6.o
+ obj-$(CONFIG_SERIAL_8250_MCA) += 8250_mca.o
 +obj-$(CONFIG_SERIAL_8250_OF) += 8250_of.o
  obj-$(CONFIG_SERIAL_AMBA_PL010) += amba-pl010.o
  obj-$(CONFIG_SERIAL_AMBA_PL011) += amba-pl011.o
  obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o
---- linux-2.6.12/drivers/serial/8250_of.c.sof	2005-08-18 08:24:49.000000000 +0100
-+++ linux-2.6.12/drivers/serial/8250_of.c	2005-08-18 08:25:02.000000000 +0100
+--- linux-2.6.12/drivers/serial/8250_of.c~	2005-08-15 21:14:27.000000000 +0100
++++ linux-2.6.12/drivers/serial/8250_of.c	2005-08-15 21:20:59.000000000 +0100
 @@ -0,0 +1,197 @@
 +#include <linux/kernel.h>
 +#include <linux/serial.h>
@@ -208,8 +208,8 @@
 +	return platform_device_register(&serial_device);
 +}
 +arch_initcall(serial_dev_init);
---- linux-2.6.12/drivers/serial/Kconfig.sof	2005-08-18 08:24:49.000000000 +0100
-+++ linux-2.6.12/drivers/serial/Kconfig	2005-08-18 08:25:02.000000000 +0100
+--- linux-2.6.12/drivers/serial/Kconfig~	2005-08-11 13:51:50.000000000 +0100
++++ linux-2.6.12/drivers/serial/Kconfig	2005-08-15 21:13:41.000000000 +0100
 @@ -77,6 +77,11 @@ config SERIAL_8250_CS
  
  	  If unsure, say N.
@@ -222,9 +222,9 @@
  config SERIAL_8250_ACPI
  	bool "8250/16550 device discovery via ACPI namespace"
  	default y if IA64
---- linux-2.6.12/arch/ppc64/kernel/setup.c.sof	2005-08-18 08:24:49.000000000 +0100
-+++ linux-2.6.12/arch/ppc64/kernel/setup.c	2005-08-18 08:25:02.000000000 +0100
-@@ -1124,186 +1124,6 @@ void setup_default_decr(void)
+--- linux-2.6.12/arch/ppc64/kernel/setup.c~	2005-08-11 13:52:04.000000000 +0100
++++ linux-2.6.12/arch/ppc64/kernel/setup.c	2005-08-15 20:27:25.000000000 +0100
+@@ -1147,186 +1147,6 @@ void __init setup_default_decr(void)
  	lpaca->next_jiffy_update_tb = get_tb() + tb_ticks_per_jiffy;
  }
  
@@ -411,9 +411,9 @@
  
  int check_legacy_ioport(unsigned long base_port)
  {
---- linux-2.6.12/include/asm-ppc/pc_serial.h.sof	2005-08-18 08:24:49.000000000 +0100
-+++ linux-2.6.12/include/asm-ppc/pc_serial.h	2005-08-18 08:26:43.000000000 +0100
-@@ -26,102 +26,4 @@
+--- linux-2.6.12/include/asm-ppc/pc_serial.h~	2005-08-15 21:19:32.000000000 +0100
++++ linux-2.6.12/include/asm-ppc/pc_serial.h	2005-08-15 21:20:24.000000000 +0100
+@@ -26,18 +26,4 @@
  #define RS_TABLE_SIZE  4
  #endif
  
@@ -426,94 +426,10 @@
 -#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
 -#endif
 -
--#ifdef CONFIG_SERIAL_MANY_PORTS
--#define FOURPORT_FLAGS ASYNC_FOURPORT
--#define ACCENT_FLAGS 0
--#define BOCA_FLAGS 0
--#define HUB6_FLAGS 0
--#endif
--	
--/*
-- * The following define the access methods for the HUB6 card. All
-- * access is through two ports for all 24 possible chips. The card is
-- * selected through the high 2 bits, the port on that card with the
-- * "middle" 3 bits, and the register on that port with the bottom
-- * 3 bits.
-- *
-- * While the access port and interrupt is configurable, the default
-- * port locations are 0x302 for the port control register, and 0x303
-- * for the data read/write register. Normally, the interrupt is at irq3
-- * but can be anything from 3 to 7 inclusive. Note that using 3 will
-- * require disabling com2.
-- */
--
--#define C_P(card,port) (((card)<<6|(port)<<3) + 1)
--
--#define STD_SERIAL_PORT_DEFNS			\
++#define SERIAL_PORT_DFNS /* */
+-#define SERIAL_PORT_DFNS			\
 -	/* UART CLK   PORT IRQ     FLAGS        */			\
 -	{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS },	/* ttyS0 */	\
 -	{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS },	/* ttyS1 */	\
 -	{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS },	/* ttyS2 */	\
 -	{ 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS },	/* ttyS3 */
--
--
--#ifdef CONFIG_SERIAL_MANY_PORTS
--#define EXTRA_SERIAL_PORT_DEFNS			\
--	{ 0, BASE_BAUD, 0x1A0, 9, FOURPORT_FLAGS }, 	/* ttyS4 */	\
--	{ 0, BASE_BAUD, 0x1A8, 9, FOURPORT_FLAGS },	/* ttyS5 */	\
--	{ 0, BASE_BAUD, 0x1B0, 9, FOURPORT_FLAGS },	/* ttyS6 */	\
--	{ 0, BASE_BAUD, 0x1B8, 9, FOURPORT_FLAGS },	/* ttyS7 */	\
--	{ 0, BASE_BAUD, 0x2A0, 5, FOURPORT_FLAGS },	/* ttyS8 */	\
--	{ 0, BASE_BAUD, 0x2A8, 5, FOURPORT_FLAGS },	/* ttyS9 */	\
--	{ 0, BASE_BAUD, 0x2B0, 5, FOURPORT_FLAGS },	/* ttyS10 */	\
--	{ 0, BASE_BAUD, 0x2B8, 5, FOURPORT_FLAGS },	/* ttyS11 */	\
--	{ 0, BASE_BAUD, 0x330, 4, ACCENT_FLAGS },	/* ttyS12 */	\
--	{ 0, BASE_BAUD, 0x338, 4, ACCENT_FLAGS },	/* ttyS13 */	\
--	{ 0, BASE_BAUD, 0x000, 0, 0 },	/* ttyS14 (spare) */		\
--	{ 0, BASE_BAUD, 0x000, 0, 0 },	/* ttyS15 (spare) */		\
--	{ 0, BASE_BAUD, 0x100, 12, BOCA_FLAGS },	/* ttyS16 */	\
--	{ 0, BASE_BAUD, 0x108, 12, BOCA_FLAGS },	/* ttyS17 */	\
--	{ 0, BASE_BAUD, 0x110, 12, BOCA_FLAGS },	/* ttyS18 */	\
--	{ 0, BASE_BAUD, 0x118, 12, BOCA_FLAGS },	/* ttyS19 */	\
--	{ 0, BASE_BAUD, 0x120, 12, BOCA_FLAGS },	/* ttyS20 */	\
--	{ 0, BASE_BAUD, 0x128, 12, BOCA_FLAGS },	/* ttyS21 */	\
--	{ 0, BASE_BAUD, 0x130, 12, BOCA_FLAGS },	/* ttyS22 */	\
--	{ 0, BASE_BAUD, 0x138, 12, BOCA_FLAGS },	/* ttyS23 */	\
--	{ 0, BASE_BAUD, 0x140, 12, BOCA_FLAGS },	/* ttyS24 */	\
--	{ 0, BASE_BAUD, 0x148, 12, BOCA_FLAGS },	/* ttyS25 */	\
--	{ 0, BASE_BAUD, 0x150, 12, BOCA_FLAGS },	/* ttyS26 */	\
--	{ 0, BASE_BAUD, 0x158, 12, BOCA_FLAGS },	/* ttyS27 */	\
--	{ 0, BASE_BAUD, 0x160, 12, BOCA_FLAGS },	/* ttyS28 */	\
--	{ 0, BASE_BAUD, 0x168, 12, BOCA_FLAGS },	/* ttyS29 */	\
--	{ 0, BASE_BAUD, 0x170, 12, BOCA_FLAGS },	/* ttyS30 */	\
--	{ 0, BASE_BAUD, 0x178, 12, BOCA_FLAGS },	/* ttyS31 */
--#else
--#define EXTRA_SERIAL_PORT_DEFNS
--#endif
--
--/* You can have up to four HUB6's in the system, but I've only
-- * included two cards here for a total of twelve ports.
-- */
--#if (defined(CONFIG_HUB6) && defined(CONFIG_SERIAL_MANY_PORTS))
--#define HUB6_SERIAL_PORT_DFNS		\
--	{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,0) },  /* ttyS32 */	\
--	{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,1) },  /* ttyS33 */	\
--	{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,2) },  /* ttyS34 */	\
--	{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,3) },  /* ttyS35 */	\
--	{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,4) },  /* ttyS36 */	\
--	{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,5) },  /* ttyS37 */	\
--	{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,0) },  /* ttyS38 */	\
--	{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,1) },  /* ttyS39 */	\
--	{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,2) },  /* ttyS40 */	\
--	{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,3) },  /* ttyS41 */	\
--	{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,4) },  /* ttyS42 */	\
--	{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,5) },  /* ttyS43 */
--#else
--#define HUB6_SERIAL_PORT_DFNS
--#endif
--
--#define SERIAL_PORT_DFNS		\
--	STD_SERIAL_PORT_DEFNS		\
--	EXTRA_SERIAL_PORT_DEFNS		\
--	HUB6_SERIAL_PORT_DFNS
-+#define SERIAL_PORT_DFNS /* */

linux-2.6.12-xen-additional.patch:
 linux-2.6.10/include/asm-x86_64/hw_irq.h                |    3 
 linux-2.6.10/include/asm-x86_64/irq.h                   |    5 
 linux-2.6.10/include/asm-x86_64/posix_types.h           |    4 
 linux-2.6.11-rcu/kernel/rcupdate.c                      |    5 
 linux-2.6.12.new/arch/i386/mm/init.c                    |    2 
 linux-2.6.12.new/arch/i386/mm/pageattr.c                |    2 
 linux-2.6.12.new/arch/i386/mm/pgtable.c                 |   40 ++++++-
 linux-2.6.12.new/include/asm-i386/pgtable-2level-defs.h |    2 
 linux-2.6.12.new/include/asm-i386/pgtable-3level-defs.h |    2 
 linux-2.6.12.post/arch/i386/Kconfig                     |   13 ++
 linux-2.6.12.post/arch/i386/kernel/Makefile             |    1 
 linux-2.6.12.post/arch/i386/kernel/smpalts.c            |   85 ++++++++++++++++
 linux-2.6.12.post/arch/i386/kernel/smpboot.c            |    5 
 linux-2.6.12.post/arch/i386/kernel/vmlinux.lds.S        |    7 +
 linux-2.6.12.post/include/asm-i386/atomic.h             |    7 -
 linux-2.6.12.post/include/asm-i386/bitops.h             |   19 +--
 linux-2.6.12.post/include/asm-i386/rwsem.h              |   17 +--
 linux-2.6.12.post/include/asm-i386/smp_alt.h            |   32 ++++++
 linux-2.6.12.post/include/asm-i386/spinlock.h           |   41 ++++++-
 linux-2.6.12.post/include/asm-i386/system.h             |   58 +++++++++-
 20 files changed, 297 insertions(+), 53 deletions(-)

Index: linux-2.6.12-xen-additional.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.12-xen-additional.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6.12-xen-additional.patch	15 Aug 2005 18:46:01 -0000	1.1
+++ linux-2.6.12-xen-additional.patch	29 Sep 2005 23:04:40 -0000	1.2
@@ -1,14 +1,3 @@
-diff -ur linux-2.6.11/net/ipv4/netfilter/ip_conntrack_proto_udp.c linux-2.6.11-csum/net/ipv4/netfilter/ip_conntrack_proto_udp.c
---- linux-2.6.11/net/ipv4/netfilter/ip_conntrack_proto_udp.c	2005-05-27 11:47:48 +01:00
-+++ linux-2.6.11-csum/net/ipv4/netfilter/ip_conntrack_proto_udp.c	2005-05-27 11:48:07 +01:00
-@@ -120,6 +120,7 @@
- 	 * and moreover root might send raw packets.
- 	 * FIXME: Source route IP option packets --RR */
- 	if (hooknum == NF_IP_PRE_ROUTING
-+	    && skb->ip_summed != CHECKSUM_UNNECESSARY
- 	    && csum_tcpudp_magic(iph->saddr, iph->daddr, udplen, IPPROTO_UDP,
- 			         skb->ip_summed == CHECKSUM_HW ? skb->csum
- 			      	 : skb_checksum(skb, iph->ihl*4, udplen, 0))) {
 diff -urNpP linux-2.6.12/arch/i386/mm/init.c linux-2.6.12.new/arch/i386/mm/init.c
 --- linux-2.6.12/arch/i386/mm/init.c	2005-06-17 20:48:29.000000000 +0100
 +++ linux-2.6.12.new/arch/i386/mm/init.c	2005-07-11 16:28:09.778165582 +0100
@@ -285,18 +274,6 @@
 diff -Naur linux-2.6.12/arch/i386/kernel/smpboot.c linux-2.6.12.post/arch/i386/kernel/smpboot.c
 --- linux-2.6.12/arch/i386/kernel/smpboot.c	2005-06-17 15:48:29.000000000 -0400
 +++ linux-2.6.12.post/arch/i386/kernel/smpboot.c	2005-07-25 05:51:21.000000000 -0400
-@@ -1001,6 +1001,11 @@
- 		if (max_cpus <= cpucount+1)
- 			continue;
- 
-+#ifdef CONFIG_SMP_ALTERNATIVES
-+		if (kicked == 1)
-+			prepare_for_smp();
-+#endif
-+
- 		if (do_boot_cpu(apicid))
- 			printk("CPU #%d not responding - cannot use it.\n",
- 								apicid);
 @@ -1130,6 +1135,11 @@
  		return -EIO;
  	}

linux-2.6.12-xen.patch:
 arch/xen/Kconfig                                      |  203 +
 arch/xen/Kconfig.debug                                |  129 
 arch/xen/Kconfig.drivers                              |   94 
 arch/xen/Makefile                                     |   91 
 arch/xen/boot/Makefile                                |    8 
 arch/xen/configs/xen0_defconfig_x86_32                | 1278 +++++++
 arch/xen/configs/xen0_defconfig_x86_64                | 1183 +++++++
 arch/xen/configs/xenU_defconfig_x86_32                |  564 +++
 arch/xen/configs/xenU_defconfig_x86_64                |  939 +++++
 arch/xen/configs/xen_defconfig_x86_32                 | 2998 ++++++++++++++++++
 arch/xen/configs/xen_defconfig_x86_64                 | 2425 ++++++++++++++
 arch/xen/i386/Kconfig                                 |  960 +++++
 arch/xen/i386/Makefile                                |  108 
 arch/xen/i386/kernel/Makefile                         |  102 
 arch/xen/i386/kernel/acpi/Makefile                    |   13 
 arch/xen/i386/kernel/acpi/boot.c                      |  912 +++++
 arch/xen/i386/kernel/apic.c                           |   83 
 arch/xen/i386/kernel/cpu/Makefile                     |   31 
 arch/xen/i386/kernel/cpu/common.c                     |  650 +++
 arch/xen/i386/kernel/cpu/mtrr/Makefile                |   16 
 arch/xen/i386/kernel/cpu/mtrr/main.c                  |  165 
 arch/xen/i386/kernel/entry.S                          |  753 ++++
 arch/xen/i386/kernel/head.S                           |  198 +
 arch/xen/i386/kernel/i386_ksyms.c                     |  190 +
 arch/xen/i386/kernel/init_task.c                      |   49 
 arch/xen/i386/kernel/io_apic.c                        | 2609 +++++++++++++++
 arch/xen/i386/kernel/ioport.c                         |  125 
 arch/xen/i386/kernel/irq.c                            |  299 +
 arch/xen/i386/kernel/ldt.c                            |  276 +
 arch/xen/i386/kernel/microcode.c                      |  163 
 arch/xen/i386/kernel/mpparse.c                        | 1126 ++++++
 arch/xen/i386/kernel/pci-dma.c                        |  315 +
 arch/xen/i386/kernel/process.c                        |  798 ++++
 arch/xen/i386/kernel/quirks.c                         |   49 
 arch/xen/i386/kernel/setup.c                          | 1712 ++++++++++
 arch/xen/i386/kernel/signal.c                         |  665 +++
 arch/xen/i386/kernel/smp.c                            |  624 +++
 arch/xen/i386/kernel/smpboot.c                        | 1640 +++++++++
 arch/xen/i386/kernel/swiotlb.c                        |  660 +++
 arch/xen/i386/kernel/time.c                           |  928 +++++
 arch/xen/i386/kernel/traps.c                          | 1026 ++++++
 arch/xen/i386/kernel/vsyscall.S                       |   15 
 arch/xen/i386/mach-default/Makefile                   |   12 
 arch/xen/i386/mm/Makefile                             |   24 
 arch/xen/i386/mm/fault.c                              |  598 +++
 arch/xen/i386/mm/highmem.c                            |   99 
 arch/xen/i386/mm/hypervisor.c                         |  416 ++
 arch/xen/i386/mm/init.c                               |  766 ++++
 arch/xen/i386/mm/ioremap.c                            |  424 ++
 arch/xen/i386/mm/pgtable.c                            |  558 +++
 arch/xen/i386/pci/Makefile                            |   33 
 arch/xen/i386/pci/irq.c                               | 1120 ++++++
 arch/xen/kernel/Makefile                              |   18 
 arch/xen/kernel/ctrl_if.c                             |  569 +++
 arch/xen/kernel/devmem.c                              |  158 
 arch/xen/kernel/evtchn.c                              |  803 ++++
 arch/xen/kernel/fixup.c                               |   87 
 arch/xen/kernel/gnttab.c                              |  396 ++
 arch/xen/kernel/reboot.c                              |  491 ++
 arch/xen/kernel/skbuff.c                              |   97 
 arch/xen/kernel/smp.c                                 |   16 
 arch/xen/kernel/xen_proc.c                            |   18 
 arch/xen/x86_64/Kconfig                               |  480 ++
 arch/xen/x86_64/Makefile                              |   93 
 arch/xen/x86_64/ia32/Makefile                         |   60 
 arch/xen/x86_64/ia32/ia32entry.S                      |  629 +++
 arch/xen/x86_64/ia32/syscall32.c                      |  149 
 arch/xen/x86_64/ia32/vsyscall-int80.S                 |   57 
 arch/xen/x86_64/kernel/Makefile                       |   71 
 arch/xen/x86_64/kernel/acpi/Makefile                  |   20 
 arch/xen/x86_64/kernel/apic.c                         |  201 +
 arch/xen/x86_64/kernel/e820.c                         |  609 +++
 arch/xen/x86_64/kernel/early_printk.c                 |  242 +
 arch/xen/x86_64/kernel/entry.S                        | 1060 ++++++
 arch/xen/x86_64/kernel/genapic.c                      |  123 
 arch/xen/x86_64/kernel/genapic_xen.c                  |  167 +
 arch/xen/x86_64/kernel/head.S                         |  272 +
 arch/xen/x86_64/kernel/head64.c                       |  127 
 arch/xen/x86_64/kernel/io_apic.c                      | 1991 +++++++++++
 arch/xen/x86_64/kernel/ioport.c                       |   57 
 arch/xen/x86_64/kernel/irq.c                          |  110 
 arch/xen/x86_64/kernel/ldt.c                          |  263 +
 arch/xen/x86_64/kernel/mpparse.c                      |  963 +++++
 arch/xen/x86_64/kernel/pci-nommu.c                    |   98 
 arch/xen/x86_64/kernel/process.c                      |  751 ++++
 arch/xen/x86_64/kernel/setup.c                        | 1467 ++++++++
 arch/xen/x86_64/kernel/setup64.c                      |  356 ++
 arch/xen/x86_64/kernel/signal.c                       |  493 ++
 arch/xen/x86_64/kernel/smp.c                          |  498 ++
 arch/xen/x86_64/kernel/smpboot.c                      | 1295 +++++++
 arch/xen/x86_64/kernel/traps.c                        |  982 +++++
 arch/xen/x86_64/kernel/vsyscall.c                     |  241 +
 arch/xen/x86_64/kernel/x8664_ksyms.c                  |  211 +
 arch/xen/x86_64/kernel/xen_entry.S                    |   41 
 arch/xen/x86_64/mm/Makefile                           |   31 
 arch/xen/x86_64/mm/fault.c                            |  589 +++
 arch/xen/x86_64/mm/init.c                             | 1026 ++++++
 arch/xen/x86_64/mm/pageattr.c                         |  254 +
 arch/xen/x86_64/pci/Makefile                          |   39 
 arch/xen/x86_64/pci/Makefile-BUS                      |   22 
 drivers/Makefile                                      |    1 
 drivers/acpi/tables.c                                 |    8 
 drivers/char/mem.c                                    |   12 
 drivers/char/tty_io.c                                 |    4 
 drivers/xen/Makefile                                  |   14 
 drivers/xen/balloon/Makefile                          |    2 
 drivers/xen/balloon/balloon.c                         |  499 ++
 drivers/xen/blkback/Makefile                          |    2 
 drivers/xen/blkback/blkback.c                         |  615 +++
 drivers/xen/blkback/common.h                          |  122 
 drivers/xen/blkback/interface.c                       |  162 
 drivers/xen/blkback/vbd.c                             |  224 +
 drivers/xen/blkback/xenbus.c                          |  303 +
 drivers/xen/blkfront/Kconfig                          |    6 
 drivers/xen/blkfront/Makefile                         |    3 
 drivers/xen/blkfront/blkfront.c                       | 1396 ++++++++
 drivers/xen/blkfront/block.h                          |  129 
 drivers/xen/blkfront/vbd.c                            |  367 ++
 drivers/xen/blktap/Makefile                           |    3 
 drivers/xen/blktap/blktap.c                           |   90 
 drivers/xen/blktap/blktap.h                           |  230 +
 drivers/xen/blktap/blktap_controlmsg.c                |  573 +++
 drivers/xen/blktap/blktap_datapath.c                  |  449 ++
 drivers/xen/blktap/blktap_userdev.c                   |  801 ++++
 drivers/xen/console/Makefile                          |    2 
 drivers/xen/console/console.c                         |  811 ++++
 drivers/xen/evtchn/Makefile                           |    2 
 drivers/xen/evtchn/evtchn.c                           |  430 ++
 drivers/xen/netback/Makefile                          |    2 
 drivers/xen/netback/common.h                          |  123 
 drivers/xen/netback/control.c                         |   58 
 drivers/xen/netback/interface.c                       |  465 ++
 drivers/xen/netback/loopback.c                        |  164 
 drivers/xen/netback/netback.c                         | 1005 ++++++
 drivers/xen/netfront/Kconfig                          |    6 
 drivers/xen/netfront/Makefile                         |    2 
 drivers/xen/netfront/netfront.c                       | 1658 +++++++++
 drivers/xen/privcmd/Makefile                          |    2 
 drivers/xen/privcmd/privcmd.c                         |  262 +
 drivers/xen/usbback/common.h                          |   84 
 drivers/xen/usbback/control.c                         |   61 
 drivers/xen/usbback/interface.c                       |  242 +
 drivers/xen/usbback/usbback.c                         | 1068 ++++++
 drivers/xen/usbfront/usbfront.c                       | 1736 ++++++++++
 drivers/xen/usbfront/xhci.h                           |  182 +
 drivers/xen/xenbus/Makefile                           |    6 
 drivers/xen/xenbus/xenbus_comms.c                     |  233 +
 drivers/xen/xenbus/xenbus_comms.h                     |   41 
 drivers/xen/xenbus/xenbus_probe.c                     |  648 +++
 drivers/xen/xenbus/xenbus_xs.c                        |  563 +++
 drivers/xen/xenbus/xenstored.h                        |   89 
 include/asm-generic/pgtable.h                         |   10 
 include/asm-xen/asm-i386/agp.h                        |   37 
 include/asm-xen/asm-i386/bug.h                        |   16 
 include/asm-xen/asm-i386/desc.h                       |  146 
 include/asm-xen/asm-i386/dma-mapping.h                |  156 
 include/asm-xen/asm-i386/fixmap.h                     |  168 +
 include/asm-xen/asm-i386/floppy.h                     |  147 
 include/asm-xen/asm-i386/highmem.h                    |   80 
 include/asm-xen/asm-i386/hw_irq.h                     |   71 
 include/asm-xen/asm-i386/hypercall.h                  |  579 +++
 include/asm-xen/asm-i386/io.h                         |  436 ++
 include/asm-xen/asm-i386/kmap_types.h                 |   32 
 include/asm-xen/asm-i386/mach-xen/irq_vectors.h       |  127 
 include/asm-xen/asm-i386/mach-xen/setup_arch_post.h   |   51 
 include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h    |    5 
 include/asm-xen/asm-i386/mach-xen/smpboot_hooks.h     |   55 
 include/asm-xen/asm-i386/mmu.h                        |   26 
 include/asm-xen/asm-i386/mmu_context.h                |  108 
 include/asm-xen/asm-i386/page.h                       |  252 +
 include/asm-xen/asm-i386/param.h                      |   23 
 include/asm-xen/asm-i386/pci.h                        |  114 
 include/asm-xen/asm-i386/pgalloc.h                    |   61 
 include/asm-xen/asm-i386/pgtable-2level-defs.h        |   21 
 include/asm-xen/asm-i386/pgtable-2level.h             |  126 
 include/asm-xen/asm-i386/pgtable-3level-defs.h        |   25 
 include/asm-xen/asm-i386/pgtable-3level.h             |  207 +
 include/asm-xen/asm-i386/pgtable.h                    |  493 ++
 include/asm-xen/asm-i386/processor.h                  |  703 ++++
 include/asm-xen/asm-i386/ptrace.h                     |   69 
 include/asm-xen/asm-i386/scatterlist.h                |   22 
 include/asm-xen/asm-i386/segment.h                    |   99 
 include/asm-xen/asm-i386/setup.h                      |   66 
 include/asm-xen/asm-i386/spinlock.h                   |  250 +
 include/asm-xen/asm-i386/swiotlb.h                    |   42 
 include/asm-xen/asm-i386/synch_bitops.h               |  140 
 include/asm-xen/asm-i386/system.h                     |  579 +++
 include/asm-xen/asm-i386/tlbflush.h                   |  102 
 include/asm-xen/asm-i386/vga.h                        |   20 
 include/asm-xen/asm-x86_64/arch_hooks.h               |   27 
 include/asm-xen/asm-x86_64/bootsetup.h                |   42 
 include/asm-xen/asm-x86_64/desc.h                     |  240 +
 include/asm-xen/asm-x86_64/dma-mapping.h              |    1 
 include/asm-xen/asm-x86_64/fixmap.h                   |  114 
 include/asm-xen/asm-x86_64/floppy.h                   |  204 +
 include/asm-xen/asm-x86_64/hw_irq.h                   |  138 
 include/asm-xen/asm-x86_64/hypercall.h                |  522 +++
 include/asm-xen/asm-x86_64/io.h                       |  374 ++
 include/asm-xen/asm-x86_64/irq.h                      |   36 
 include/asm-xen/asm-x86_64/mach-xen/io_ports.h        |   30 
 include/asm-xen/asm-x86_64/mach-xen/irq_vectors.h     |  125 
 include/asm-xen/asm-x86_64/mach-xen/mach_time.h       |  122 
 include/asm-xen/asm-x86_64/mach-xen/mach_timer.h      |   48 
 include/asm-xen/asm-x86_64/mach-xen/setup_arch_post.h |   47 
 include/asm-xen/asm-x86_64/mach-xen/setup_arch_pre.h  |    5 
 include/asm-xen/asm-x86_64/mach-xen/smpboot_hooks.h   |   55 
 include/asm-xen/asm-x86_64/mmu_context.h              |  126 
 include/asm-xen/asm-x86_64/page.h                     |  236 +
 include/asm-xen/asm-x86_64/param.h                    |   22 
 include/asm-xen/asm-x86_64/pci.h                      |  150 
 include/asm-xen/asm-x86_64/pgalloc.h                  |  172 +
 include/asm-xen/asm-x86_64/pgtable.h                  |  576 +++
 include/asm-xen/asm-x86_64/processor.h                |  486 ++
 include/asm-xen/asm-x86_64/ptrace.h                   |  124 
 include/asm-xen/asm-x86_64/segment.h                  |   46 
 include/asm-xen/asm-x86_64/smp.h                      |  139 
 include/asm-xen/asm-x86_64/system.h                   |  405 ++
 include/asm-xen/asm-x86_64/timer.h                    |   64 
 include/asm-xen/asm-x86_64/tlbflush.h                 |   97 
 include/asm-xen/asm-x86_64/vga.h                      |   20 
 include/asm-xen/asm-x86_64/xor.h                      |  328 +
 include/asm-xen/balloon.h                             |   60 
 include/asm-xen/ctrl_if.h                             |  160 
 include/asm-xen/evtchn.h                              |  135 
 include/asm-xen/foreign_page.h                        |   30 
 include/asm-xen/gnttab.h                              |   72 
 include/asm-xen/hypervisor.h                          |  195 +
 include/asm-xen/linux-public/privcmd.h                |   90 
 include/asm-xen/linux-public/suspend.h                |   43 
 include/asm-xen/queues.h                              |   81 
 include/asm-xen/synch_bitops.h                        |    2 
 include/asm-xen/xen-public/COPYING                    |   28 
 include/asm-xen/xen-public/acm.h                      |  172 +
 include/asm-xen/xen-public/acm_ops.h                  |   66 
 include/asm-xen/xen-public/arch-ia64.h                |  299 +
 include/asm-xen/xen-public/arch-x86_32.h              |  137 
 include/asm-xen/xen-public/arch-x86_64.h              |  195 +
 include/asm-xen/xen-public/dom0_ops.h                 |  414 ++
 include/asm-xen/xen-public/event_channel.h            |  191 +
 include/asm-xen/xen-public/grant_table.h              |  284 +
 include/asm-xen/xen-public/io/blkif.h                 |   71 
 include/asm-xen/xen-public/io/domain_controller.h     |  787 ++++
 include/asm-xen/xen-public/io/ioreq.h                 |   70 
 include/asm-xen/xen-public/io/netif.h                 |  108 
 include/asm-xen/xen-public/io/ring.h                  |  199 +
 include/asm-xen/xen-public/io/usbif.h                 |   66 
 include/asm-xen/xen-public/io/vmx_vlapic.h            |   57 
 include/asm-xen/xen-public/physdev.h                  |   70 
 include/asm-xen/xen-public/sched_ctl.h                |   58 
 include/asm-xen/xen-public/trace.h                    |   73 
 include/asm-xen/xen-public/version.h                  |   31 
 include/asm-xen/xen-public/vmx_assist.h               |  101 
 include/asm-xen/xen-public/xen.h                      |  469 ++
 include/asm-xen/xen_proc.h                            |   13 
 include/asm-xen/xenbus.h                              |  141 
 include/linux/gfp.h                                   |    6 
 include/linux/highmem.h                               |    2 
 include/linux/irq.h                                   |    1 
 include/linux/mm.h                                    |    7 
 include/linux/skbuff.h                                |    2 
 kernel/irq/manage.c                                   |   83 
 mm/highmem.c                                          |    9 
 mm/memory.c                                           |  118 
 mm/mmap.c                                             |    4 
 mm/page_alloc.c                                       |    6 
 net/core/dev.c                                        |   35 
 net/core/skbuff.c                                     |    2 
 267 files changed, 81974 insertions(+), 27 deletions(-)

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.3 -r 1.4 linux-2.6.12-xen.patch
Index: linux-2.6.12-xen.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.12-xen.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6.12-xen.patch	8 Sep 2005 19:10:35 -0000	1.3
+++ linux-2.6.12-xen.patch	29 Sep 2005 23:04:40 -0000	1.4
@@ -1,1490 +1,778 @@
-diff -Nurp ref-linux-2.6.12/arch/xen/boot/Makefile tmp-linux-2.6.12-xen.patch/arch/xen/boot/Makefile
---- ref-linux-2.6.12/arch/xen/boot/Makefile	1969-12-31 19:00:00.000000000 -0500
-+++ tmp-linux-2.6.12-xen.patch/arch/xen/boot/Makefile	2005-09-07 07:19:53.000000000 -0400
-@@ -0,0 +1,8 @@
+diff -Nurp ref-linux-2.6.12/arch/xen/Kconfig tmp-linux-2.6.12-xen.patch/arch/xen/Kconfig
+--- ref-linux-2.6.12/arch/xen/Kconfig	1969-12-31 19:00:00.000000000 -0500
++++ tmp-linux-2.6.12-xen.patch/arch/xen/Kconfig	2005-08-23 13:12:36.000000000 -0400
+@@ -0,0 +1,203 @@
++#
++# For a description of the syntax of this configuration file,
++# see Documentation/kbuild/kconfig-language.txt.
++#
 +
-+OBJCOPYFLAGS := -g --strip-unneeded
++mainmenu "Linux Kernel Configuration"
 +
-+vmlinuz: vmlinux-stripped FORCE
-+	$(call if_changed,gzip)
++config XEN
++	bool
++	default y
++	help
++	  This is the Linux Xen port.
 +
-+vmlinux-stripped: vmlinux FORCE
-+	$(call if_changed,objcopy)
-diff -Nurp ref-linux-2.6.12/arch/xen/configs/xen0_defconfig_x86_32 tmp-linux-2.6.12-xen.patch/arch/xen/configs/xen0_defconfig_x86_32
---- ref-linux-2.6.12/arch/xen/configs/xen0_defconfig_x86_32	1969-12-31 19:00:00.000000000 -0500
-+++ tmp-linux-2.6.12-xen.patch/arch/xen/configs/xen0_defconfig_x86_32	2005-09-07 07:19:53.000000000 -0400
-@@ -0,0 +1,1279 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.12-xen0
-+# Wed Aug  3 09:54:56 2005
-+#
-+CONFIG_XEN=y
-+CONFIG_ARCH_XEN=y
-+CONFIG_NO_IDLE_HZ=y
++config ARCH_XEN
++	bool
++	default y
 +
-+#
-+# XEN
-+#
-+CONFIG_XEN_PRIVILEGED_GUEST=y
-+CONFIG_XEN_PHYSDEV_ACCESS=y
-+CONFIG_XEN_BLKDEV_BACKEND=y
-+# CONFIG_XEN_BLKDEV_TAP_BE is not set
-+CONFIG_XEN_NETDEV_BACKEND=y
-+# CONFIG_XEN_TPMDEV_FRONTEND is not set
-+# CONFIG_XEN_TPMDEV_BACKEND is not set
-+CONFIG_XEN_BLKDEV_FRONTEND=y
-+CONFIG_XEN_NETDEV_FRONTEND=y
-+CONFIG_XEN_NETDEV_GRANT=y
-+# CONFIG_XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER is not set
-+# CONFIG_XEN_BLKDEV_TAP is not set
-+# CONFIG_XEN_SHADOW_MODE is not set
-+CONFIG_XEN_SCRUB_PAGES=y
-+CONFIG_XEN_X86=y
-+# CONFIG_XEN_X86_64 is not set
-+CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
 +
-+#
-+# Code maturity level options
-+#
-+CONFIG_EXPERIMENTAL=y
-+# CONFIG_CLEAN_COMPILE is not set
-+CONFIG_BROKEN=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_LOCK_KERNEL=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
++config NO_IDLE_HZ
++	bool
++	default y
 +
-+#
-+# General setup
-+#
-+CONFIG_LOCALVERSION=""
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+CONFIG_SYSCTL=y
-+# CONFIG_AUDIT is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_KOBJECT_UEVENT=y
-+# CONFIG_IKCONFIG is not set
-+# CONFIG_EMBEDDED is not set
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_EPOLL=y
-+CONFIG_SHMEM=y
-+CONFIG_CC_ALIGN_FUNCTIONS=0
-+CONFIG_CC_ALIGN_LABELS=0
-+CONFIG_CC_ALIGN_LOOPS=0
-+CONFIG_CC_ALIGN_JUMPS=0
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
 +
-+#
-+# Loadable module support
-+#
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+CONFIG_OBSOLETE_MODPARM=y
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
++menu "XEN"
 +
-+#
-+# X86 Processor Configuration
-+#
-+CONFIG_XENARCH="i386"
-+CONFIG_X86=y
-+CONFIG_MMU=y
-+CONFIG_UID16=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_GENERIC_IOMAP=y
-+# CONFIG_M386 is not set
-+# CONFIG_M486 is not set
-+# CONFIG_M586 is not set
-+# CONFIG_M586TSC is not set
-+# CONFIG_M586MMX is not set
-+CONFIG_M686=y
-+# CONFIG_MPENTIUMII is not set
-+# CONFIG_MPENTIUMIII is not set
-+# CONFIG_MPENTIUMM is not set
-+# CONFIG_MPENTIUM4 is not set
-+# CONFIG_MK6 is not set
-+# CONFIG_MK7 is not set
-+# CONFIG_MK8 is not set
-+# CONFIG_MCRUSOE is not set
-+# CONFIG_MEFFICEON is not set
-+# CONFIG_MWINCHIPC6 is not set
-+# CONFIG_MWINCHIP2 is not set
-+# CONFIG_MWINCHIP3D is not set
-+# CONFIG_MGEODEGX1 is not set
-+# CONFIG_MCYRIXIII is not set
-+# CONFIG_MVIAC3_2 is not set
-+# CONFIG_X86_GENERIC is not set
-+CONFIG_X86_CMPXCHG=y
-+CONFIG_X86_XADD=y
-+CONFIG_X86_L1_CACHE_SHIFT=5
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_X86_PPRO_FENCE=y
-+CONFIG_X86_WP_WORKS_OK=y
-+CONFIG_X86_INVLPG=y
-+CONFIG_X86_BSWAP=y
-+CONFIG_X86_POPAD_OK=y
-+CONFIG_X86_GOOD_APIC=y
-+CONFIG_X86_USE_PPRO_CHECKSUM=y
-+# CONFIG_HPET_TIMER is not set
-+# CONFIG_HPET_EMULATE_RTC is not set
-+# CONFIG_SMP is not set
-+CONFIG_PREEMPT=y
-+CONFIG_PREEMPT_BKL=y
-+# CONFIG_X86_REBOOTFIXUPS is not set
-+CONFIG_MICROCODE=y
-+CONFIG_X86_CPUID=y
-+CONFIG_SWIOTLB=y
++config XEN_PRIVILEGED_GUEST
++	bool "Privileged Guest (domain 0)"
++	default n
++	select XEN_PHYSDEV_ACCESS
++	help
++	  Support for privileged operation (domain 0)
 +
-+#
-+# Firmware Drivers
-+#
-+# CONFIG_EDD is not set
-+# CONFIG_NOHIGHMEM is not set
-+CONFIG_HIGHMEM4G=y
-+# CONFIG_HIGHMEM64G is not set
-+CONFIG_HIGHMEM=y
-+CONFIG_MTRR=y
-+CONFIG_HAVE_DEC_LOCK=y
-+# CONFIG_REGPARM is not set
-+CONFIG_X86_LOCAL_APIC=y
-+CONFIG_X86_IO_APIC=y
++config XEN_PHYSDEV_ACCESS
[...114433 lines suppressed...]
++++ tmp-linux-2.6.12-xen.patch/include/linux/mm.h	2005-08-23 13:12:36.000000000 -0400
 @@ -161,6 +161,7 @@ extern unsigned int kobjsize(const void 
  #define VM_HUGETLB	0x00400000	/* Huge TLB Page VM */
  #define VM_NONLINEAR	0x00800000	/* Is non-linear (remap_file_pages) */
@@ -83949,7 +82893,7 @@
  #else
 diff -Nurp ref-linux-2.6.12/include/linux/skbuff.h tmp-linux-2.6.12-xen.patch/include/linux/skbuff.h
 --- ref-linux-2.6.12/include/linux/skbuff.h	2005-06-17 15:48:29.000000000 -0400
-+++ tmp-linux-2.6.12-xen.patch/include/linux/skbuff.h	2005-09-07 07:19:53.000000000 -0400
++++ tmp-linux-2.6.12-xen.patch/include/linux/skbuff.h	2005-07-11 13:20:28.000000000 -0400
 @@ -177,6 +177,8 @@ struct skb_shared_info {
   *	@local_df: allow local fragmentation
   *	@cloned: Head may be cloned (check refcnt to be sure)
@@ -83959,55 +82903,9 @@
   *	@pkt_type: Packet class
   *	@ip_summed: Driver fed us an IP checksum
   *	@priority: Packet queueing priority
-@@ -252,6 +254,8 @@ struct sk_buff {
- 	unsigned char		local_df,
- 				cloned:1,
- 				nohdr:1,
-+				proto_csum_valid:1,
-+				proto_csum_blank:1,
- 				pkt_type,
- 				ip_summed;
- 	__u32			priority;
-diff -Nurp ref-linux-2.6.12/include/linux/tpmfe.h tmp-linux-2.6.12-xen.patch/include/linux/tpmfe.h
---- ref-linux-2.6.12/include/linux/tpmfe.h	1969-12-31 19:00:00.000000000 -0500
-+++ tmp-linux-2.6.12-xen.patch/include/linux/tpmfe.h	2005-09-07 07:19:53.000000000 -0400
-@@ -0,0 +1,33 @@
-+#ifndef TPM_FE_H
-+#define TPM_FE_H
-+
-+struct tpmfe_device {
-+	/*
-+	 * Let upper layer receive data from front-end
-+	 */
-+	int (*receive)(const u8 *buffer, size_t count, const void *ptr);
-+	/*
-+	 * Indicate the status of the front-end to the upper
-+	 * layer.
-+	 */
-+	void (*status)(unsigned int flags);
-+
-+	/*
-+	 * This field indicates the maximum size the driver can
-+	 * transfer in one chunk. It is filled out by the front-end
-+	 * driver and should be propagated to the generic tpm driver
-+	 * for allocation of buffers.
-+	 */
-+	unsigned int max_tx_size;
-+};
-+
-+enum {
-+	TPMFE_STATUS_DISCONNECTED = 0x0,
-+	TPMFE_STATUS_CONNECTED = 0x1
-+};
-+
-+int tpm_fe_send(const u8 * buf, size_t count, void *ptr);
-+int tpm_fe_register_receiver(struct tpmfe_device *);
-+void tpm_fe_unregister_receiver(void);
-+
-+#endif
 diff -Nurp ref-linux-2.6.12/kernel/irq/manage.c tmp-linux-2.6.12-xen.patch/kernel/irq/manage.c
 --- ref-linux-2.6.12/kernel/irq/manage.c	2005-06-17 15:48:29.000000000 -0400
-+++ tmp-linux-2.6.12-xen.patch/kernel/irq/manage.c	2005-09-07 07:19:53.000000000 -0400
++++ tmp-linux-2.6.12-xen.patch/kernel/irq/manage.c	2005-08-23 13:12:36.000000000 -0400
 @@ -146,9 +146,14 @@ int can_request_irq(unsigned int irq, un
  	return !action;
  }
@@ -84134,7 +83032,7 @@
  EXPORT_SYMBOL(free_irq);
 diff -Nurp ref-linux-2.6.12/mm/highmem.c tmp-linux-2.6.12-xen.patch/mm/highmem.c
 --- ref-linux-2.6.12/mm/highmem.c	2005-06-17 15:48:29.000000000 -0400
-+++ tmp-linux-2.6.12-xen.patch/mm/highmem.c	2005-09-07 07:19:53.000000000 -0400
++++ tmp-linux-2.6.12-xen.patch/mm/highmem.c	2005-08-23 13:12:36.000000000 -0400
 @@ -148,6 +148,15 @@ start:
  	return vaddr;
  }
@@ -84153,8 +83051,8 @@
  	unsigned long vaddr;
 diff -Nurp ref-linux-2.6.12/mm/memory.c tmp-linux-2.6.12-xen.patch/mm/memory.c
 --- ref-linux-2.6.12/mm/memory.c	2005-06-17 15:48:29.000000000 -0400
-+++ tmp-linux-2.6.12-xen.patch/mm/memory.c	2005-09-07 07:19:53.000000000 -0400
-@@ -940,6 +940,24 @@ int get_user_pages(struct task_struct *t
++++ tmp-linux-2.6.12-xen.patch/mm/memory.c	2005-08-23 13:12:36.000000000 -0400
+@@ -940,6 +940,26 @@ int get_user_pages(struct task_struct *t
  			continue;
  		}
  
@@ -84172,14 +83070,16 @@
 +                        i++;
 +                        start += PAGE_SIZE;
 +                        len--;
++printk(KERN_ALERT "HIT  0x%lx\n", start);
 +                        continue;
 +                    } 
++else printk(KERN_ALERT "MISS 0x%lx\n", start);
 +                }
 +
  		if (!vma || (vma->vm_flags & VM_IO)
  				|| !(flags & vma->vm_flags))
  			return i ? : -EFAULT;
-@@ -1195,6 +1213,104 @@ int remap_pfn_range(struct vm_area_struc
+@@ -1195,6 +1215,104 @@ int remap_pfn_range(struct vm_area_struc
  }
  EXPORT_SYMBOL(remap_pfn_range);
  
@@ -84284,51 +83184,9 @@
  /*
   * Do pte_mkwrite, but only if the vma says VM_WRITE.  We do this when
   * servicing faults for write access.  In the normal case, do always want
-@@ -1249,20 +1365,15 @@ static int do_wp_page(struct mm_struct *
- 	struct page *old_page, *new_page;
- 	unsigned long pfn = pte_pfn(pte);
- 	pte_t entry;
-+	struct page invalid_page;
- 
- 	if (unlikely(!pfn_valid(pfn))) {
--		/*
--		 * This should really halt the system so it can be debugged or
--		 * at least the kernel stops what it's doing before it corrupts
--		 * data, but for the moment just pretend this is OOM.
--		 */
--		pte_unmap(page_table);
--		printk(KERN_ERR "do_wp_page: bogus page at address %08lx\n",
--				address);
--		spin_unlock(&mm->page_table_lock);
--		return VM_FAULT_OOM;
-+		/* This can happen with /dev/mem (PROT_WRITE, MAP_PRIVATE). */
-+		invalid_page.flags = (1<<PG_reserved) | (1<<PG_locked);
-+		old_page = &invalid_page;
-+	} else {
-+		old_page = pfn_to_page(pfn);
- 	}
--	old_page = pfn_to_page(pfn);
- 
- 	if (!TestSetPageLocked(old_page)) {
- 		int reuse = can_share_swap_page(old_page);
-@@ -1298,7 +1409,13 @@ static int do_wp_page(struct mm_struct *
- 		new_page = alloc_page_vma(GFP_HIGHUSER, vma, address);
- 		if (!new_page)
- 			goto no_new_page;
--		copy_user_highpage(new_page, old_page, address);
-+		if (old_page == &invalid_page) {
-+			char *vto = kmap_atomic(new_page, KM_USER1);
-+			copy_page(vto, (void *)(address & PAGE_MASK));
-+			kunmap_atomic(vto, KM_USER1);
-+		} else {
-+			copy_user_highpage(new_page, old_page, address);
-+		}
- 	}
- 	/*
- 	 * Re-check the pte - we dropped the lock
 diff -Nurp ref-linux-2.6.12/mm/mmap.c tmp-linux-2.6.12-xen.patch/mm/mmap.c
 --- ref-linux-2.6.12/mm/mmap.c	2005-06-17 15:48:29.000000000 -0400
-+++ tmp-linux-2.6.12-xen.patch/mm/mmap.c	2005-09-07 07:19:53.000000000 -0400
++++ tmp-linux-2.6.12-xen.patch/mm/mmap.c	2005-07-11 13:20:28.000000000 -0400
 @@ -1904,6 +1904,10 @@ void exit_mmap(struct mm_struct *mm)
  	unsigned long nr_accounted = 0;
  	unsigned long end;
@@ -84342,7 +83200,7 @@
  	spin_lock(&mm->page_table_lock);
 diff -Nurp ref-linux-2.6.12/mm/page_alloc.c tmp-linux-2.6.12-xen.patch/mm/page_alloc.c
 --- ref-linux-2.6.12/mm/page_alloc.c	2005-06-17 15:48:29.000000000 -0400
-+++ tmp-linux-2.6.12-xen.patch/mm/page_alloc.c	2005-09-07 07:19:53.000000000 -0400
++++ tmp-linux-2.6.12-xen.patch/mm/page_alloc.c	2005-07-11 13:20:28.000000000 -0400
 @@ -368,7 +368,8 @@ void __free_pages_ok(struct page *page, 
  	LIST_HEAD(list);
  	int i;
@@ -84365,19 +83223,7 @@
  	inc_page_state(pgfree);
 diff -Nurp ref-linux-2.6.12/net/core/dev.c tmp-linux-2.6.12-xen.patch/net/core/dev.c
 --- ref-linux-2.6.12/net/core/dev.c	2005-06-17 15:48:29.000000000 -0400
-+++ tmp-linux-2.6.12-xen.patch/net/core/dev.c	2005-09-07 07:19:53.000000000 -0400
-@@ -115,6 +115,11 @@
- #endif	/* CONFIG_NET_RADIO */
- #include <asm/current.h>
- 
-+#include <net/ip.h>
-+#include <linux/tcp.h>
-+#include <linux/udp.h>
-+
-+
- /* This define, if set, will randomly drop a packet when congestion
-  * is more than moderate.  It helps fairness in the multi-interface
-  * case when one of them is a hog, but it kills performance for the
++++ tmp-linux-2.6.12-xen.patch/net/core/dev.c	2005-07-11 13:20:28.000000000 -0400
 @@ -1261,6 +1266,30 @@ int dev_queue_xmit(struct sk_buff *skb)
  	    __skb_linearize(skb, GFP_ATOMIC))
  		goto out_kfree_skb;
@@ -84429,7 +83275,7 @@
  			if (pt_prev) 
 diff -Nurp ref-linux-2.6.12/net/core/skbuff.c tmp-linux-2.6.12-xen.patch/net/core/skbuff.c
 --- ref-linux-2.6.12/net/core/skbuff.c	2005-06-17 15:48:29.000000000 -0400
-+++ tmp-linux-2.6.12-xen.patch/net/core/skbuff.c	2005-09-07 07:19:53.000000000 -0400
++++ tmp-linux-2.6.12-xen.patch/net/core/skbuff.c	2005-07-11 13:20:28.000000000 -0400
 @@ -353,6 +353,8 @@ struct sk_buff *skb_clone(struct sk_buff
  	C(local_df);
  	n->cloned = 1;

linux-2.6.12rc3-xen-vdso-note.patch:
 linux-2.6.11/include/asm-xen/asm-i386/page.h   |    2 +
 linux-2.6.12/arch/xen/i386/kernel/Makefile     |    6 ++--
 linux-2.6.12/arch/xen/i386/kernel/ldt.c        |    3 +-
 linux-2.6/arch/xen/i386/kernel/vsyscall-note.S |   32 +++++++++++++++++++++++++
 4 files changed, 39 insertions(+), 4 deletions(-)

Index: linux-2.6.12rc3-xen-vdso-note.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.12rc3-xen-vdso-note.patch,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- linux-2.6.12rc3-xen-vdso-note.patch	9 Sep 2005 02:55:31 -0000	1.10
+++ linux-2.6.12rc3-xen-vdso-note.patch	29 Sep 2005 23:05:03 -0000	1.11
@@ -31,7 +31,7 @@
 +#define NOTE_KERNELCAP_END ASM_ELF_NOTE_END
 +
 +NOTE_KERNELCAP_BEGIN(1, 1)
-+NOTE_KERNELCAP(1, "nosegneg")  /* Change 1 back to 0 when glibc is fixed! */
++NOTE_KERNELCAP(0, "nosegneg")
 +NOTE_KERNELCAP_END
 --- linux-2.6.11/include/asm-xen/asm-i386/page.h.vdso	2005-04-27 10:33:03.000000000 -0400
 +++ linux-2.6.11/include/asm-xen/asm-i386/page.h	2005-04-27 10:33:19.000000000 -0400
@@ -57,3 +57,28 @@
  	old_mm = current->mm;
  	if (old_mm && old_mm->context.size > 0) {
  		down(&old_mm->context.sem);
+--- linux-2.6.12/arch/xen/i386/kernel/Makefile.vdso	2005-08-22 13:38:36.000000000 -0400
++++ linux-2.6.12/arch/xen/i386/kernel/Makefile	2005-08-22 13:42:00.000000000 -0400
+@@ -69,7 +69,7 @@
+ 
+ $(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so: \
+ $(obj)/vsyscall-%.so: $(src)/vsyscall.lds \
+-		      $(obj)/vsyscall-%.o FORCE
++		      $(obj)/vsyscall-%.o $(obj)/vsyscall-note.o FORCE
+ 	$(call if_changed,syscall)
+ 
+ # We also create a special relocatable object that should mirror the symbol
+@@ -81,11 +81,11 @@
+ 
+ SYSCFLAGS_vsyscall-syms.o = -r
+ $(obj)/vsyscall-syms.o: $(src)/vsyscall.lds \
+-			$(obj)/vsyscall-sysenter.o FORCE
++			$(obj)/vsyscall-sysenter.o $(obj)/vsyscall-note.o FORCE
+ 	$(call if_changed,syscall)
+ 
+ c-link	:=
+-s-link	:= vsyscall-int80.o vsyscall-sysenter.o vsyscall-sigreturn.o vsyscall.lds.o syscall_table.o
++s-link	:= vsyscall-int80.o vsyscall-sysenter.o vsyscall-sigreturn.o vsyscall.lds.o vsyscall-note.o syscall_table.o
+ 
+ $(patsubst %.o,$(obj)/%.c,$(c-obj-y) $(c-obj-m) $(c-link)) $(patsubst %.o,$(obj)/%.S,$(s-obj-y) $(s-link)):
+ 	@ln -fsn $(srctree)/arch/i386/kernel/$(notdir $@) $@

linux-2.6.7-modsign-crypto.patch:
 crypto/Kconfig         |   19 +++++++++++++++++++
 crypto/Makefile        |    3 +++
 crypto/api.c           |   16 ++++++++++++++--
 include/linux/crypto.h |    4 ++++
 4 files changed, 40 insertions(+), 2 deletions(-)

Index: linux-2.6.7-modsign-crypto.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.7-modsign-crypto.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6.7-modsign-crypto.patch	22 Mar 2005 07:00:21 -0000	1.4
+++ linux-2.6.7-modsign-crypto.patch	29 Sep 2005 23:05:03 -0000	1.5
@@ -11,6 +11,7 @@
  {
  	struct crypto_tfm *tfm = NULL;
  	struct crypto_alg *alg;
+ 	unsigned int tfm_size;
  
 -	alg = crypto_alg_mod_lookup(name);
 +	if (!nomodload) {
@@ -22,7 +23,6 @@
 +
  	if (alg == NULL)
  		goto out;
- 	
 @@ -153,6 +160,11 @@ out:
  	return tfm;
  }

linux-2.6.8-execshield-xen.patch:
 linux-2.6.10/arch/xen/i386/kernel/cpu/common.c    |    6 +
 linux-2.6.10/arch/xen/i386/kernel/entry.S         |    7 +
 linux-2.6.10/arch/xen/i386/kernel/process.c       |   53 +++++++++++++
 linux-2.6.10/arch/xen/i386/kernel/smp.c           |    3 
 linux-2.6.10/arch/xen/i386/mm/init.c              |    3 
 linux-2.6.10/fs/binfmt_elf.c                      |    1 
 linux-2.6.10/include/asm-xen/asm-i386/desc.h      |   10 ++
 linux-2.6.10/include/asm-xen/asm-i386/pgalloc.h   |    5 +
 linux-2.6.10/include/asm-xen/asm-i386/processor.h |    6 +
 linux-2.6.12/arch/xen/i386/kernel/signal.c        |    4 -
 linux-2.6.12/arch/xen/i386/kernel/traps.c         |   87 +++++++++++++++++++++-
 linux-2.6.12/include/asm-xen/asm-i386/mmu.h       |    6 +
 12 files changed, 187 insertions(+), 4 deletions(-)

Index: linux-2.6.8-execshield-xen.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.8-execshield-xen.patch,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- linux-2.6.8-execshield-xen.patch	8 Sep 2005 19:10:39 -0000	1.13
+++ linux-2.6.8-execshield-xen.patch	29 Sep 2005 23:05:03 -0000	1.14
@@ -107,11 +107,14 @@
  	if (unlikely(next->debugreg[7])) {
 --- linux-2.6.12/arch/xen/i386/kernel/traps.c.exec	2005-08-15 10:30:00.000000000 -0400
 +++ linux-2.6.12/arch/xen/i386/kernel/traps.c	2005-08-15 10:39:26.000000000 -0400
-@@ -449,10 +449,88 @@ DO_ERROR(10, SIGSEGV, "invalid TSS", inv
+@@ -449,13 +449,91 @@ DO_ERROR(10, SIGSEGV, "invalid TSS", inv
+ DO_ERROR(11, SIGBUS,  "segment not present", segment_not_present)
+ DO_ERROR(12, SIGBUS,  "stack segment", stack_segment)
+ DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
+-DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0)
  #ifdef CONFIG_X86_MCE
  DO_ERROR(18, SIGBUS, "machine check", machine_check)
  #endif
--DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0)
  
 +/*
 + * lazy-check for CS validity on exec-shield binaries:

linux-2.6.9-ieee80211.patch:
 linux-2.6.12/drivers/net/wireless/ieee80211/ieee80211.h           |    5 
 linux-2.6.9/drivers/net/wireless/Makefile                         |    1 
 linux-2.6.9/drivers/net/wireless/ieee80211/LICENSE                |  339 ++
 linux-2.6.9/drivers/net/wireless/ieee80211/Makefile               |   23 
 linux-2.6.9/drivers/net/wireless/ieee80211/ieee80211.h            | 1073 ++++++-
 linux-2.6.9/drivers/net/wireless/ieee80211/ieee80211_crypt.c      |  253 +
 linux-2.6.9/drivers/net/wireless/ieee80211/ieee80211_crypt.h      |  104 
 linux-2.6.9/drivers/net/wireless/ieee80211/ieee80211_crypt_ccmp.c |  493 +++
 linux-2.6.9/drivers/net/wireless/ieee80211/ieee80211_crypt_tkip.c |  734 ++++
 linux-2.6.9/drivers/net/wireless/ieee80211/ieee80211_crypt_wep.c  |  285 +
 linux-2.6.9/drivers/net/wireless/ieee80211/ieee80211_module.c     |  306 +-
 linux-2.6.9/drivers/net/wireless/ieee80211/ieee80211_rx.c         | 1521 ++++++++--
 linux-2.6.9/drivers/net/wireless/ieee80211/ieee80211_tx.c         |  762 ++++-
 linux-2.6.9/drivers/net/wireless/ieee80211/ieee80211_wx.c         |  640 +++-
 14 files changed, 6019 insertions(+), 520 deletions(-)

Index: linux-2.6.9-ieee80211.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.9-ieee80211.patch,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- linux-2.6.9-ieee80211.patch	24 Jun 2005 00:44:41 -0000	1.13
+++ linux-2.6.9-ieee80211.patch	29 Sep 2005 23:05:03 -0000	1.14
@@ -7605,4 +7605,3 @@
  extern inline int is_broadcast_ether_addr(const u8 *addr)
  {
  	return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) &&   \
-

linux-2.6.9-module_version.patch:
 linux-1720/drivers/block/DAC960.c           |    1 +
 linux-1720/drivers/block/cpqarray.c         |    1 +
 linux-1720/drivers/message/fusion/mptbase.c |    1 +
 linux-1720/drivers/net/b44.c                |    1 +
 linux-1720/drivers/net/ns83820.c            |    1 +
 linux-1720/drivers/net/tg3.c                |    1 +
 linux-1720/drivers/scsi/gdth.c              |    1 +
 linux-2.6.12/drivers/block/cciss.c          |    1 +
 8 files changed, 8 insertions(+)

Index: linux-2.6.9-module_version.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.9-module_version.patch,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- linux-2.6.9-module_version.patch	21 Jun 2005 18:55:44 -0000	1.13
+++ linux-2.6.9-module_version.patch	29 Sep 2005 23:05:04 -0000	1.14
@@ -1,10 +1,9 @@
-diff -urNp --exclude-from=/home/davej/.exclude linux-1700/drivers/block/cciss.c linux-1720/drivers/block/cciss.c
---- linux-1700/drivers/block/cciss.c
-+++ linux-1720/drivers/block/cciss.c
-@@ -54,6 +54,7 @@ MODULE_AUTHOR("Hewlett-Packard Company")
+--- linux-2.6.12/drivers/block/cciss.c~	2005-06-28 12:59:45.000000000 -0400
++++ linux-2.6.12/drivers/block/cciss.c	2005-06-28 13:00:25.000000000 -0400
+@@ -55,6 +55,7 @@ MODULE_AUTHOR("Hewlett-Packard Company")
  MODULE_DESCRIPTION("Driver for HP Controller SA5xxx SA6xxx version 2.6.6");
  MODULE_SUPPORTED_DEVICE("HP SA5i SA5i+ SA532 SA5300 SA5312 SA641 SA642 SA6400"
- 			" SA6i P600 P800 E400");
+ 			" SA6i P600 P800 E400 E300");
 +MODULE_VERSION("2.6.6");
  MODULE_LICENSE("GPL");
  
@@ -50,27 +49,6 @@
  
  static struct pci_device_id b44_pci_tbl[] = {
  	{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_BCM4401,
-diff -urNp --exclude-from=/home/davej/.exclude linux-1700/drivers/net/ixgb/ixgb_main.c linux-1720/drivers/net/ixgb/ixgb_main.c
---- linux-1700/drivers/net/ixgb/ixgb_main.c
-+++ linux-1720/drivers/net/ixgb/ixgb_main.c
-@@ -47,7 +47,8 @@ char ixgb_driver_string[] = "Intel(R) PR
- #else
- #define DRIVERNAPI "-NAPI"
- #endif
--char ixgb_driver_version[] = "1.0.95-k2"DRIVERNAPI;
-+#define DRV_VERSION "1.0.95-k2"DRIVERNAPI
-+char ixgb_driver_version[] = DRV_VERSION;
- char ixgb_copyright[] = "Copyright (c) 1999-2005 Intel Corporation.";
- 
- /* ixgb_pci_tbl - PCI Device ID Table
-@@ -152,6 +153,7 @@ static struct pci_driver ixgb_driver = {
- MODULE_AUTHOR("Intel Corporation, <linux.nics at intel.com>");
- MODULE_DESCRIPTION("Intel(R) PRO/10GbE Network Driver");
- MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
- 
- /* some defines for controlling descriptor fetches in h/w */
- #define RXDCTL_PTHRESH_DEFAULT 128	/* chip considers prefech below this */
 diff -urNp --exclude-from=/home/davej/.exclude linux-1700/drivers/net/ns83820.c linux-1720/drivers/net/ns83820.c
 --- linux-1700/drivers/net/ns83820.c
 +++ linux-1720/drivers/net/ns83820.c
@@ -93,17 +71,6 @@
  
  static struct pci_device_id tg3_pci_tbl[] = {
  	{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700,
-diff -urNp --exclude-from=/home/davej/.exclude linux-1700/drivers/scsi/ahci.c linux-1720/drivers/scsi/ahci.c
---- linux-1700/drivers/scsi/ahci.c
-+++ linux-1720/drivers/scsi/ahci.c
-@@ -1062,6 +1062,7 @@ MODULE_AUTHOR("Jeff Garzik");
- MODULE_DESCRIPTION("AHCI SATA low-level driver");
- MODULE_LICENSE("GPL");
- MODULE_DEVICE_TABLE(pci, ahci_pci_tbl);
-+MODULE_VERSION(DRV_VERSION);
- 
- module_init(ahci_init);
- module_exit(ahci_exit);
 diff -urNp --exclude-from=/home/davej/.exclude linux-1700/drivers/scsi/gdth.c linux-1720/drivers/scsi/gdth.c
 --- linux-1700/drivers/scsi/gdth.c
 +++ linux-1720/drivers/scsi/gdth.c

linux-2.6.9-scsi-megaraid-legacy.patch:
 linux-1102/drivers/scsi/megaraid/Kconfig.megaraid |    2 --
 linux-2.6.12/drivers/scsi/megaraid.c              |   12 +-----------
 linux-2.6.12/drivers/scsi/megaraid.h              |    4 ----
 3 files changed, 1 insertion(+), 17 deletions(-)

Index: linux-2.6.9-scsi-megaraid-legacy.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.9-scsi-megaraid-legacy.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6.9-scsi-megaraid-legacy.patch	22 Mar 2005 07:00:34 -0000	1.2
+++ linux-2.6.9-scsi-megaraid-legacy.patch	29 Sep 2005 23:05:04 -0000	1.3
@@ -14,3 +14,53 @@
  	To compile this driver as a module, choose M here: the
  	module will be called megaraid
 -endif
+
+--- linux-2.6.12/drivers/scsi/megaraid.c~	2005-08-08 23:25:13.000000000 -0400
++++ linux-2.6.12/drivers/scsi/megaraid.c	2005-08-08 23:31:14.000000000 -0400
+@@ -5014,22 +5014,12 @@ megaraid_shutdown(struct pci_dev *pdev)
+ }
+ 
+ static struct pci_device_id megaraid_pci_tbl[] = {
+-	{PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DISCOVERY,
+-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-	{PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_PERC4_DI,
+-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, BOARD_64BIT},
+-	{PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_PERC4_QC_VERDE,
+-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, BOARD_64BIT},
+ 	{PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID,
+ 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+ 	{PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID2,
+ 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-	{PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID3,
+-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+ 	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_AMI_MEGARAID3,
+ 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-	{PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_AMI_MEGARAID3,
+-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+ 	{0,}
+ };
+ MODULE_DEVICE_TABLE(pci, megaraid_pci_tbl);
+--- linux-2.6.12/drivers/scsi/megaraid.h~	2005-08-08 23:26:41.000000000 -0400
++++ linux-2.6.12/drivers/scsi/megaraid.h	2005-08-08 23:33:14.000000000 -0400
+@@ -73,10 +73,6 @@
+ #define PCI_DEVICE_ID_AMI_MEGARAID3	0x1960
+ #endif
+ 
+-#define PCI_DEVICE_ID_DISCOVERY		0x000E
+-#define PCI_DEVICE_ID_PERC4_DI		0x000F
+-#define PCI_DEVICE_ID_PERC4_QC_VERDE	0x0407
+-
+ /* Sub-System Vendor IDs */
+ #define	AMI_SUBSYS_VID			0x101E
+ #define DELL_SUBSYS_VID			0x1028
+--- linux-2.6.12/drivers/scsi/megaraid.c~	2005-08-08 23:33:34.000000000 -0400
++++ linux-2.6.12/drivers/scsi/megaraid.c	2005-08-08 23:33:52.000000000 -0400
+@@ -5025,7 +5025,7 @@ static struct pci_device_id megaraid_pci
+ MODULE_DEVICE_TABLE(pci, megaraid_pci_tbl);
+ 
+ static struct pci_driver megaraid_pci_driver = {
+-	.name		= "megaraid",
++	.name		= "megaraid_legacy",
+ 	.id_table	= megaraid_pci_tbl,
+ 	.probe		= megaraid_probe_one,
+ 	.remove		= __devexit_p(megaraid_remove_one),

linux-2.6.9-vm-oomkiller-debugging.patch:
 oom_kill.c |    1 +
 1 files changed, 1 insertion(+)

Index: linux-2.6.9-vm-oomkiller-debugging.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.9-vm-oomkiller-debugging.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6.9-vm-oomkiller-debugging.patch	22 Mar 2005 07:00:34 -0000	1.3
+++ linux-2.6.9-vm-oomkiller-debugging.patch	29 Sep 2005 23:05:04 -0000	1.4
@@ -1,18 +1,10 @@
-diff -urNp --exclude-from=/home/davej/.exclude linux-2000/mm/oom_kill.c linux-2001/mm/oom_kill.c
---- linux-2000/mm/oom_kill.c
-+++ linux-2001/mm/oom_kill.c
-@@ -268,12 +268,12 @@ retry:
+--- linux-2.6.12/mm/oom_kill.c~	2005-06-22 14:16:57.000000000 -0400
++++ linux-2.6.12/mm/oom_kill.c	2005-06-22 14:17:35.000000000 -0400
+@@ -272,6 +272,7 @@ retry:
  	/* Found nothing?!?! Either we hang forever, or we panic. */
  	if (!p) {
  		read_unlock(&tasklist_lock);
--		show_free_areas();
 +		show_mem();
  		panic("Out of memory and no killable processes...\n");
  	}
  
- 	printk("oom-killer: gfp_mask=0x%x\n", gfp_mask);
--	show_free_areas();
-+	show_mem();
- 	mm = oom_kill_process(p);
- 	if (!mm)
- 		goto retry;

linux-2.6.9-xen-compile.patch:
 linux-2.6.10/arch/xen/i386/pci/irq.c                |    1 +
 linux-2.6.12/arch/i386/kernel/vmlinux.lds.S         |    4 ++--
 linux-2.6.12/arch/xen/Kconfig                       |    1 +
 linux-2.6.12/arch/xen/Kconfig.drivers               |    2 +-
 linux-2.6.12/arch/xen/i386/Kconfig                  |   11 +++++++++++
 linux-2.6.12/arch/xen/i386/kernel/i386_ksyms.c      |    8 +-------
 linux-2.6.12/arch/xen/i386/kernel/process.c         |    4 ++--
 linux-2.6.12/arch/xen/i386/kernel/setup.c           |    8 ++++++++
 linux-2.6.12/arch/xen/i386/kernel/signal.c          |    2 +-
 linux-2.6.12/arch/xen/i386/kernel/time.c            |    6 +-----
 linux-2.6.12/arch/xen/i386/kernel/traps.c           |    4 ++--
 linux-2.6.12/arch/xen/i386/mm/pgtable.c             |    2 +-
 linux-2.6.12/arch/xen/i386/pci/irq.c                |   17 +++++++++++------
 linux-2.6.12/arch/xen/kernel/reboot.c               |    6 ++++++
 linux-2.6.12/drivers/char/tty_io.c                  |   19 ++++++++++++-------
 linux-2.6.12/include/asm-i386/timex.h               |    2 ++
 linux-2.6.12/include/asm-xen/asm-i386/mmu_context.h |    4 +---
 linux-2.6.12/include/asm-xen/asm-i386/page.h        |    3 +++
 linux-2.6.12/include/asm-xen/asm-i386/pci.h         |    2 +-
 linux-2.6.12/include/asm-xen/asm-i386/ptrace.h      |    4 ++++
 linux-2.6.12/include/linux/skbuff.h                 |    6 ++++--
 linux-2.6.12/net/core/dev.c                         |    4 ++++
 linux-2.6.8/arch/xen/i386/kernel/time.c             |    2 +-
 linux-2.6.9/Makefile                                |    2 +-
 linux-2.6.9/arch/xen/Makefile                       |    3 +++
 linux-2.6.9/arch/xen/boot/Makefile                  |    3 +++
 linux-2.6.9/kernel/profile.c                        |    1 +
 27 files changed, 89 insertions(+), 42 deletions(-)

Index: linux-2.6.9-xen-compile.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/linux-2.6.9-xen-compile.patch,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -r1.49 -r1.50
--- linux-2.6.9-xen-compile.patch	8 Sep 2005 19:10:39 -0000	1.49
+++ linux-2.6.9-xen-compile.patch	29 Sep 2005 23:05:04 -0000	1.50
@@ -1,4 +1,67 @@
-unchanged:
+#
+# Chunks that gave rejects in the upstream generated Xen patch.
+#
+--- linux-2.6.12/drivers/char/tty_io.c.fixup	2005-08-23 13:02:02.000000000 -0400
++++ linux-2.6.12/drivers/char/tty_io.c	2005-08-23 13:04:24.000000000 -0400
+@@ -2979,14 +2979,19 @@
+ #endif
+ 
+ #ifdef CONFIG_VT
+-	cdev_init(&vc0_cdev, &console_fops);
+-	if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) ||
+-	    register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1, "/dev/vc/0") < 0)
+-		panic("Couldn't register /dev/tty0 driver\n");
+-	devfs_mk_cdev(MKDEV(TTY_MAJOR, 0), S_IFCHR|S_IRUSR|S_IWUSR, "vc/0");
+-	class_device_create(tty_class, MKDEV(TTY_MAJOR, 0), NULL, "tty0");
++	if (console_use_vt) {
++		cdev_init(&vc0_cdev, &console_fops);
++		if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) ||
++		    register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1,
++						"/dev/vc/0") < 0)
++			panic("Couldn't register /dev/tty0 driver\n");
++		devfs_mk_cdev(MKDEV(TTY_MAJOR, 0), S_IFCHR|S_IRUSR|S_IWUSR,
++				 "vc/0");
++		class_device_create(tty_class, MKDEV(TTY_MAJOR, 0), NULL,
++				 "tty0");
+ 
+-	vty_init();
++		vty_init();
++	}
+ #endif
+ 	return 0;
+ }
+--- linux-2.6.12/include/linux/skbuff.h.fixup	2005-08-23 13:02:10.000000000 -0400
++++ linux-2.6.12/include/linux/skbuff.h	2005-08-23 13:05:28.000000000 -0400
+@@ -254,8 +254,10 @@
+ 	__u8			local_df:1,
+ 				cloned:1,
+ 				ip_summed:2,
+-				nohdr:1;
+-				/* 3 bits spare */
++				nohdr:1,
++				proto_csum_valid:1,
++				proto_csum_blank:1;
++				/* 1 bit spare */
+ 	__u8			pkt_type;
+ 	__be16			protocol;
+ 
+--- linux-2.6.12/net/core/dev.c.fixup	2005-08-23 13:02:21.000000000 -0400
++++ linux-2.6.12/net/core/dev.c	2005-08-23 13:06:08.000000000 -0400
+@@ -115,6 +115,10 @@
+ #endif	/* CONFIG_NET_RADIO */
+ #include <asm/current.h>
+ 
++#include <net/ip.h>
++#include <linux/tcp.h>
++#include <linux/udp.h>
++
+ /*
+  *	The list of packet types we will receive (as opposed to discard)
+  *	and the routines to invoke.
+
+#
+# Other compile fixes
+#
 --- linux-2.6.8/arch/xen/i386/kernel/time.c.269	2004-10-15 13:40:26.000000000 -0400
 +++ linux-2.6.8/arch/xen/i386/kernel/time.c	2004-10-15 13:40:40.000000000 -0400
 @@ -68,7 +68,7 @@
@@ -10,7 +73,6 @@
  int pit_latch_buggy;              /* extern */
  
  #include "do_timer.h"
-unchanged:
 --- linux-2.6.9/kernel/profile.c~	2004-12-24 01:45:26.735454624 -0500
 +++ linux-2.6.9/kernel/profile.c	2004-12-24 01:45:40.875305040 -0500
 @@ -22,6 +22,7 @@
@@ -64,3 +126,337 @@
  
  static int __init pcibios_irq_init(void)
  {
+--- linux-2.6.12/arch/xen/i386/kernel/process.c.compile	2005-08-23 10:42:33.000000000 -0400
++++ linux-2.6.12/arch/xen/i386/kernel/process.c	2005-08-23 10:42:51.000000000 -0400
+@@ -196,12 +196,12 @@
+ 
+ 			if (cpu_is_offline(cpu)) {
+ 				local_irq_disable();
++#if defined(CONFIG_XEN) && defined(CONFIG_HOTPLUG_CPU)
+ 				/* Ack it.  From this point on until
+ 				   we get woken up, we're not allowed
+ 				   to take any locks.  In particular,
+ 				   don't printk. */
+ 				__get_cpu_var(cpu_state) = CPU_DEAD;
+-#if defined(CONFIG_XEN) && defined(CONFIG_HOTPLUG_CPU)
+ 				/* Tell hypervisor to take vcpu down. */
+ 				HYPERVISOR_vcpu_down(cpu);
+ #endif
+--- linux-2.6.12/arch/xen/i386/pci/irq.c.acpi	2005-08-15 11:03:50.000000000 -0400
++++ linux-2.6.12/arch/xen/i386/pci/irq.c	2005-08-15 11:07:05.000000000 -0400
+@@ -56,6 +56,7 @@ struct irq_router_handler {
+ };
+ 
+ int (*pcibios_enable_irq)(struct pci_dev *dev) = NULL;
++void (*pcibios_disable_irq)(struct pci_dev *dev) = NULL;
+ 
+ /*
+  *  Search 0xf0000 -- 0xfffff for the PCI IRQ Routing Table.
+@@ -1010,24 +1011,28 @@ static int __init pcibios_irq_init(void)
+ subsys_initcall(pcibios_irq_init);
+ 
+ 
+-static void pirq_penalize_isa_irq(int irq)
++static void pirq_penalize_isa_irq(int irq, int active)
+ {
+ 	/*
+ 	 *  If any ISAPnP device reports an IRQ in its list of possible
+ 	 *  IRQ's, we try to avoid assigning it to PCI devices.
+ 	 */
+-	if (irq < 16)
+-		pirq_penalty[irq] += 100;
++	if (irq < 16) {
++		if (active)
++			pirq_penalty[irq] += 1000;
++		else
++			pirq_penalty[irq] += 100;
++	}
+ }
+ 
+-void pcibios_penalize_isa_irq(int irq)
++void pcibios_penalize_isa_irq(int irq, int active)
+ {
+ #ifdef CONFIG_ACPI_PCI
+ 	if (!acpi_noirq)
+-		acpi_penalize_isa_irq(irq);
++		acpi_penalize_isa_irq(irq, active);
+ 	else
+ #endif
+-		pirq_penalize_isa_irq(irq);
++		pirq_penalize_isa_irq(irq, active);
+ }
+ 
+ static int pirq_enable_irq(struct pci_dev *dev)
+--- linux-2.6.12/include/asm-xen/asm-i386/pci.h.acpi	2005-08-15 11:07:41.000000000 -0400
++++ linux-2.6.12/include/asm-xen/asm-i386/pci.h	2005-08-15 11:08:33.000000000 -0400
+@@ -27,7 +27,7 @@ void pcibios_config_init(void);
+ struct pci_bus * pcibios_scan_root(int bus);
+ 
+ void pcibios_set_master(struct pci_dev *dev);
+-void pcibios_penalize_isa_irq(int irq);
++void pcibios_penalize_isa_irq(int irq, int active);
+ struct irq_routing_table *pcibios_get_irq_routing_table(void);
+ int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq);
+ 
+
+#
+# Linux 2.6.13 related compile fixes
+#
+--- linux-2.6.12/arch/xen/i386/kernel/signal.c.2613	2005-08-23 13:16:40.000000000 -0400
++++ linux-2.6.12/arch/xen/i386/kernel/signal.c	2005-08-23 13:16:45.000000000 -0400
+@@ -603,7 +603,7 @@
+ 		return 1;
+ 
+ 	if (current->flags & PF_FREEZE) {
+-		refrigerator(0);
++		refrigerator();
+ 		goto no_signal;
+ 	}
+ 
+--- linux-2.6.12/arch/xen/i386/kernel/traps.c.2613	2005-08-23 13:17:09.000000000 -0400
++++ linux-2.6.12/arch/xen/i386/kernel/traps.c	2005-08-23 13:21:54.000000000 -0400
+@@ -27,6 +27,7 @@
+ #include <linux/ptrace.h>
+ #include <linux/utsname.h>
+ #include <linux/kprobes.h>
++#include <linux/smp.h>
+ 
+ #ifdef CONFIG_EISA
+ #include <linux/ioport.h>
+@@ -47,7 +48,6 @@
+ #include <asm/i387.h>
+ #include <asm/nmi.h>
+ 
+-#include <asm/smp.h>
+ #include <asm/arch_hooks.h>
+ #include <asm/kdebug.h>
+ 
+@@ -303,7 +303,7 @@
+ 	};
+ 	static int die_counter;
+ 
+-	if (die.lock_owner != _smp_processor_id()) {
++	if (die.lock_owner != smp_processor_id()) {
+ 		console_verbose();
+ 		spin_lock_irq(&die.lock);
+ 		die.lock_owner = smp_processor_id();
+--- linux-2.6.12/arch/xen/i386/kernel/time.c.2613	2005-08-23 13:18:17.000000000 -0400
++++ linux-2.6.12/arch/xen/i386/kernel/time.c	2005-08-23 13:22:32.000000000 -0400
+@@ -88,11 +88,7 @@
+ struct timezone __sys_tz __section_sys_tz;
+ #endif
+ 
+-#if defined(__x86_64__)
+ unsigned int cpu_khz;	/* Detected as we calibrate the TSC */
+-#else
+-unsigned long cpu_khz;	/* Detected as we calibrate the TSC */
+-#endif
+ 
+ extern unsigned long wall_jiffies;
+ 
+@@ -772,7 +768,7 @@
+ 	update_wallclock();
+ 
+ 	init_cpu_khz();
+-	printk(KERN_INFO "Xen reported: %lu.%03lu MHz processor.\n",
++	printk(KERN_INFO "Xen reported: %u.%03u MHz processor.\n",
+ 	       cpu_khz / 1000, cpu_khz % 1000);
+ 
+ #if defined(__x86_64__)
+--- linux-2.6.12/arch/xen/i386/kernel/i386_ksyms.c.2613	2005-08-23 13:22:50.000000000 -0400
++++ linux-2.6.12/arch/xen/i386/kernel/i386_ksyms.c	2005-08-23 14:30:44.000000000 -0400
+@@ -56,7 +56,7 @@
+ EXPORT_SYMBOL(drive_info);
+ #endif
+ 
+-extern unsigned long cpu_khz;
++extern unsigned int cpu_khz;
+ extern unsigned long get_cmos_time(void);
+ 
+ /* platform dependent support */
+@@ -69,7 +69,6 @@
+ EXPORT_SYMBOL(xquad_portio);
+ #endif
+ EXPORT_SYMBOL(dump_thread);
+-EXPORT_SYMBOL(dump_fpu);
+ EXPORT_SYMBOL_GPL(kernel_fpu_begin);
+ EXPORT_SYMBOL(__ioremap);
+ EXPORT_SYMBOL(ioremap_nocache);
+@@ -119,11 +118,6 @@
+ EXPORT_SYMBOL(pci_mem_start);
+ #endif
+ 
+-#ifdef CONFIG_PCI_BIOS
+-EXPORT_SYMBOL(pcibios_set_irq_routing);
+-EXPORT_SYMBOL(pcibios_get_irq_routing_table);
+-#endif
+-
+ #ifdef CONFIG_X86_USE_3DNOW
+ EXPORT_SYMBOL(_mmx_memcpy);
+ EXPORT_SYMBOL(mmx_clear_page);
+--- linux-2.6.12/arch/xen/i386/mm/pgtable.c.2613	2005-08-23 13:26:16.000000000 -0400
++++ linux-2.6.12/arch/xen/i386/mm/pgtable.c	2005-08-23 13:27:39.000000000 -0400
+@@ -41,7 +41,7 @@
+ 	printk("Free swap:       %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
+ 	for_each_pgdat(pgdat) {
+ 		for (i = 0; i < pgdat->node_spanned_pages; ++i) {
+-			page = pgdat->node_mem_map + i;
++			page = pgdat_page_nr(pgdat, i);
+ 			total++;
+ 			if (PageHighMem(page))
+ 				highmem++;
+--- linux-2.6.12/include/asm-xen/asm-i386/mmu_context.h.2613	2005-08-23 13:37:24.000000000 -0400
++++ linux-2.6.12/include/asm-xen/asm-i386/mmu_context.h	2005-08-23 14:25:43.000000000 -0400
+@@ -23,9 +23,7 @@
+ #endif
+ }
+ 
+-#define prepare_arch_switch(rq,next)	__prepare_arch_switch()
+-#define finish_arch_switch(rq, next)	spin_unlock_irq(&(rq)->lock)
+-#define task_running(rq, p)		((rq)->curr == (p))
++#define prepare_arch_switch(next)	__prepare_arch_switch()
+ 
+ static inline void __prepare_arch_switch(void)
+ {
+--- linux-2.6.12/arch/i386/kernel/vmlinux.lds.S.2613	2005-08-23 19:42:43.000000000 -0400
++++ linux-2.6.12/arch/i386/kernel/vmlinux.lds.S	2005-08-23 19:43:25.000000000 -0400
+@@ -35,10 +35,10 @@
+ 
+   . = ALIGN(16);
+   __start_smp_alternatives_table = .;
+-  __smp_alternatives : { *(__smp_alternatives) }
++  __smp_alternatives : AT(ADDR(__smp_alternatives) - LOAD_OFFSET) { *(__smp_alternatives) }
+   __stop_smp_alternatives_table = .;
+ 
+-  __smp_replacements : { *(__smp_replacements) }
++  __smp_replacements : AT(ADDR(__smp_replacements) - LOAD_OFFSET) { *(__smp_replacements) }
+ 
+   RODATA
+ 
+--- linux-2.6.12/arch/xen/i386/Kconfig.2613	2005-08-23 20:19:47.000000000 -0400
++++ linux-2.6.12/arch/xen/i386/Kconfig	2005-08-23 20:21:29.000000000 -0400
+@@ -940,6 +940,17 @@
+ 	depends on X86 && !EMBEDDED
+ 	default y
+ 
++config PHYSICAL_START
++	hex "Physical address where the kernel is loaded" if EMBEDDED
++	default "0x100000"
++	help
++	  This gives the physical address where the kernel is loaded.
++	  Primarily used in the case of kexec on panic where the
++	  fail safe kernel needs to run at a different address than
++	  the panic-ed kernel.
++
++	  Don't change this unless you know what you are doing.
++
+ config SECCOMP
+ 	bool "Enable seccomp to safely compute untrusted bytecode"
+ 	depends on PROC_FS
+--- linux-2.6.12/include/asm-xen/asm-i386/page.h.2613	2005-08-23 20:16:08.000000000 -0400
++++ linux-2.6.12/include/asm-xen/asm-i386/page.h	2005-08-23 20:18:05.000000000 -0400
+@@ -216,9 +216,12 @@
+ 
+ #ifdef __ASSEMBLY__
+ #define __PAGE_OFFSET		(0xC0000000)
++#define __PHYSICAL_START	CONFIG_PHYSICAL_START
+ #else
+ #define __PAGE_OFFSET		(0xC0000000UL)
++#define __PHYSICAL_START	((unsigned long)CONFIG_PHYSICAL_START)
+ #endif
++#define __KERNEL_START		(__PAGE_OFFSET + __PHYSICAL_START)
+ 
+ 
+ #define PAGE_OFFSET		((unsigned long)__PAGE_OFFSET)
+--- linux-2.6.12/arch/xen/i386/kernel/process.c.2613	2005-08-23 20:32:31.000000000 -0400
++++ linux-2.6.12/arch/xen/i386/kernel/process.c	2005-08-23 20:32:48.000000000 -0400
+@@ -184,7 +184,7 @@
+  */
+ void cpu_idle (void)
+ {
+-	int cpu = _smp_processor_id();
++	int cpu = smp_processor_id();
+ 
+ 	/* endless idle loop with no priority at all */
+ 	while (1) {
+--- linux-2.6.12/arch/xen/i386/kernel/setup.c.2613	2005-08-23 20:35:09.000000000 -0400
++++ linux-2.6.12/arch/xen/i386/kernel/setup.c	2005-08-23 20:36:23.000000000 -0400
+@@ -58,6 +58,14 @@
+ #include "setup_arch_pre.h"
+ #include <bios_ebda.h>
+ 
++#ifdef CONFIG_HOTPLUG_CPU
++#define DEFAULT_SEND_IPI	(1)
++#else
++#define DEFAULT_SEND_IPI	(0)
++#endif
++
++int no_broadcast=DEFAULT_SEND_IPI;
++
+ /* Allows setting of maximum possible memory size  */
+ static unsigned long xen_override_max_pfn;
+ 
+--- linux-2.6.12/arch/xen/kernel/reboot.c.2613	2005-08-23 20:41:22.000000000 -0400
++++ linux-2.6.12/arch/xen/kernel/reboot.c	2005-08-23 20:42:16.000000000 -0400
+@@ -32,6 +32,12 @@
+ 	HYPERVISOR_reboot();
+ }
+ 
++void machine_emergency_restart(void)
++{
++	char dummy;
++	machine_restart(&dummy);
++}
++
+ void machine_halt(void)
+ {
+ 	machine_power_off();
+--- linux-2.6.12/include/asm-i386/timex.h.2613	2005-08-23 20:31:58.000000000 -0400
++++ linux-2.6.12/include/asm-i386/timex.h	2005-08-23 20:32:15.000000000 -0400
+@@ -49,7 +49,9 @@
+ 
+ extern unsigned int cpu_khz;
+ 
++#ifndef CONFIG_XEN
+ extern int read_current_timer(unsigned long *timer_value);
+ #define ARCH_HAS_READ_CURRENT_TIMER	1
++#endif
+ 
+ #endif
+--- linux-2.6.12/include/asm-xen/asm-i386/ptrace.h.2613	2005-08-23 20:37:02.000000000 -0400
++++ linux-2.6.12/include/asm-xen/asm-i386/ptrace.h	2005-08-23 20:38:09.000000000 -0400
+@@ -55,9 +55,13 @@
+ #define PTRACE_SET_THREAD_AREA    26
+ 
+ #ifdef __KERNEL__
++
++#include <asm/vm86.h>
++
+ struct task_struct;
+ extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code);
+ #define user_mode(regs) ((VM_MASK & (regs)->eflags) || (2 & (regs)->xcs))
++#define user_mode_vm(regs) (((regs->xcs & 3) | (regs->eflags & VM_MASK)) != 0)
+ #define instruction_pointer(regs) ((regs)->eip)
+ #if defined(CONFIG_SMP) && defined(CONFIG_FRAME_POINTER)
+ extern unsigned long profile_pc(struct pt_regs *regs);
+--- linux-2.6.12/arch/xen/Kconfig.drivers~	2005-08-27 00:23:32.000000000 -0400
++++ linux-2.6.12/arch/xen/Kconfig.drivers	2005-08-27 00:23:49.000000000 -0400
+@@ -30,7 +30,7 @@ source "drivers/ieee1394/Kconfig"
+ source "drivers/message/i2o/Kconfig"
+ endif
+ 
+-source "net/Kconfig"
++source "drivers/net/Kconfig"
+ 
+ if XEN_PHYSDEV_ACCESS
+ source "drivers/isdn/Kconfig"
+--- linux-2.6.12/arch/xen/Kconfig~	2005-08-27 00:23:54.000000000 -0400
++++ linux-2.6.12/arch/xen/Kconfig	2005-08-27 00:24:08.000000000 -0400
+@@ -184,6 +184,7 @@ source "fs/Kconfig.binfmt"
+ 
+ endmenu
+ 
++source "net/Kconfig"
+ source "arch/xen/Kconfig.drivers"
+ 
+ if XEN_PRIVILEGED_GUEST


Index: sources
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/sources,v
retrieving revision 1.142
retrieving revision 1.143
diff -u -r1.142 -r1.143
--- sources	15 Aug 2005 05:56:56 -0000	1.142
+++ sources	29 Sep 2005 23:05:04 -0000	1.143
@@ -1,3 +1,2 @@
-c5d2a1b62e1dad502c871bba267337d5  linux-2.6.12.tar.bz2
-b40f93c0e69d5e91119af3a80f25770d  linux-2.6-acpi-20050729.patch.bz2
-cff8abb6a5a992018cbcf382ff95c577  patch-2.6.12.5.bz2
+560f5fadf59f172973e67939868a4cae  linux-2.6.13.tar.bz2
+deb39c284b01db99fdc3ec3f80a4eaea  patch-2.6.13.2.bz2


Index: upstream
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/upstream,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -r1.82 -r1.83
--- upstream	15 Aug 2005 05:56:56 -0000	1.82
+++ upstream	29 Sep 2005 23:05:04 -0000	1.83
@@ -1,3 +1,2 @@
-linux-2.6.12.tar.bz2
-patch-2.6.12.5.bz2
-
+linux-2.6.13.tar.bz2
+patch-2.6.13.2.bz2


--- linux-2.4.0-nonintconfig.patch DELETED ---


--- linux-2.6-CAN-2005-2490.patch DELETED ---


--- linux-2.6-CAN-2005-2492.patch DELETED ---


--- linux-2.6-acpi-rollup-20050902.patch DELETED ---


--- linux-2.6-alsa-snd-intel8x0m-semaphore.patch DELETED ---


--- linux-2.6-appletouch-update.patch DELETED ---


--- linux-2.6-input-alps-typo.patch DELETED ---


--- linux-2.6-nfs-enoent.patch DELETED ---


--- linux-2.6-powernow-k8-update.patch DELETED ---


--- linux-2.6-scsi-sym2-alloc_lcb_tags-atomic.patch DELETED ---


--- linux-2.6-selinux-addrlen-checks.patch DELETED ---


--- linux-2.6-windtunnel-printk.patch DELETED ---


--- linux-2.6.0-compile.patch DELETED ---


--- linux-2.6.0-must_check.patch DELETED ---


--- linux-2.6.1-s390-compile.patch DELETED ---


--- linux-2.6.10-periodic-slab-debug.patch DELETED ---


--- linux-2.6.11-cpufreq-add-suspend.patch DELETED ---


--- linux-2.6.11-i2c-config.patch DELETED ---


--- linux-2.6.11-isdn-icn-nodev.patch DELETED ---


--- linux-2.6.11-kallsyms-extra-text.patch DELETED ---


--- linux-2.6.11-mac-mini-sound.patch DELETED ---


--- linux-2.6.11-pmac-ide-sleep.patch DELETED ---


--- linux-2.6.11-pmac-volume-save.patch DELETED ---


--- linux-2.6.11-ppc32-750-erratum-fix.patch DELETED ---


--- linux-2.6.11-ppc32-pbook-clock-spreading.patch DELETED ---


--- linux-2.6.11-ppc32-pmac-sleep-fix.patch DELETED ---


--- linux-2.6.11-radeon-backlight.patch DELETED ---


--- linux-2.6.11-random-ehci-patch.patch DELETED ---


--- linux-2.6.11-slab-backtrace.patch DELETED ---


--- linux-2.6.11-tux.patch DELETED ---


--- linux-2.6.11-vm-taint.patch DELETED ---


--- linux-2.6.11.tar.bz2.sign DELETED ---


--- linux-2.6.12-audit-merge.patch DELETED ---


--- linux-2.6.12-detect-softlockups.patch DELETED ---


--- linux-2.6.12-net-conntrack-bridge-fix.patch DELETED ---


--- linux-2.6.12-net-make-orinoco-suck-less.patch DELETED ---


--- linux-2.6.12-nfsd-ctlbits.patch DELETED ---


--- linux-2.6.12-ns558-nodev-rmmod.patch DELETED ---


--- linux-2.6.12-pwc-warning.patch DELETED ---


--- linux-2.6.12-rc3-ehci-misc-updates.patch DELETED ---


--- linux-2.6.12-scsicam-geom-fix.patch DELETED ---


--- linux-2.6.12-usb-old_scheme_first.patch DELETED ---


--- linux-2.6.12-vm-singlebiterror.patch DELETED ---


--- linux-2.6.12.tar.bz2.sign DELETED ---


--- linux-2.6.12rc-ac-ide-fixes.patch DELETED ---


--- linux-2.6.12rc-ppc32-clockspreading-fix.patch DELETED ---


--- linux-2.6.13-rc3-audit-git.patch DELETED ---


--- linux-2.6.3-ia64-build.patch DELETED ---


--- linux-2.6.3-printopen.patch DELETED ---


--- linux-2.6.3-sparc-addbzimage.patch DELETED ---


--- linux-2.6.4-stackusage.patch DELETED ---


--- linux-2.6.8-lockd-racewarn2.patch DELETED ---


--- linux-2.6.8-ppc64-netboot.patch DELETED ---


--- linux-2.6.9-lockd-block-nosleep.patch DELETED ---


--- linux-2.6.9-lockd-reclaims.patch DELETED ---


--- linux-2.6.9-s390-autoraid.patch DELETED ---


--- linux-2.6.9-s390-zfcp_port-fix.patch DELETED ---


--- linux-2.6.9-spinlock-debug-panic.patch DELETED ---


--- patch-2.6.12.5.bz2.sign DELETED ---


--- patch-2.6.12.6pre.patch DELETED ---




More information about the fedora-cvs-commits mailing list