rpms/kernel/F-9 linux-2.6-firewire-git-pending.patch, 1.31, 1.32 linux-2.6-x86-tracehook.patch, NONE, 1.1 linux-2.6.27-ext-dir-corruption-fix.patch, NONE, 1.1 linux-2.6.27-ext4-stable-patch-queue.patch, NONE, 1.1 linux-2.6.27-fs-disable-fiemap.patch, NONE, 1.1 linux-2.6.27-hwmon-applesmc-2.6.28.patch, NONE, 1.1 linux-2.6.27-lirc.patch, NONE, 1.1 linux-2.6.27.tar.bz2.sign, NONE, 1.1 patch-2.6.27.4.bz2.sign, NONE, 1.1 .cvsignore, 1.830, 1.831 Makefile, 1.70, 1.71 Makefile.config, 1.63, 1.64 config-debug, 1.12, 1.13 config-generic, 1.119, 1.120 config-i686, 1.2, 1.3 config-ia64-generic, 1.11, 1.12 config-nodebug, 1.14, 1.15 config-powerpc-generic, 1.18, 1.19 config-powerpc32-generic, 1.10, 1.11 config-powerpc64, 1.15, 1.16 config-rhel-generic, 1.11, 1.12 config-s390x, 1.5, 1.6 config-sparc64-generic, 1.17, 1.18 config-sparc64-smp, 1.1, 1.2 config-x86-generic, 1.36, 1.37 config-x86_64-generic, 1.35, 1.36 kernel.spec, 1.813, 1.814 linux-2.6-build-nonintconfig.patch, 1.13, 1.14 linux-2.6-debug-nmi-timeout.patch, 1.3, 1.4 linux-2.6-execshield.patch, 1.89, 1.90 linux-2.6-firewire-git-update.patch, 1.15, 1.16 linux-2.6-netdev-atl2.patch, 1.2, 1.3 linux-2.6-silence-noise.patch, 1.16, 1.17 linux-2.6-squashfs.patch, 1.29, 1.30 linux-2.6-upstream-reverts.patch, 1.12, 1.13 linux-2.6-usb-ehci-hcd-respect-nousb.patch, 1.1, 1.2 linux-2.6-utrace.patch, 1.80, 1.81 sources, 1.791, 1.792 upstream, 1.710, 1.711 config-ia64, 1.2, NONE config-rhel-x86-generic, 1.2, NONE config-sparc, 1.2, NONE config-sparc-generic, 1.2, NONE config-sparc-smp, 1.1, NONE config-sparc64, 1.1, NONE config-xen-generic, 1.3, NONE config-xen-ia64, 1.1, NONE config-xen-x86, 1.1, NONE config-xen-x86_64, 1.1, NONE linux-2.6-cpuidle-1-do-not-use-poll_idle-unless-user-asks-for-it.patch, 1.1, NONE linux-2.6-cpuidle-2-menu-governor-fix-wrong-usage-of-measured_us.patch, 1.1, NONE linux-2.6-cpuidle-3-make-ladder-governor-honor-latency-requirements.patch, 1.1, NONE linux-2.6-drm-i915-fix-ioctl-security.patch, 1.1, NONE linux-2.6-e1000e-write-protect-nvm.patch, 1.1, NONE linux-2.6-fbdev-teach-offb-about-palette-on-radeon-r500-r600.patch, 1.1, NONE linux-2.6-fs-cifs-fix-plaintext-authentication.patch, 1.1, NONE linux-2.6-fs-cifs-turn-off-unicode-during-session-establishment.patch, 1.1, NONE linux-2.6-hwmon-applesmc-remove-debugging-messages.patch, 1.1, NONE linux-2.6-input-fix_fn_key_on_macbookpro_4_1_and_mb_air.patch, 1.2, NONE linux-2.6-intel-msr-backport.patch, 1.1, NONE linux-2.6-kernel-doc-structs-private.patch, 1.1, NONE linux-2.6-libata-fix-a-large-collection-of-DMA-mode-mismatches.patch, 1.1, NONE linux-2.6-libata-pata_it821x-driver-updates-and-reworking.patch, 1.1, NONE linux-2.6-libata-pata_marvell-play-nice-with-ahci.patch, 1.2, NONE linux-2.6-libata-sff-kill-spurious-WARN_ON-in-ata_hsm_move.patch, 1.1, NONE linux-2.6-lirc.patch, 1.10, NONE linux-2.6-net-print-module-name-as-part-of-the-message.patch, 1.1, NONE linux-2.6-netdev-atl1e.patch, 1.2, NONE linux-2.6-netdev-e1000e-fix-drv-load-issues-amt.patch, 1.1, NONE linux-2.6-powerpc-fix-OF-parsing-of-64-bits-pci-addresses.patch, 1.1, NONE linux-2.6-powerpc-zImage-32MiB.patch, 1.1, NONE linux-2.6-ppc-use-libgcc.patch, 1.5, NONE linux-2.6-ptrace-cleanup.patch, 1.1, NONE linux-2.6-rt2500usb-fix.patch, 1.1, NONE linux-2.6-sched-clock-fix-nohz-interaction.patch, 1.1, NONE linux-2.6-tracehook.patch, 1.2, NONE linux-2.6-wan-missing-capability-checks-in-sbni_ioctl.patch, 1.1, NONE linux-2.6-warn-Turn-the-netdev-timeout-WARN_ON-into-WARN.patch, 1.1, NONE linux-2.6-warn-add-WARN-macro.patch, 1.1, NONE linux-2.6-warn-rename-WARN-to-WARNING.patch, 1.1, NONE linux-2.6-wireless-p54-fix-regression-due-to-delete-NETDEVICES_MULTIQUEUE-option.patch, 1.1, NONE linux-2.6-wireless-pending.patch, 1.61, NONE linux-2.6-wireless-revert-b43-add-RFKILL_STATE_HARD_BLOCKED-support.patch, 1.1, NONE linux-2.6-wireless-rt2500pci-restoring-missing-line.patch, 1.1, NONE linux-2.6-wireless-stable-backports.patch, 1.1, NONE linux-2.6-wireless.patch, 1.47, NONE linux-2.6-x86-apic-dump-all-regs-v3.patch, 1.3, NONE linux-2.6-x86-hpet-04-workaround-sb700-bios.patch, 1.1, NONE linux-2.6-x86-pci-detect-end_bus_number.patch, 1.1, NONE linux-2.6-x86-sb450-skip-irq0-override-if-not-routed-to-INT2.patch, 1.2, NONE linux-2.6.26-ext-dir-corruption-fix.patch, 1.1, NONE linux-2.6.26.tar.bz2.sign, 1.1, NONE linux-sparc-tracehook-syscall.patch, 1.1, NONE patch-2.6.26.7.bz2.sign, 1.1, NONE

Chuck Ebbert cebbert at fedoraproject.org
Thu Oct 30 04:41:54 UTC 2008


Author: cebbert

Update of /cvs/pkgs/rpms/kernel/F-9
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv16216

Modified Files:
	.cvsignore Makefile Makefile.config config-debug 
	config-generic config-i686 config-ia64-generic config-nodebug 
	config-powerpc-generic config-powerpc32-generic 
	config-powerpc64 config-rhel-generic config-s390x 
	config-sparc64-generic config-sparc64-smp config-x86-generic 
	config-x86_64-generic kernel.spec 
	linux-2.6-build-nonintconfig.patch 
	linux-2.6-debug-nmi-timeout.patch linux-2.6-execshield.patch 
	linux-2.6-firewire-git-update.patch 
	linux-2.6-netdev-atl2.patch linux-2.6-silence-noise.patch 
	linux-2.6-squashfs.patch linux-2.6-upstream-reverts.patch 
	linux-2.6-usb-ehci-hcd-respect-nousb.patch 
	linux-2.6-utrace.patch sources upstream 
Added Files:
	linux-2.6-firewire-git-pending.patch 
	linux-2.6-x86-tracehook.patch 
	linux-2.6.27-ext-dir-corruption-fix.patch 
	linux-2.6.27-ext4-stable-patch-queue.patch 
	linux-2.6.27-fs-disable-fiemap.patch 
	linux-2.6.27-hwmon-applesmc-2.6.28.patch 
	linux-2.6.27-lirc.patch linux-2.6.27.tar.bz2.sign 
	patch-2.6.27.4.bz2.sign 
Removed Files:
	config-ia64 config-rhel-x86-generic config-sparc 
	config-sparc-generic config-sparc-smp config-sparc64 
	config-xen-generic config-xen-ia64 config-xen-x86 
	config-xen-x86_64 
	linux-2.6-cpuidle-1-do-not-use-poll_idle-unless-user-asks-for-it.patch 
	linux-2.6-cpuidle-2-menu-governor-fix-wrong-usage-of-measured_us.patch 
	linux-2.6-cpuidle-3-make-ladder-governor-honor-latency-requirements.patch 
	linux-2.6-drm-i915-fix-ioctl-security.patch 
	linux-2.6-e1000e-write-protect-nvm.patch 
	linux-2.6-fbdev-teach-offb-about-palette-on-radeon-r500-r600.patch 
	linux-2.6-fs-cifs-fix-plaintext-authentication.patch 
	linux-2.6-fs-cifs-turn-off-unicode-during-session-establishment.patch 
	linux-2.6-hwmon-applesmc-remove-debugging-messages.patch 
	linux-2.6-input-fix_fn_key_on_macbookpro_4_1_and_mb_air.patch 
	linux-2.6-intel-msr-backport.patch 
	linux-2.6-kernel-doc-structs-private.patch 
	linux-2.6-libata-fix-a-large-collection-of-DMA-mode-mismatches.patch 
	linux-2.6-libata-pata_it821x-driver-updates-and-reworking.patch 
	linux-2.6-libata-pata_marvell-play-nice-with-ahci.patch 
	linux-2.6-libata-sff-kill-spurious-WARN_ON-in-ata_hsm_move.patch 
	linux-2.6-lirc.patch 
	linux-2.6-net-print-module-name-as-part-of-the-message.patch 
	linux-2.6-netdev-atl1e.patch 
	linux-2.6-netdev-e1000e-fix-drv-load-issues-amt.patch 
	linux-2.6-powerpc-fix-OF-parsing-of-64-bits-pci-addresses.patch 
	linux-2.6-powerpc-zImage-32MiB.patch 
	linux-2.6-ppc-use-libgcc.patch linux-2.6-ptrace-cleanup.patch 
	linux-2.6-rt2500usb-fix.patch 
	linux-2.6-sched-clock-fix-nohz-interaction.patch 
	linux-2.6-tracehook.patch 
	linux-2.6-wan-missing-capability-checks-in-sbni_ioctl.patch 
	linux-2.6-warn-Turn-the-netdev-timeout-WARN_ON-into-WARN.patch 
	linux-2.6-warn-add-WARN-macro.patch 
	linux-2.6-warn-rename-WARN-to-WARNING.patch 
	linux-2.6-wireless-p54-fix-regression-due-to-delete-NETDEVICES_MULTIQUEUE-option.patch 
	linux-2.6-wireless-pending.patch 
	linux-2.6-wireless-revert-b43-add-RFKILL_STATE_HARD_BLOCKED-support.patch 
	linux-2.6-wireless-rt2500pci-restoring-missing-line.patch 
	linux-2.6-wireless-stable-backports.patch 
	linux-2.6-wireless.patch 
	linux-2.6-x86-apic-dump-all-regs-v3.patch 
	linux-2.6-x86-hpet-04-workaround-sb700-bios.patch 
	linux-2.6-x86-pci-detect-end_bus_number.patch 
	linux-2.6-x86-sb450-skip-irq0-override-if-not-routed-to-INT2.patch 
	linux-2.6.26-ext-dir-corruption-fix.patch 
	linux-2.6.26.tar.bz2.sign linux-sparc-tracehook-syscall.patch 
	patch-2.6.26.7.bz2.sign 
Log Message:
Linux 2.6.27.4

linux-2.6-firewire-git-pending.patch:

Index: linux-2.6-firewire-git-pending.patch
===================================================================
RCS file: linux-2.6-firewire-git-pending.patch
diff -N linux-2.6-firewire-git-pending.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ linux-2.6-firewire-git-pending.patch	30 Oct 2008 04:41:11 -0000	1.32
@@ -0,0 +1,130 @@
+#
+# Patches under review and/or pending inclusion in the linux1394-git
+# tree (and/or in by the time your read this), which we want...
+#
+
+Date: Fri, 26 Sep 2008 16:35:45 -0400
+From: Jay Fenlason <fenlason at redhat.com>
+Subject: [Patch] fix two resource allocation bugs in fw-cdev.c
+
+Bug #1: the resource_handle used to number resources will eventually
+wrap, potentially resulting in two resources having the same handle.
+This will lead to a system crash when the wrong resource is freed.
+
+A better fix for this bug would be to use the idr functions rather
+than keeping a linked list of resources.  I will include that in a
+future patch.
+
+Bug #2: the release_client_resource() function does not check the type
+of the resource it is being asked to free.  Because the handle numbers
+can come directly from userspace, a malicious or buggy program may
+free resources that it shouldn't, possibly causing a program crash.
+
+Signed-off-by: Jay Fenlason <fenlason at redhat.com>
+
+--
+
+ fw-cdev.c |   32 +++++++++++++++++++++++++-------
+ 1 file changed, 25 insertions(+), 7 deletions(-)
+
+diff -rup linux-2.6/drivers/firewire/fw-cdev.c linux-2.6.firewire/drivers/firewire/fw-cdev.c
+--- linux-2.6/drivers/firewire/fw-cdev.c	2008-09-22 14:56:02.000000000 -0400
++++ linux-2.6.firewire/drivers/firewire/fw-cdev.c	2008-09-25 16:13:00.000000000 -0400
+@@ -77,7 +77,6 @@ struct client {
+ 	u32 version;
+ 	struct fw_device *device;
+ 	spinlock_t lock;
+-	u32 resource_handle;
+ 	struct list_head resource_list;
+ 	struct list_head event_list;
+ 	wait_queue_head_t wait;
+@@ -321,13 +320,32 @@ add_client_resource(struct client *clien
+ 	unsigned long flags;
+ 
+ 	spin_lock_irqsave(&client->lock, flags);
+-	list_add_tail(&resource->link, &client->resource_list);
+-	resource->handle = client->resource_handle++;
++	if (list_empty(&client->resource_list)
++	    || list_first_entry(&client->resource_list,
++				struct client_resource,
++				link)->handle > 0) {
++		resource->handle = 0;
++		list_add(&resource->link, &client->resource_list);
++	} else {
++		struct client_resource *c_tmp, *c_tmp2;
++
++		c_tmp2 = NULL;
++		list_for_each_entry(c_tmp, &client->resource_list,
++				    link) {
++			if (c_tmp2 && c_tmp->handle != c_tmp2->handle+1)
++				break;
++			c_tmp2 = c_tmp;
++		}
++		BUG_ON(c_tmp2 == NULL);
++		resource->handle = c_tmp2->handle+1;
++		list_add(&resource->link, &c_tmp2->link);
++	}
+ 	spin_unlock_irqrestore(&client->lock, flags);
+ }
+ 
+ static int
+ release_client_resource(struct client *client, u32 handle,
++			void (*func)(struct client *client, struct client_resource *r),
+ 			struct client_resource **resource)
+ {
+ 	struct client_resource *r;
+@@ -335,7 +353,7 @@ release_client_resource(struct client *c
+ 
+ 	spin_lock_irqsave(&client->lock, flags);
+ 	list_for_each_entry(r, &client->resource_list, link) {
+-		if (r->handle == handle) {
++		if (r->handle == handle && r->release == func) {
+ 			list_del(&r->link);
+ 			break;
+ 		}
+@@ -555,7 +573,7 @@ static int ioctl_deallocate(struct clien
+ {
+ 	struct fw_cdev_deallocate *request = buffer;
+ 
+-	return release_client_resource(client, request->handle, NULL);
++	return release_client_resource(client, request->handle, release_address_handler, NULL);
+ }
+ 
+ static int ioctl_send_response(struct client *client, void *buffer)
+@@ -564,7 +582,7 @@ static int ioctl_send_response(struct cl
+ 	struct client_resource *resource;
+ 	struct request *r;
+ 
+-	if (release_client_resource(client, request->handle, &resource) < 0)
++	if (release_client_resource(client, request->handle, release_request, &resource) < 0)
+ 		return -EINVAL;
+ 	r = container_of(resource, struct request, resource);
+ 	if (request->length < r->length)
+@@ -646,7 +664,7 @@ static int ioctl_remove_descriptor(struc
+ {
+ 	struct fw_cdev_remove_descriptor *request = buffer;
+ 
+-	return release_client_resource(client, request->handle, NULL);
++	return release_client_resource(client, request->handle, release_descriptor, NULL);
+ }
+ 
+ static void
+
+----------------------
+Date: Wed, 22 Oct 2008 15:59:42 -0400
+From: Jay Fenlason <fenlason at redhat.com>
+Subject: firewire: typo in comment
+
+Signed-off-by: Jay Fenlason <fenlason at redhat.com>
+diff -upr linux-2.6/drivers/firewire/fw-card.c linux-2.6.fw/drivers/firewire/fw-card.c
+--- linux-2.6/drivers/firewire/fw-card.c	2008-10-07 11:26:15.000000000 -0400
++++ linux-2.6.fw/drivers/firewire/fw-card.c	2008-10-22 14:40:14.000000000 -0400
+@@ -76,7 +76,7 @@ generate_config_rom(struct fw_card *card
+ 	 * controller, block reads to the config rom accesses the host
+ 	 * memory, but quadlet read access the hardware bus info block
+ 	 * registers.  That's just crack, but it means we should make
+-	 * sure the contents of bus info block in host memory mathces
++	 * sure the contents of bus info block in host memory matches
+ 	 * the version stored in the OHCI registers.
+ 	 */
+ 

linux-2.6-x86-tracehook.patch:

--- NEW FILE linux-2.6-x86-tracehook.patch ---
 arch/x86/Kconfig              |    1 +
 arch/x86/kernel/ptrace.c      |   34 +------
 arch/x86/kernel/signal_32.c   |   11 ++-
 arch/x86/kernel/signal_64.c   |   49 +++-------
 include/asm-x86/ptrace.h      |    5 +
 include/asm-x86/syscall.h     |  211 +++++++++++++++++++++++++++++++++++++++++
 include/asm-x86/thread_info.h |    4 +-
 7 files changed, 249 insertions(+), 66 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index ed92864..ebfd7ff 100644  
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -29,6 +29,7 @@ config X86
 	select HAVE_FTRACE
 	select HAVE_KVM if ((X86_32 && !X86_VOYAGER && !X86_VISWS && !X86_NUMAQ) || X86_64)
 	select HAVE_ARCH_KGDB if !X86_VOYAGER
+	select HAVE_ARCH_TRACEHOOK
 	select HAVE_GENERIC_DMA_COHERENT if X86_32
 	select HAVE_EFFICIENT_UNALIGNED_ACCESS
 
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
index e37dccc..19a7d2c 100644  
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -14,6 +14,7 @@
 #include <linux/errno.h>
 #include <linux/ptrace.h>
 #include <linux/regset.h>
+#include <linux/tracehook.h>
 #include <linux/user.h>
 #include <linux/elf.h>
 #include <linux/security.h>
@@ -1375,30 +1376,6 @@ void send_sigtrap(struct task_struct *ts
 	force_sig_info(SIGTRAP, &info, tsk);
 }
 
-static void syscall_trace(struct pt_regs *regs)
-{
-	if (!(current->ptrace & PT_PTRACED))
-		return;
-
-#if 0
-	printk("trace %s ip %lx sp %lx ax %d origrax %d caller %lx tiflags %x ptrace %x\n",
-	       current->comm,
-	       regs->ip, regs->sp, regs->ax, regs->orig_ax, __builtin_return_address(0),
-	       current_thread_info()->flags, current->ptrace);
-#endif
-
-	ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
-				? 0x80 : 0));
-	/*
-	 * this isn't the same as continuing with a signal, but it will do
-	 * for normal use.  strace only continues with a signal if the
-	 * stopping signal is not SIGTRAP.  -brl
-	 */
-	if (current->exit_code) {
-		send_sig(current->exit_code, current, 1);
-		current->exit_code = 0;
-	}
-}
 
 #ifdef CONFIG_X86_32
 # define IS_IA32	1
@@ -1432,8 +1409,9 @@ asmregparm long syscall_trace_enter(stru
 	if (unlikely(test_thread_flag(TIF_SYSCALL_EMU)))
 		ret = -1L;
 
-	if (ret || test_thread_flag(TIF_SYSCALL_TRACE))
-		syscall_trace(regs);
+	if ((ret || test_thread_flag(TIF_SYSCALL_TRACE)) &&
+	    tracehook_report_syscall_entry(regs))
+		ret = -1L;
 
 	if (unlikely(current->audit_context)) {
 		if (IS_IA32)
@@ -1459,7 +1437,7 @@ asmregparm void syscall_trace_leave(stru
 		audit_syscall_exit(AUDITSC_RESULT(regs->ax), regs->ax);
 
 	if (test_thread_flag(TIF_SYSCALL_TRACE))
-		syscall_trace(regs);
+		tracehook_report_syscall_exit(regs, 0);
 
 	/*
 	 * If TIF_SYSCALL_EMU is set, we only get here because of
@@ -1475,6 +1453,6 @@ asmregparm void syscall_trace_leave(stru
 	 * system call instruction.
 	 */
 	if (test_thread_flag(TIF_SINGLESTEP) &&
-	    (current->ptrace & PT_PTRACED))
+	    tracehook_consider_fatal_signal(current, SIGTRAP, SIG_DFL))
 		send_sigtrap(current, regs, 0);
 }
diff --git a/arch/x86/kernel/signal_32.c b/arch/x86/kernel/signal_32.c
index 6fb5bcd..4445d26 100644  
--- a/arch/x86/kernel/signal_32.c
+++ b/arch/x86/kernel/signal_32.c
@@ -17,6 +17,7 @@
 #include <linux/errno.h>
 #include <linux/sched.h>
 #include <linux/wait.h>
+#include <linux/tracehook.h>
 #include <linux/elf.h>
 #include <linux/smp.h>
 #include <linux/mm.h>
@@ -558,8 +559,6 @@ handle_signal(unsigned long sig, siginfo
 	 * handler too.
 	 */
 	regs->flags &= ~X86_EFLAGS_TF;
-	if (test_thread_flag(TIF_SINGLESTEP))
-		ptrace_notify(SIGTRAP);
 
 	spin_lock_irq(&current->sighand->siglock);
 	sigorsets(&current->blocked, &current->blocked, &ka->sa.sa_mask);
@@ -568,6 +567,9 @@ handle_signal(unsigned long sig, siginfo
 	recalc_sigpending();
 	spin_unlock_irq(&current->sighand->siglock);
 
+	tracehook_signal_handler(sig, info, ka, regs,
+				 test_thread_flag(TIF_SINGLESTEP));
+
 	return 0;
 }
 
@@ -661,5 +663,10 @@ do_notify_resume(struct pt_regs *regs, v
 	if (thread_info_flags & _TIF_SIGPENDING)
 		do_signal(regs);
 
+	if (thread_info_flags & _TIF_NOTIFY_RESUME) {
+		clear_thread_flag(TIF_NOTIFY_RESUME);
+		tracehook_notify_resume(regs);
+	}
+
 	clear_thread_flag(TIF_IRET);
 }
diff --git a/arch/x86/kernel/signal_64.c b/arch/x86/kernel/signal_64.c
index ca316b5..1e19338 100644  
--- a/arch/x86/kernel/signal_64.c
+++ b/arch/x86/kernel/signal_64.c
@@ -15,6 +15,7 @@
 #include <linux/errno.h>
 #include <linux/wait.h>
 #include <linux/ptrace.h>
+#include <linux/tracehook.h>
 #include <linux/unistd.h>
 #include <linux/stddef.h>
 #include <linux/personality.h>
@@ -26,6 +27,7 @@
 #include <asm/proto.h>
 #include <asm/ia32_unistd.h>
 #include <asm/mce.h>
+#include <asm/syscall.h>
 #include "sigframe.h"
 
 #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
@@ -355,35 +357,6 @@ give_sigsegv:
 }
 
 /*
- * Return -1L or the syscall number that @regs is executing.
- */
-static long current_syscall(struct pt_regs *regs)
-{
-	/*
-	 * We always sign-extend a -1 value being set here,
-	 * so this is always either -1L or a syscall number.
-	 */
-	return regs->orig_ax;
-}
-
-/*
- * Return a value that is -EFOO if the system call in @regs->orig_ax
- * returned an error.  This only works for @regs from @current.
- */
-static long current_syscall_ret(struct pt_regs *regs)
-{
-#ifdef CONFIG_IA32_EMULATION
-	if (test_thread_flag(TIF_IA32))
-		/*
-		 * Sign-extend the value so (int)-EFOO becomes (long)-EFOO
-		 * and will match correctly in comparisons.
-		 */
-		return (int) regs->ax;
-#endif
-	return regs->ax;
-}
-
-/*
  * OK, we're invoking a handler
  */	
 
@@ -394,9 +367,9 @@ handle_signal(unsigned long sig, siginfo
 	int ret;
 
 	/* Are we from a system call? */
-	if (current_syscall(regs) >= 0) {
+	if (syscall_get_nr(current, regs) >= 0) {
 		/* If so, check system call restarting.. */
-		switch (current_syscall_ret(regs)) {
+		switch (syscall_get_error(current, regs)) {
 		case -ERESTART_RESTARTBLOCK:
 		case -ERESTARTNOHAND:
 			regs->ax = -EINTR;
@@ -453,8 +426,6 @@ handle_signal(unsigned long sig, siginfo
 		 * handler too.
 		 */
 		regs->flags &= ~X86_EFLAGS_TF;
-		if (test_thread_flag(TIF_SINGLESTEP))
-			ptrace_notify(SIGTRAP);
 
 		spin_lock_irq(&current->sighand->siglock);
 		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
@@ -462,6 +433,9 @@ handle_signal(unsigned long sig, siginfo
 			sigaddset(&current->blocked,sig);
 		recalc_sigpending();
 		spin_unlock_irq(&current->sighand->siglock);
+
+		tracehook_signal_handler(sig, info, ka, regs,
+					 test_thread_flag(TIF_SINGLESTEP));
 	}
 
 	return ret;
@@ -518,9 +492,9 @@ static void do_signal(struct pt_regs *re
 	}
 
 	/* Did we come from a system call? */
-	if (current_syscall(regs) >= 0) {
+	if (syscall_get_nr(current, regs) >= 0) {
 		/* Restart the system call - no handlers present */
-		switch (current_syscall_ret(regs)) {
+		switch (syscall_get_error(current, regs)) {
 		case -ERESTARTNOHAND:
 		case -ERESTARTSYS:
 		case -ERESTARTNOINTR:
@@ -558,6 +532,11 @@ void do_notify_resume(struct pt_regs *re
 	/* deal with pending signal delivery */
 	if (thread_info_flags & _TIF_SIGPENDING)
 		do_signal(regs);
+
+	if (thread_info_flags & _TIF_NOTIFY_RESUME) {
+		clear_thread_flag(TIF_NOTIFY_RESUME);
+		tracehook_notify_resume(regs);
+	}
 }
 
 void signal_fault(struct pt_regs *regs, void __user *frame, char *where)
diff --git a/include/asm-x86/ptrace.h b/include/asm-x86/ptrace.h
index 8a71db8..91a77f5 100644  
--- a/include/asm-x86/ptrace.h
+++ b/include/asm-x86/ptrace.h
@@ -213,6 +213,11 @@ static inline unsigned long frame_pointe
 	return regs->bp;
 }
 
+static inline unsigned long user_stack_pointer(struct pt_regs *regs)
+{
+	return regs->sp;
+}
+
 /*
  * These are defined as per linux/ptrace.h, which see.
  */
diff --git a/include/asm-x86/syscall.h b/include/asm-x86/syscall.h
new file mode 100644
index ...04c47dc 100644  
--- /dev/null
+++ b/include/asm-x86/syscall.h
@@ -0,0 +1,211 @@
+/*
+ * Access to user system call parameters and results
+ *
+ * Copyright (C) 2008 Red Hat, Inc.  All rights reserved.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU General Public License v.2.
+ *
+ * See asm-generic/syscall.h for descriptions of what we must do here.
+ */
+
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H	1
+
+#include <linux/sched.h>
+#include <linux/err.h>
+
+static inline long syscall_get_nr(struct task_struct *task,
+				  struct pt_regs *regs)
+{
+	/*
+	 * We always sign-extend a -1 value being set here,
+	 * so this is always either -1L or a syscall number.
+	 */
+	return regs->orig_ax;
+}
+
+static inline void syscall_rollback(struct task_struct *task,
+				    struct pt_regs *regs)
+{
+	regs->ax = regs->orig_ax;
+}
+
+static inline long syscall_get_error(struct task_struct *task,
+				     struct pt_regs *regs)
+{
+	unsigned long error = regs->ax;
+#ifdef CONFIG_IA32_EMULATION
+	/*
+	 * TS_COMPAT is set for 32-bit syscall entries and then
+	 * remains set until we return to user mode.
+	 */
+	if (task_thread_info(task)->status & TS_COMPAT)
+		/*
+		 * Sign-extend the value so (int)-EFOO becomes (long)-EFOO
+		 * and will match correctly in comparisons.
+		 */
+		error = (long) (int) error;
+#endif
+	return IS_ERR_VALUE(error) ? error : 0;
+}
+
+static inline long syscall_get_return_value(struct task_struct *task,
+					    struct pt_regs *regs)
+{
+	return regs->ax;
+}
+
+static inline void syscall_set_return_value(struct task_struct *task,
+					    struct pt_regs *regs,
+					    int error, long val)
+{
+	regs->ax = (long) error ?: val;
+}
+
+#ifdef CONFIG_X86_32
+
+static inline void syscall_get_arguments(struct task_struct *task,
+					 struct pt_regs *regs,
+					 unsigned int i, unsigned int n,
+					 unsigned long *args)
+{
+	BUG_ON(i + n > 6);
+	memcpy(args, &regs->bx + i, n * sizeof(args[0]));
+}
+
+static inline void syscall_set_arguments(struct task_struct *task,
+					 struct pt_regs *regs,
+					 unsigned int i, unsigned int n,
+					 const unsigned long *args)
+{
+	BUG_ON(i + n > 6);
+	memcpy(&regs->bx + i, args, n * sizeof(args[0]));
+}
+
+#else	 /* CONFIG_X86_64 */
+
+static inline void syscall_get_arguments(struct task_struct *task,
+					 struct pt_regs *regs,
+					 unsigned int i, unsigned int n,
+					 unsigned long *args)
+{
+# ifdef CONFIG_IA32_EMULATION
+	if (task_thread_info(task)->status & TS_COMPAT)
+		switch (i + n) {
+		case 6:
+			if (!n--) break;
+			*args++ = regs->bp;
+		case 5:
+			if (!n--) break;
+			*args++ = regs->di;
+		case 4:
+			if (!n--) break;
+			*args++ = regs->si;
+		case 3:
+			if (!n--) break;
+			*args++ = regs->dx;
+		case 2:
+			if (!n--) break;
+			*args++ = regs->cx;
+		case 1:
+			if (!n--) break;
+			*args++ = regs->bx;
+		case 0:
+			if (!n--) break;
+		default:
+			BUG();
+			break;
+		}
+	else
+# endif
+		switch (i + n) {
+		case 6:
+			if (!n--) break;
+			*args++ = regs->r9;
+		case 5:
+			if (!n--) break;
+			*args++ = regs->r8;
+		case 4:
+			if (!n--) break;
+			*args++ = regs->r10;
+		case 3:
+			if (!n--) break;
+			*args++ = regs->dx;
+		case 2:
+			if (!n--) break;
+			*args++ = regs->si;
+		case 1:
+			if (!n--) break;
+			*args++ = regs->di;
+		case 0:
+			if (!n--) break;
+		default:
+			BUG();
+			break;
+		}
+}
+
+static inline void syscall_set_arguments(struct task_struct *task,
+					 struct pt_regs *regs,
+					 unsigned int i, unsigned int n,
+					 const unsigned long *args)
+{
+# ifdef CONFIG_IA32_EMULATION
+	if (task_thread_info(task)->status & TS_COMPAT)
+		switch (i + n) {
+		case 6:
+			if (!n--) break;
+			regs->bp = *args++;
+		case 5:
+			if (!n--) break;
+			regs->di = *args++;
+		case 4:
+			if (!n--) break;
+			regs->si = *args++;
+		case 3:
+			if (!n--) break;
+			regs->dx = *args++;
+		case 2:
+			if (!n--) break;
+			regs->cx = *args++;
+		case 1:
+			if (!n--) break;
+			regs->bx = *args++;
+		case 0:
+			if (!n--) break;
+		default:
+			BUG();
+		}
+	else
+# endif
+		switch (i + n) {
+		case 6:
+			if (!n--) break;
+			regs->r9 = *args++;
+		case 5:
+			if (!n--) break;
+			regs->r8 = *args++;
+		case 4:
+			if (!n--) break;
+			regs->r10 = *args++;
+		case 3:
+			if (!n--) break;
+			regs->dx = *args++;
+		case 2:
+			if (!n--) break;
+			regs->si = *args++;
+		case 1:
+			if (!n--) break;
+			regs->di = *args++;
+		case 0:
+			if (!n--) break;
+		default:
+			BUG();
+		}
+}
+
+#endif	/* CONFIG_X86_32 */
+
+#endif	/* _ASM_SYSCALL_H */
diff --git a/include/asm-x86/thread_info.h b/include/asm-x86/thread_info.h
index da0a675..4cd5b7b 100644  
--- a/include/asm-x86/thread_info.h
+++ b/include/asm-x86/thread_info.h
@@ -71,6 +71,7 @@ struct thread_info {
  * Warning: layout of LSW is hardcoded in entry.S
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
+#define TIF_NOTIFY_RESUME	1	/* callback before returning to user */
 #define TIF_SIGPENDING		2	/* signal pending */
 #define TIF_NEED_RESCHED	3	/* rescheduling necessary */
 #define TIF_SINGLESTEP		4	/* reenable singlestep on user return*/
@@ -93,6 +94,7 @@ struct thread_info {
 #define TIF_BTS_TRACE_TS	27      /* record scheduling event timestamps */
 
 #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)
+#define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
 #define _TIF_SINGLESTEP		(1 << TIF_SINGLESTEP)
 #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
@@ -133,7 +135,7 @@ struct thread_info {
 
 /* Only used for 64 bit */
 #define _TIF_DO_NOTIFY_MASK						\
-	(_TIF_SIGPENDING|_TIF_MCE_NOTIFY)
+	(_TIF_SIGPENDING|_TIF_MCE_NOTIFY|_TIF_NOTIFY_RESUME)
 
 /* flags to check in __switch_to() */
 #define _TIF_WORK_CTXSW							\

linux-2.6.27-ext-dir-corruption-fix.patch:

--- NEW FILE linux-2.6.27-ext-dir-corruption-fix.patch ---
This is a trivial backport of the following upstream commits:

- bd39597cbd42a784105a04010100e27267481c67 (ext2)
- cdbf6dba28e8e6268c8420857696309470009fd9 (ext3)

This addresses CVE-2008-3528

ext[234]: Avoid printk floods in the face of directory corruption

Note: some people thinks this represents a security bug, since it
might make the system go away while it is printing a large number of
console messages, especially if a serial console is involved.  Hence,
it has been assigned CVE-2008-3528, but it requires that the attacker
either has physical access to your machine to insert a USB disk with a
corrupted filesystem image (at which point why not just hit the power
button), or is otherwise able to convince the system administrator to
mount an arbitrary filesystem image (at which point why not just
include a setuid shell or world-writable hard disk device file or some
such).  Me, I think they're just being silly. --tytso

Signed-off-by: Eric Sandeen <sandeen at redhat.com>
Signed-off-by: "Theodore Ts'o" <tytso at mit.edu>
Cc: linux-ext4 at vger.kernel.org
Cc: Eugene Teo <eugeneteo at kernel.sg>
---

Index: linux-2.6.27.noarch/fs/ext2/dir.c
===================================================================
--- linux-2.6.27.noarch.orig/fs/ext2/dir.c	2008-10-09 17:13:53.000000000 -0500
+++ linux-2.6.27.noarch/fs/ext2/dir.c	2008-10-22 10:17:18.596064472 -0500
@@ -103,7 +103,7 @@ static int ext2_commit_chunk(struct page
 	return err;
 }
 
-static void ext2_check_page(struct page *page)
+static void ext2_check_page(struct page *page, int quiet)
 {
 	struct inode *dir = page->mapping->host;
 	struct super_block *sb = dir->i_sb;
@@ -146,10 +146,10 @@ out:
 	/* Too bad, we had an error */
 
 Ebadsize:
-	ext2_error(sb, "ext2_check_page",
-		"size of directory #%lu is not a multiple of chunk size",
-		dir->i_ino
-	);
+	if (!quiet)
+		ext2_error(sb, __func__,
+			"size of directory #%lu is not a multiple "
+			"of chunk size", dir->i_ino);
 	goto fail;
 Eshort:
 	error = "rec_len is smaller than minimal";
@@ -166,32 +166,36 @@ Espan:
 Einumber:
 	error = "inode out of bounds";
 bad_entry:
-	ext2_error (sb, "ext2_check_page", "bad entry in directory #%lu: %s - "
-		"offset=%lu, inode=%lu, rec_len=%d, name_len=%d",
-		dir->i_ino, error, (page->index<<PAGE_CACHE_SHIFT)+offs,
-		(unsigned long) le32_to_cpu(p->inode),
-		rec_len, p->name_len);
+	if (!quiet)
+		ext2_error(sb, __func__, "bad entry in directory #%lu: : %s - "
+			"offset=%lu, inode=%lu, rec_len=%d, name_len=%d",
+			dir->i_ino, error, (page->index<<PAGE_CACHE_SHIFT)+offs,
+			(unsigned long) le32_to_cpu(p->inode),
+			rec_len, p->name_len);
 	goto fail;
 Eend:
-	p = (ext2_dirent *)(kaddr + offs);
-	ext2_error (sb, "ext2_check_page",
-		"entry in directory #%lu spans the page boundary"
-		"offset=%lu, inode=%lu",
-		dir->i_ino, (page->index<<PAGE_CACHE_SHIFT)+offs,
-		(unsigned long) le32_to_cpu(p->inode));
+	if (!quiet) {
+		p = (ext2_dirent *)(kaddr + offs);
+		ext2_error(sb, "ext2_check_page",
+			"entry in directory #%lu spans the page boundary"
+			"offset=%lu, inode=%lu",
+			dir->i_ino, (page->index<<PAGE_CACHE_SHIFT)+offs,
+			(unsigned long) le32_to_cpu(p->inode));
+	}
 fail:
 	SetPageChecked(page);
 	SetPageError(page);
 }
 
-static struct page * ext2_get_page(struct inode *dir, unsigned long n)
+static struct page * ext2_get_page(struct inode *dir, unsigned long n,
+				   int quiet)
 {
 	struct address_space *mapping = dir->i_mapping;
 	struct page *page = read_mapping_page(mapping, n, NULL);
 	if (!IS_ERR(page)) {
 		kmap(page);
 		if (!PageChecked(page))
-			ext2_check_page(page);
+			ext2_check_page(page, quiet);
 		if (PageError(page))
 			goto fail;
 	}
@@ -292,7 +296,7 @@ ext2_readdir (struct file * filp, void *
 	for ( ; n < npages; n++, offset = 0) {
 		char *kaddr, *limit;
 		ext2_dirent *de;
-		struct page *page = ext2_get_page(inode, n);
+		struct page *page = ext2_get_page(inode, n, 0);
 
 		if (IS_ERR(page)) {
 			ext2_error(sb, __func__,
@@ -361,6 +365,7 @@ struct ext2_dir_entry_2 * ext2_find_entr
 	struct page *page = NULL;
 	struct ext2_inode_info *ei = EXT2_I(dir);
 	ext2_dirent * de;
+	int dir_has_error = 0;
 
 	if (npages == 0)
 		goto out;
@@ -374,7 +379,7 @@ struct ext2_dir_entry_2 * ext2_find_entr
 	n = start;
 	do {
 		char *kaddr;
-		page = ext2_get_page(dir, n);
+		page = ext2_get_page(dir, n, dir_has_error);
 		if (!IS_ERR(page)) {
 			kaddr = page_address(page);
 			de = (ext2_dirent *) kaddr;
@@ -391,7 +396,9 @@ struct ext2_dir_entry_2 * ext2_find_entr
 				de = ext2_next_entry(de);
 			}
 			ext2_put_page(page);
-		}
+		} else
+			dir_has_error = 1;
+
 		if (++n >= npages)
 			n = 0;
 		/* next page is past the blocks we've got */
@@ -414,7 +421,7 @@ found:
 
 struct ext2_dir_entry_2 * ext2_dotdot (struct inode *dir, struct page **p)
 {
-	struct page *page = ext2_get_page(dir, 0);
+	struct page *page = ext2_get_page(dir, 0, 0);
 	ext2_dirent *de = NULL;
 
 	if (!IS_ERR(page)) {
@@ -487,7 +494,7 @@ int ext2_add_link (struct dentry *dentry
 	for (n = 0; n <= npages; n++) {
 		char *dir_end;
 
-		page = ext2_get_page(dir, n);
+		page = ext2_get_page(dir, n, 0);
 		err = PTR_ERR(page);
 		if (IS_ERR(page))
 			goto out;
@@ -655,14 +662,17 @@ int ext2_empty_dir (struct inode * inode
 {
 	struct page *page = NULL;
 	unsigned long i, npages = dir_pages(inode);
+	int dir_has_error = 0;
 
 	for (i = 0; i < npages; i++) {
 		char *kaddr;
 		ext2_dirent * de;
-		page = ext2_get_page(inode, i);
+		page = ext2_get_page(inode, i, dir_has_error);
 
-		if (IS_ERR(page))
+		if (IS_ERR(page)) {
+			dir_has_error = 1;
 			continue;
+		}
 
 		kaddr = page_address(page);
 		de = (ext2_dirent *)kaddr;
Index: linux-2.6.27.noarch/fs/ext3/dir.c
===================================================================
--- linux-2.6.27.noarch.orig/fs/ext3/dir.c	2008-10-09 17:13:53.000000000 -0500
+++ linux-2.6.27.noarch/fs/ext3/dir.c	2008-10-22 10:17:18.614001252 -0500
@@ -102,6 +102,7 @@ static int ext3_readdir(struct file * fi
 	int err;
 	struct inode *inode = filp->f_path.dentry->d_inode;
 	int ret = 0;
+	int dir_has_error = 0;
 
 	sb = inode->i_sb;
 
@@ -148,9 +149,12 @@ static int ext3_readdir(struct file * fi
 		 * of recovering data when there's a bad sector
 		 */
 		if (!bh) {
-			ext3_error (sb, "ext3_readdir",
-				"directory #%lu contains a hole at offset %lu",
-				inode->i_ino, (unsigned long)filp->f_pos);
+			if (!dir_has_error) {
+				ext3_error(sb, __func__, "directory #%lu "
+					"contains a hole at offset %lld",
+					inode->i_ino, filp->f_pos);
+				dir_has_error = 1;
+			}
 			/* corrupt size?  Maybe no more blocks to read */
 			if (filp->f_pos > inode->i_blocks << 9)
 				break;

linux-2.6.27-ext4-stable-patch-queue.patch:

--- NEW FILE linux-2.6.27-ext4-stable-patch-queue.patch ---
Stable ext4 patch queue as of 2ce653ef11f1390abf139eba9eeb9d24d95ad9ec

Includes:

# Patches pushed to Linus as of 2.6.27-git3
pushed-to-linus-2.6.27-git3

ext4__remove_an_old_reference_to_ext4dev
ext4__fix_kconfig_typo_for_ext4dev

# bug fixes
ext4__free_ext4_prealloc_space_using_kmem_cache_free
do_mballoc_init_before_doing_filesystem_recovery

# New patches from Aneesh
use_an_rb_tree_for_tracking_blocks_freed_during_transaction
dont_reuse_released_data_blocks_until_transaction_commits

... but not yet the writeback changes

Index: linux-2.6/Documentation/filesystems/ext4.txt
===================================================================
--- linux-2.6.orig/Documentation/filesystems/ext4.txt	2008-10-16 10:47:04.961000724 -0500
+++ linux-2.6/Documentation/filesystems/ext4.txt	2008-10-16 10:49:41.965000823 -0500
@@ -32,9 +32,9 @@ Mailing list: linux-ext4 at vger.kernel.org
     you will need to merge your changes with the version from e2fsprogs
     1.41.x.
 
-  - Create a new filesystem using the ext4dev filesystem type:
+  - Create a new filesystem using the ext4 filesystem type:
 
-    	# mke2fs -t ext4dev /dev/hda1
+    	# mke2fs -t ext4 /dev/hda1
 
     Or configure an existing ext3 filesystem to support extents and set
     the test_fs flag to indicate that it's ok for an in-development
@@ -47,13 +47,13 @@ Mailing list: linux-ext4 at vger.kernel.org
 
         # tune2fs -I 256 /dev/hda1
 
-    (Note: we currently do not have tools to convert an ext4dev
+    (Note: we currently do not have tools to convert an ext4
     filesystem back to ext3; so please do not do try this on production
     filesystems.)
 
   - Mounting:
 
-	# mount -t ext4dev /dev/hda1 /wherever
+	# mount -t ext4 /dev/hda1 /wherever
 
   - When comparing performance with other filesystems, remember that
     ext3/4 by default offers higher data integrity guarantees than most.
@@ -177,6 +177,11 @@ barrier=<0|1(*)>	This enables/disables t
 			your disks are battery-backed in one way or another,
 			disabling barriers may safely improve performance.
 
+inode_readahead=n	This tuning parameter controls the maximum
+			number of inode table blocks that ext4's inode
+			table readahead algorithm will pre-read into
+			the buffer cache.  The default value is 32 blocks.
+
 orlov		(*)	This enables the new Orlov block allocator. It is
 			enabled by default.
 
@@ -218,6 +223,11 @@ errors=remount-ro(*)	Remount the filesys
 errors=continue		Keep going on a filesystem error.
 errors=panic		Panic and halt the machine if an error occurs.
 
+data_err=ignore(*)	Just print an error message if an error occurs
+			in a file data buffer in ordered mode.
+data_err=abort		Abort the journal if an error occurs in a file
+			data buffer in ordered mode.
+
 grpid			Give objects the same group ID as their creator.
 bsdgroups
 
@@ -252,6 +262,7 @@ stripe=n		Number of filesystem blocks th
 delalloc	(*)	Deferring block allocation until write-out time.
 nodelalloc		Disable delayed allocation. Blocks are allocation
 			when data is copied from user to page cache.
+
 Data Mode
 =========
 There are 3 different data modes:
Index: linux-2.6/Documentation/filesystems/fiemap.txt
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6/Documentation/filesystems/fiemap.txt	2008-10-16 10:49:41.972001100 -0500
@@ -0,0 +1,228 @@
+============
+Fiemap Ioctl
+============
+
+The fiemap ioctl is an efficient method for userspace to get file
+extent mappings. Instead of block-by-block mapping (such as bmap), fiemap
+returns a list of extents.
+
+
+Request Basics
+--------------
+
+A fiemap request is encoded within struct fiemap:
+
+struct fiemap {
+	__u64	fm_start;	 /* logical offset (inclusive) at
+				  * which to start mapping (in) */
+	__u64	fm_length;	 /* logical length of mapping which
+				  * userspace cares about (in) */
+	__u32	fm_flags;	 /* FIEMAP_FLAG_* flags for request (in/out) */
+	__u32	fm_mapped_extents; /* number of extents that were
+				    * mapped (out) */
+	__u32	fm_extent_count; /* size of fm_extents array (in) */
+	__u32	fm_reserved;
+	struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */
+};
+
+
+fm_start, and fm_length specify the logical range within the file
+which the process would like mappings for. Extents returned mirror
+those on disk - that is, the logical offset of the 1st returned extent
+may start before fm_start, and the range covered by the last returned
+extent may end after fm_length. All offsets and lengths are in bytes.
+
+Certain flags to modify the way in which mappings are looked up can be
+set in fm_flags. If the kernel doesn't understand some particular
+flags, it will return EBADR and the contents of fm_flags will contain
+the set of flags which caused the error. If the kernel is compatible
+with all flags passed, the contents of fm_flags will be unmodified.
+It is up to userspace to determine whether rejection of a particular
+flag is fatal to it's operation. This scheme is intended to allow the
+fiemap interface to grow in the future but without losing
+compatibility with old software.
+
+fm_extent_count specifies the number of elements in the fm_extents[] array
+that can be used to return extents.  If fm_extent_count is zero, then the
+fm_extents[] array is ignored (no extents will be returned), and the
+fm_mapped_extents count will hold the number of extents needed in
+fm_extents[] to hold the file's current mapping.  Note that there is
+nothing to prevent the file from changing between calls to FIEMAP.
+
+The following flags can be set in fm_flags:
+
+* FIEMAP_FLAG_SYNC
+If this flag is set, the kernel will sync the file before mapping extents.
+
+* FIEMAP_FLAG_XATTR
+If this flag is set, the extents returned will describe the inodes
+extended attribute lookup tree, instead of it's data tree.
+
+
+Extent Mapping
+--------------
+
+Extent information is returned within the embedded fm_extents array
+which userspace must allocate along with the fiemap structure. The
+number of elements in the fiemap_extents[] array should be passed via
+fm_extent_count. The number of extents mapped by kernel will be
+returned via fm_mapped_extents. If the number of fiemap_extents
+allocated is less than would be required to map the requested range,
+the maximum number of extents that can be mapped in the fm_extent[]
+array will be returned and fm_mapped_extents will be equal to
+fm_extent_count. In that case, the last extent in the array will not
+complete the requested range and will not have the FIEMAP_EXTENT_LAST
+flag set (see the next section on extent flags).
+
+Each extent is described by a single fiemap_extent structure as
+returned in fm_extents.
+
+struct fiemap_extent {
+	__u64	fe_logical;  /* logical offset in bytes for the start of
+			      * the extent */
+	__u64	fe_physical; /* physical offset in bytes for the start
+			      * of the extent */
+	__u64	fe_length;   /* length in bytes for the extent */
+	__u64	fe_reserved64[2];
+	__u32	fe_flags;    /* FIEMAP_EXTENT_* flags for this extent */
+	__u32	fe_reserved[3];
+};
+
+All offsets and lengths are in bytes and mirror those on disk.  It is valid
+for an extents logical offset to start before the request or it's logical
+length to extend past the request.  Unless FIEMAP_EXTENT_NOT_ALIGNED is
+returned, fe_logical, fe_physical, and fe_length will be aligned to the
+block size of the file system.  With the exception of extents flagged as
+FIEMAP_EXTENT_MERGED, adjacent extents will not be merged.
+
+The fe_flags field contains flags which describe the extent returned.
+A special flag, FIEMAP_EXTENT_LAST is always set on the last extent in
+the file so that the process making fiemap calls can determine when no
+more extents are available, without having to call the ioctl again.
+
+Some flags are intentionally vague and will always be set in the
+presence of other more specific flags. This way a program looking for
+a general property does not have to know all existing and future flags
+which imply that property.
+
+For example, if FIEMAP_EXTENT_DATA_INLINE or FIEMAP_EXTENT_DATA_TAIL
+are set, FIEMAP_EXTENT_NOT_ALIGNED will also be set. A program looking
+for inline or tail-packed data can key on the specific flag. Software
[...9152 lines suppressed...]
+	__u64 fe_reserved64[2];
+	__u32 fe_flags;    /* FIEMAP_EXTENT_* flags for this extent */
+	__u32 fe_reserved[3];
+};
+
+struct fiemap {
+	__u64 fm_start;		/* logical offset (inclusive) at
+				 * which to start mapping (in) */
+	__u64 fm_length;	/* logical length of mapping which
+				 * userspace wants (in) */
+	__u32 fm_flags;		/* FIEMAP_FLAG_* flags for request (in/out) */
+	__u32 fm_mapped_extents;/* number of extents that were mapped (out) */
+	__u32 fm_extent_count;  /* size of fm_extents array (in) */
+	__u32 fm_reserved;
+	struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */
+};
+
+#define FIEMAP_MAX_OFFSET	(~0ULL)
+
+#define FIEMAP_FLAG_SYNC	0x00000001 /* sync file data before map */
+#define FIEMAP_FLAG_XATTR	0x00000002 /* map extended attribute tree */
+
+#define FIEMAP_FLAGS_COMPAT	(FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR)
+
+#define FIEMAP_EXTENT_LAST		0x00000001 /* Last extent in file. */
+#define FIEMAP_EXTENT_UNKNOWN		0x00000002 /* Data location unknown. */
+#define FIEMAP_EXTENT_DELALLOC		0x00000004 /* Location still pending.
+						    * Sets EXTENT_UNKNOWN. */
+#define FIEMAP_EXTENT_ENCODED		0x00000008 /* Data can not be read
+						    * while fs is unmounted */
+#define FIEMAP_EXTENT_DATA_ENCRYPTED	0x00000080 /* Data is encrypted by fs.
+						    * Sets EXTENT_NO_BYPASS. */
+#define FIEMAP_EXTENT_NOT_ALIGNED	0x00000100 /* Extent offsets may not be
+						    * block aligned. */
+#define FIEMAP_EXTENT_DATA_INLINE	0x00000200 /* Data mixed with metadata.
+						    * Sets EXTENT_NOT_ALIGNED.*/
+#define FIEMAP_EXTENT_DATA_TAIL		0x00000400 /* Multiple files in block.
+						    * Sets EXTENT_NOT_ALIGNED.*/
+#define FIEMAP_EXTENT_UNWRITTEN		0x00000800 /* Space allocated, but
+						    * no data (i.e. zero). */
+#define FIEMAP_EXTENT_MERGED		0x00001000 /* File does not natively
+						    * support extents. Result
+						    * merged for efficiency. */
+
+#endif /* _LINUX_FIEMAP_H */
Index: linux-2.6/include/linux/fs.h
===================================================================
--- linux-2.6.orig/include/linux/fs.h	2008-10-16 10:47:05.075001293 -0500
+++ linux-2.6/include/linux/fs.h	2008-10-16 10:49:43.395000940 -0500
@@ -231,6 +231,7 @@ extern int dir_notify_enable;
 #define	FS_IOC_SETFLAGS			_IOW('f', 2, long)
 #define	FS_IOC_GETVERSION		_IOR('v', 1, long)
 #define	FS_IOC_SETVERSION		_IOW('v', 2, long)
+#define FS_IOC_FIEMAP			_IOWR('f', 11, struct fiemap)
 #define FS_IOC32_GETFLAGS		_IOR('f', 1, int)
 #define FS_IOC32_SETFLAGS		_IOW('f', 2, int)
 #define FS_IOC32_GETVERSION		_IOR('v', 1, int)
@@ -291,6 +292,7 @@ extern int dir_notify_enable;
 #include <linux/mutex.h>
 #include <linux/capability.h>
 #include <linux/semaphore.h>
+#include <linux/fiemap.h>
 
 #include <asm/atomic.h>
 #include <asm/byteorder.h>
@@ -1179,6 +1181,20 @@ extern void dentry_unhash(struct dentry 
 extern int file_permission(struct file *, int);
 
 /*
+ * VFS FS_IOC_FIEMAP helper definitions.
+ */
+struct fiemap_extent_info {
+	unsigned int fi_flags;		/* Flags as passed from user */
+	unsigned int fi_extents_mapped;	/* Number of mapped extents */
+	unsigned int fi_extents_max;	/* Size of fiemap_extent array */
+	struct fiemap_extent *fi_extents_start; /* Start of fiemap_extent
+						 * array */
+};
+int fiemap_fill_next_extent(struct fiemap_extent_info *info, u64 logical,
+			    u64 phys, u64 len, u32 flags);
+int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags);
+
+/*
  * File types
  *
  * NOTE! These match bits 12..15 of stat.st_mode
@@ -1287,6 +1303,8 @@ struct inode_operations {
 	void (*truncate_range)(struct inode *, loff_t, loff_t);
 	long (*fallocate)(struct inode *inode, int mode, loff_t offset,
 			  loff_t len);
+	int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
+		      u64 len);
 };
 
 struct seq_file;
@@ -1980,6 +1998,9 @@ extern int vfs_fstat(unsigned int, struc
 
 extern int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd,
 		    unsigned long arg);
+extern int generic_block_fiemap(struct inode *inode,
+				struct fiemap_extent_info *fieinfo, u64 start,
+				u64 len, get_block_t *get_block);
 
 extern void get_filesystem(struct file_system_type *fs);
 extern void put_filesystem(struct file_system_type *fs);
Index: linux-2.6/include/linux/jbd2.h
===================================================================
--- linux-2.6.orig/include/linux/jbd2.h	2008-10-16 10:47:05.080000985 -0500
+++ linux-2.6/include/linux/jbd2.h	2008-10-16 10:49:43.451001226 -0500
@@ -850,7 +850,8 @@ struct journal_s
 	 */
 	struct block_device	*j_dev;
 	int			j_blocksize;
-	unsigned long long		j_blk_offset;
+	unsigned long long	j_blk_offset;
+	char			j_devname[BDEVNAME_SIZE+24];
 
 	/*
 	 * Device which holds the client fs.  For internal journal this will be
@@ -966,6 +967,9 @@ struct journal_s
 #define JBD2_FLUSHED	0x008	/* The journal superblock has been flushed */
 #define JBD2_LOADED	0x010	/* The journal superblock has been loaded */
 #define JBD2_BARRIER	0x020	/* Use IDE barriers */
+#define JBD2_ABORT_ON_SYNCDATA_ERR	0x040	/* Abort the journal on file
+						 * data write error in ordered
+						 * mode */
 
 /*
  * Function declarations for the journaling transaction and buffer
@@ -1059,7 +1063,7 @@ extern void	   jbd2_journal_clear_featur
 		   (journal_t *, unsigned long, unsigned long, unsigned long);
 extern int	   jbd2_journal_create     (journal_t *);
 extern int	   jbd2_journal_load       (journal_t *journal);
-extern void	   jbd2_journal_destroy    (journal_t *);
+extern int	   jbd2_journal_destroy    (journal_t *);
 extern int	   jbd2_journal_recover    (journal_t *journal);
 extern int	   jbd2_journal_wipe       (journal_t *, int);
 extern int	   jbd2_journal_skip_recovery	(journal_t *);
Index: linux-2.6/include/linux/percpu_counter.h
===================================================================
--- linux-2.6.orig/include/linux/percpu_counter.h	2008-10-16 10:47:05.081064215 -0500
+++ linux-2.6/include/linux/percpu_counter.h	2008-10-16 10:49:43.508001156 -0500
@@ -35,7 +35,7 @@ int percpu_counter_init_irq(struct percp
 void percpu_counter_destroy(struct percpu_counter *fbc);
 void percpu_counter_set(struct percpu_counter *fbc, s64 amount);
 void __percpu_counter_add(struct percpu_counter *fbc, s64 amount, s32 batch);
-s64 __percpu_counter_sum(struct percpu_counter *fbc, int set);
+s64 __percpu_counter_sum(struct percpu_counter *fbc);
 
 static inline void percpu_counter_add(struct percpu_counter *fbc, s64 amount)
 {
@@ -44,19 +44,13 @@ static inline void percpu_counter_add(st
 
 static inline s64 percpu_counter_sum_positive(struct percpu_counter *fbc)
 {
-	s64 ret = __percpu_counter_sum(fbc, 0);
+	s64 ret = __percpu_counter_sum(fbc);
 	return ret < 0 ? 0 : ret;
 }
 
-static inline s64 percpu_counter_sum_and_set(struct percpu_counter *fbc)
-{
-	return __percpu_counter_sum(fbc, 1);
-}
-
-
 static inline s64 percpu_counter_sum(struct percpu_counter *fbc)
 {
-	return __percpu_counter_sum(fbc, 0);
+	return __percpu_counter_sum(fbc);
 }
 
 static inline s64 percpu_counter_read(struct percpu_counter *fbc)
Index: linux-2.6/lib/percpu_counter.c
===================================================================
--- linux-2.6.orig/lib/percpu_counter.c	2008-10-16 10:47:05.081064215 -0500
+++ linux-2.6/lib/percpu_counter.c	2008-10-16 10:49:43.558206422 -0500
@@ -52,7 +52,7 @@ EXPORT_SYMBOL(__percpu_counter_add);
  * Add up all the per-cpu counts, return the result.  This is a more accurate
  * but much slower version of percpu_counter_read_positive()
  */
-s64 __percpu_counter_sum(struct percpu_counter *fbc, int set)
+s64 __percpu_counter_sum(struct percpu_counter *fbc)
 {
 	s64 ret;
 	int cpu;
@@ -62,11 +62,9 @@ s64 __percpu_counter_sum(struct percpu_c
 	for_each_online_cpu(cpu) {
 		s32 *pcount = per_cpu_ptr(fbc->counters, cpu);
 		ret += *pcount;
-		if (set)
-			*pcount = 0;
+		*pcount = 0;
 	}
-	if (set)
-		fbc->count = ret;
+	fbc->count = ret;
 
 	spin_unlock(&fbc->lock);
 	return ret;

linux-2.6.27-fs-disable-fiemap.patch:

--- NEW FILE linux-2.6.27-fs-disable-fiemap.patch ---
Index: linux-2.6.27.noarch/fs/ioctl.c
===================================================================
--- linux-2.6.27.noarch.orig/fs/ioctl.c	2008-10-13 12:58:54.000000000 -0500
+++ linux-2.6.27.noarch/fs/ioctl.c	2008-10-13 13:08:06.861000990 -0500
@@ -352,7 +352,12 @@ static int file_ioctl(struct file *filp,
 	case FIBMAP:
 		return ioctl_fibmap(filp, p);
 	case FS_IOC_FIEMAP:
+#if 0
+		/* Until this is released in 2.6.28 we won't turn it on */
 		return ioctl_fiemap(filp, arg);
+#else
+		return -EINVAL;
+#endif
 	case FIGETBSZ:
 		return put_user(inode->i_sb->s_blocksize, p);
 	case FIONREAD:

linux-2.6.27-hwmon-applesmc-2.6.28.patch:

--- NEW FILE linux-2.6.27-hwmon-applesmc-2.6.28.patch ---
Rollup of applesmc updates from 2.6.28-rc

diff -upr a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
--- a/drivers/hwmon/applesmc.c	2008-10-09 18:13:53.000000000 -0400
+++ b/drivers/hwmon/applesmc.c	2008-10-20 17:36:24.000000000 -0400
@@ -49,6 +49,9 @@
 
 #define APPLESMC_MAX_DATA_LENGTH 32
 
+#define APPLESMC_MIN_WAIT	0x0040
+#define APPLESMC_MAX_WAIT	0x8000
+
 #define APPLESMC_STATUS_MASK	0x0f
 #define APPLESMC_READ_CMD	0x10
 #define APPLESMC_WRITE_CMD	0x11
@@ -57,8 +60,8 @@
 
 #define KEY_COUNT_KEY		"#KEY" /* r-o ui32 */
 
-#define LIGHT_SENSOR_LEFT_KEY	"ALV0" /* r-o {alv (6 bytes) */
-#define LIGHT_SENSOR_RIGHT_KEY	"ALV1" /* r-o {alv (6 bytes) */
+#define LIGHT_SENSOR_LEFT_KEY	"ALV0" /* r-o {alv (6-10 bytes) */
+#define LIGHT_SENSOR_RIGHT_KEY	"ALV1" /* r-o {alv (6-10 bytes) */
 #define BACKLIGHT_KEY		"LKSB" /* w-o {lkb (2 bytes) */
 
 #define CLAMSHELL_KEY		"MSLD" /* r-o ui8 (unused) */
@@ -104,6 +107,15 @@ static const char* temperature_sensors_s
 /* Set 6: Macbook3 set */
 	{ "TB0T", "TC0D", "TC0P", "TM0P", "TN0P", "TTF0", "TW0P", "Th0H",
 	  "Th0S", "Th1H", NULL },
+/* Set 7: Macbook Air */
+	{ "TB0T", "TB1S", "TB1T", "TB2S", "TB2T", "TC0D", "TC0P", "TCFP",
+	  "TTF0", "TW0P", "Th0H", "Tp0P", "TpFP", "Ts0P", "Ts0S", NULL },
+/* Set 8: Macbook Pro 4,1 (Penryn) */
+	{ "TB0T", "TC0D", "TC0P", "TG0D", "TG0H", "TTF0", "TW0P", "Th0H",
+	  "Th1H", "Th2H", "Tm0P", "Ts0P", NULL },
+/* Set 9: Macbook Pro 3,1 (Santa Rosa) */
+	{ "TALP", "TB0T", "TC0D", "TC0P", "TG0D", "TG0H", "TTF0", "TW0P",
+	  "Th0H", "Th1H", "Th2H", "Tm0P", "Ts0P", NULL },
 };
 
 /* List of keys used to read/write fan speeds */
@@ -163,25 +175,25 @@ static unsigned int key_at_index;
 static struct workqueue_struct *applesmc_led_wq;
 
 /*
- * __wait_status - Wait up to 2ms for the status port to get a certain value
+ * __wait_status - Wait up to 32ms for the status port to get a certain value
  * (masked with 0x0f), returning zero if the value is obtained.  Callers must
  * hold applesmc_lock.
  */
 static int __wait_status(u8 val)
 {
-	unsigned int i;
+	int us;
 
 	val = val & APPLESMC_STATUS_MASK;
 
-	for (i = 0; i < 200; i++) {
+	for (us = APPLESMC_MIN_WAIT; us < APPLESMC_MAX_WAIT; us <<= 1) {
+		udelay(us);
 		if ((inb(APPLESMC_CMD_PORT) & APPLESMC_STATUS_MASK) == val) {
 			if (debug)
 				printk(KERN_DEBUG
-						"Waited %d us for status %x\n",
-						i*10, val);
+					"Waited %d us for status %x\n",
+					2 * us - APPLESMC_MIN_WAIT, val);
 			return 0;
 		}
-		udelay(10);
 	}
 
 	printk(KERN_WARNING "applesmc: wait status failed: %x != %x\n",
@@ -191,6 +203,25 @@ static int __wait_status(u8 val)
 }
 
 /*
+ * special treatment of command port - on newer macbooks, it seems necessary
+ * to resend the command byte before polling the status again. Callers must
+ * hold applesmc_lock.
+ */
+static int send_command(u8 cmd)
+{
+	int us;
+	for (us = APPLESMC_MIN_WAIT; us < APPLESMC_MAX_WAIT; us <<= 1) {
+		outb(cmd, APPLESMC_CMD_PORT);
+		udelay(us);
+		if ((inb(APPLESMC_CMD_PORT) & APPLESMC_STATUS_MASK) == 0x0c)
+			return 0;
+	}
+	printk(KERN_WARNING "applesmc: command failed: %x -> %x\n",
+		cmd, inb(APPLESMC_CMD_PORT));
+	return -EIO;
+}
+
+/*
  * applesmc_read_key - reads len bytes from a given key, and put them in buffer.
  * Returns zero on success or a negative error on failure. Callers must
  * hold applesmc_lock.
@@ -205,8 +236,7 @@ static int applesmc_read_key(const char*
 		return -EINVAL;
 	}
 
-	outb(APPLESMC_READ_CMD, APPLESMC_CMD_PORT);
-	if (__wait_status(0x0c))
+	if (send_command(APPLESMC_READ_CMD))
 		return -EIO;
 
 	for (i = 0; i < 4; i++) {
@@ -249,8 +279,7 @@ static int applesmc_write_key(const char
 		return -EINVAL;
 	}
 
-	outb(APPLESMC_WRITE_CMD, APPLESMC_CMD_PORT);
-	if (__wait_status(0x0c))
+	if (send_command(APPLESMC_WRITE_CMD))
 		return -EIO;
 
 	for (i = 0; i < 4; i++) {
@@ -284,8 +313,7 @@ static int applesmc_get_key_at_index(int
 	readkey[2] = index >> 8;
 	readkey[3] = index;
 
-	outb(APPLESMC_GET_KEY_BY_INDEX_CMD, APPLESMC_CMD_PORT);
-	if (__wait_status(0x0c))
+	if (send_command(APPLESMC_GET_KEY_BY_INDEX_CMD))
 		return -EIO;
 
 	for (i = 0; i < 4; i++) {
@@ -315,8 +343,7 @@ static int applesmc_get_key_type(char* k
 {
 	int i;
 
-	outb(APPLESMC_GET_KEY_TYPE_CMD, APPLESMC_CMD_PORT);
-	if (__wait_status(0x0c))
+	if (send_command(APPLESMC_GET_KEY_TYPE_CMD))
 		return -EIO;
 
 	for (i = 0; i < 4; i++) {
@@ -325,7 +352,7 @@ static int applesmc_get_key_type(char* k
 			return -EIO;
 	}
 
-	outb(5, APPLESMC_DATA_PORT);
+	outb(6, APPLESMC_DATA_PORT);
 
 	for (i = 0; i < 6; i++) {
 		if (__wait_status(0x05))
@@ -527,17 +554,27 @@ out:
 static ssize_t applesmc_light_show(struct device *dev,
 				struct device_attribute *attr, char *sysfsbuf)
 {
+	static int data_length;
 	int ret;
 	u8 left = 0, right = 0;
-	u8 buffer[6];
+	u8 buffer[10], query[6];
 
 	mutex_lock(&applesmc_lock);
 
-	ret = applesmc_read_key(LIGHT_SENSOR_LEFT_KEY, buffer, 6);
+	if (!data_length) {
+		ret = applesmc_get_key_type(LIGHT_SENSOR_LEFT_KEY, query);
+		if (ret)
+			goto out;
+		data_length = clamp_val(query[0], 0, 10);
+		printk(KERN_INFO "applesmc: light sensor data length set to "
+			"%d\n", data_length);
+	}
+
+	ret = applesmc_read_key(LIGHT_SENSOR_LEFT_KEY, buffer, data_length);
 	left = buffer[2];
 	if (ret)
 		goto out;
-	ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, 6);
+	ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, data_length);
 	right = buffer[2];
 
 out:
@@ -1233,39 +1270,57 @@ static __initdata struct dmi_match_data 
 	{ .accelerometer = 0, .light = 0, .temperature_set = 5 },
 /* MacBook3: accelerometer and temperature set 6 */
 	{ .accelerometer = 1, .light = 0, .temperature_set = 6 },
+/* MacBook Air: accelerometer, backlight and temperature set 7 */
+	{ .accelerometer = 1, .light = 1, .temperature_set = 7 },
+/* MacBook Pro 4: accelerometer, backlight and temperature set 8 */
+	{ .accelerometer = 1, .light = 1, .temperature_set = 8 },
+/* MacBook Pro 3: accelerometer, backlight and temperature set 9 */
+	{ .accelerometer = 1, .light = 1, .temperature_set = 9 },
 };
 
 /* Note that DMI_MATCH(...,"MacBook") will match "MacBookPro1,1".
  * So we need to put "Apple MacBook Pro" before "Apple MacBook". */
 static __initdata struct dmi_system_id applesmc_whitelist[] = {
+	{ applesmc_dmi_match, "Apple MacBook Air", {
+	  DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
+	  DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir") },
+		&applesmc_dmi_data[7]},
+	{ applesmc_dmi_match, "Apple MacBook Pro 4", {
+	  DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
+	  DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro4") },
+		&applesmc_dmi_data[8]},
+	{ applesmc_dmi_match, "Apple MacBook Pro 3", {
+	  DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
+	  DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3") },
+		&applesmc_dmi_data[9]},
 	{ applesmc_dmi_match, "Apple MacBook Pro", {
 	  DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
 	  DMI_MATCH(DMI_PRODUCT_NAME,"MacBookPro") },
-		(void*)&applesmc_dmi_data[0]},
+		&applesmc_dmi_data[0]},
 	{ applesmc_dmi_match, "Apple MacBook (v2)", {
 	  DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
 	  DMI_MATCH(DMI_PRODUCT_NAME,"MacBook2") },
-		(void*)&applesmc_dmi_data[1]},
+		&applesmc_dmi_data[1]},
 	{ applesmc_dmi_match, "Apple MacBook (v3)", {
 	  DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
 	  DMI_MATCH(DMI_PRODUCT_NAME,"MacBook3") },
-		(void*)&applesmc_dmi_data[6]},
+		&applesmc_dmi_data[6]},
 	{ applesmc_dmi_match, "Apple MacBook", {
 	  DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
 	  DMI_MATCH(DMI_PRODUCT_NAME,"MacBook") },
-		(void*)&applesmc_dmi_data[2]},
+		&applesmc_dmi_data[2]},
 	{ applesmc_dmi_match, "Apple Macmini", {
 	  DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
 	  DMI_MATCH(DMI_PRODUCT_NAME,"Macmini") },
-		(void*)&applesmc_dmi_data[3]},
+		&applesmc_dmi_data[3]},
 	{ applesmc_dmi_match, "Apple MacPro2", {
 	  DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
 	  DMI_MATCH(DMI_PRODUCT_NAME,"MacPro2") },
-		(void*)&applesmc_dmi_data[4]},
+		&applesmc_dmi_data[4]},
 	{ applesmc_dmi_match, "Apple iMac", {
 	  DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
 	  DMI_MATCH(DMI_PRODUCT_NAME,"iMac") },
-		(void*)&applesmc_dmi_data[5]},
+		&applesmc_dmi_data[5]},
 	{ .ident = NULL }
 };
 

linux-2.6.27-lirc.patch:

--- NEW FILE linux-2.6.27-lirc.patch ---
Linux Infrared Remote Control drivers

Signed-off-by: Jarod Wilson <jarod at redhat.com>

---
diff -Naurp linux-2.6.27.noarch/drivers/hid/usbhid/hid-quirks.c linux-2.6.27.noarch.lirc/drivers/hid/usbhid/hid-quirks.c
--- linux-2.6.27.noarch/drivers/hid/usbhid/hid-quirks.c	2008-10-09 18:13:53.000000000 -0400
+++ linux-2.6.27.noarch.lirc/drivers/hid/usbhid/hid-quirks.c	2008-10-21 16:40:06.000000000 -0400
@@ -386,6 +386,8 @@
 
 #define USB_VENDOR_ID_SOUNDGRAPH	0x15c2
 #define USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD	0x0038
+#define USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD2	0x0036
+#define USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD3	0x0034
 
 #define USB_VENDOR_ID_SUN		0x0430
 #define USB_DEVICE_ID_RARITAN_KVM_DONGLE	0xcdab
@@ -585,6 +587,8 @@ static const struct hid_blacklist {
 	{ USB_VENDOR_ID_PANJIT, 0x0003, HID_QUIRK_IGNORE },
 	{ USB_VENDOR_ID_PANJIT, 0x0004, HID_QUIRK_IGNORE },
 	{ USB_VENDOR_ID_SOUNDGRAPH, USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD, HID_QUIRK_IGNORE },
+	{ USB_VENDOR_ID_SOUNDGRAPH, USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD2, HID_QUIRK_IGNORE },
+	{ USB_VENDOR_ID_SOUNDGRAPH, USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD3, HID_QUIRK_IGNORE },
 	{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO, HID_QUIRK_IGNORE },
 	{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP, HID_QUIRK_IGNORE },
 	{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP, HID_QUIRK_IGNORE },
diff -Naurp linux-2.6.27.noarch/drivers/input/Kconfig linux-2.6.27.noarch.lirc/drivers/input/Kconfig
--- linux-2.6.27.noarch/drivers/input/Kconfig	2008-10-09 18:13:53.000000000 -0400
+++ linux-2.6.27.noarch.lirc/drivers/input/Kconfig	2008-10-21 16:03:34.000000000 -0400
@@ -170,6 +170,8 @@ source "drivers/input/tablet/Kconfig"
 
 source "drivers/input/touchscreen/Kconfig"
 
+source "drivers/input/lirc/Kconfig"
+
 source "drivers/input/misc/Kconfig"
 
 endif
diff -Naurp linux-2.6.27.noarch/drivers/input/lirc/Kconfig linux-2.6.27.noarch.lirc/drivers/input/lirc/Kconfig
--- linux-2.6.27.noarch/drivers/input/lirc/Kconfig	1969-12-31 19:00:00.000000000 -0500
+++ linux-2.6.27.noarch.lirc/drivers/input/lirc/Kconfig	2008-10-21 16:04:34.000000000 -0400
@@ -0,0 +1,128 @@
+#
+# LIRC driver(s) configuration
+#
+menuconfig INPUT_LIRC
+	bool "Linux Infrared Remote Control IR receiver/transmitter drivers"
+	default n
+	help
+	  Say Y here, and all supported Linux Infrared Remote Control IR and
+	  RF receiver and transmitter drivers will be displayed. When paired
+	  with a remote control and the lirc daemon, the receiver drivers
+	  allow control of your Linux system via remote control.
+
+if INPUT_LIRC
+
+config LIRC_DEV
+	tristate "LIRC device loadable module support"
+	default n
+	help
+	  LIRC device loadable module support, required for most LIRC drivers
+
+config LIRC_BT829
+        tristate "BT829 based hardware"
+	default n
+	depends on LIRC_DEV
+	help
+	  Driver for the IR interface on BT829-based hardware
+
+config LIRC_I2C
+	tristate "I2C Based IR Receivers"
+	default n
+	depends on LIRC_DEV
+	help
+	  Driver for I2C-based IR receivers, such as those commonly
+	  found onboard Hauppauge PVR-150/250/350 video capture cards
+
+config LIRC_IGORPLUGUSB
+	tristate "Igor Cesko's USB IR Receiver"
+	default n
+	depends on LIRC_DEV
+	help
+	  Driver for Igor Cesko's USB IR Receiver
+
+config LIRC_IMON
+	tristate "Soundgraph IMON Receiver"
+	default n
+	depends on LIRC_DEV
+	help
+	  Driver for the Soundgraph IMON IR Receiver
+
+config LIRC_IT87
+	tristate "ITE IT87XX CIR Port Receiver"
+	default n
+	depends on LIRC_DEV
+	help
+	  Driver for the ITE IT87xx IR Receiver
+
+config LIRC_ITE8709
+	tristate "ITE8709 CIR Port Receiver"
+	default n
+	depends on LIRC_DEV && PNP
+	help
+	  Driver for the ITE8709 IR Receiver
+
+config LIRC_MCEUSB
+	tristate "Microsoft Media Center Ed. Receiver, v1"
+	default n
+	depends on LIRC_DEV
+	help
+	  Driver for the Microsoft Media Center Ed. Receiver, v1
+
+config LIRC_MCEUSB2
+	tristate "Microsoft Media Center Ed. Receiver, v2"
+	default n
+	depends on LIRC_DEV
+	help
+	  Driver for the Microsoft Media Center Ed. Receiver, v2
+
+config LIRC_PARALLEL
+	tristate "Homebrew Parallel Port Receiver"
+	default n
+	depends on LIRC_DEV && !SMP
+	help
+	  Driver for Homebrew Parallel Port Receivers
+
+config LIRC_SASEM
+	tristate "Sasem USB IR Remote"
+	default n
+	depends on LIRC_DEV
+	help
+	  Driver for the Sasem OnAir Remocon-V or Dign HV5 HTPC IR/VFD Module
+
+config LIRC_SERIAL
+	tristate "Homebrew Serial Port Receiver"
+	default n
+	depends on LIRC_DEV
+	help
+	  Driver for Homebrew Serial Port Receivers
+
+config LIRC_SIR
+	tristate "Built-in SIR IrDA port"
+	default n
+	depends on LIRC_DEV
+	help
+	  Driver for the SIR IrDA port
+
+config LIRC_STREAMZAP
+	tristate "Streamzap PC Receiver"
+	default n
+	depends on LIRC_DEV
+	help
+	  Driver for the Streamzap PC Receiver
+
+config LIRC_TTUSBIR
+	tristate "Technotrend USB IR Receiver"
+	default n
+	depends on LIRC_DEV
+	help
+	  Driver for the Technotrend USB IR Receiver
+
+config LIRC_ZILOG
+	tristate "Zilog/Hauppauge IR Transmitter"
+	default n
+	depends on LIRC_DEV
+	help
+	  Driver for the Zilog/Hauppauge IR Transmitter, found on
+	  PVR-150/500, HVR-1200/1250/1700/1800, HD-PVR and other cards
+
+endif
diff -Naurp linux-2.6.27.noarch/drivers/input/lirc/lirc_bt829.c linux-2.6.27.noarch.lirc/drivers/input/lirc/lirc_bt829.c
--- linux-2.6.27.noarch/drivers/input/lirc/lirc_bt829.c	1969-12-31 19:00:00.000000000 -0500
+++ linux-2.6.27.noarch.lirc/drivers/input/lirc/lirc_bt829.c	2008-10-21 16:03:34.000000000 -0400
@@ -0,0 +1,388 @@
+/*
+ * Remote control driver for the TV-card based on bt829
+ *
+ *  by Leonid Froenchenko <lfroen at galileo.co.il>
+ *
+ *  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 of the License, 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#include <linux/version.h>
+
+#include <linux/autoconf.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
[...14646 lines suppressed...]
+		if (ret != 0)
+			goto err;
+	}
+	return 0;
+
+err:
+	/* undo everything, hopefully... */
+	if (ir->c_rx.addr)
+		ir_detach(&ir->c_rx);
+	if (ir->c_tx.addr)
+		ir_detach(&ir->c_tx);
+	return ret;
+}
+
+static int ir_detach(struct i2c_client *client)
+{
+	struct IR *ir = i2c_get_clientdata(client);
+	mutex_lock(&ir->lock);
+
+	if (client == &ir->c_rx) {
+		DECLARE_COMPLETION(tn);
+		DECLARE_COMPLETION(tn2);
+
+		/* end up polling thread */
+		if (ir->task && !IS_ERR(ir->task)) {
+			ir->t_notify = &tn;
+			ir->t_notify2 = &tn2;
+			ir->shutdown = 1;
+			wake_up_process(ir->task);
+			complete(&tn2);
+			wait_for_completion(&tn);
+			ir->t_notify = NULL;
+			ir->t_notify2 = NULL;
+		}
+
+		/* unregister device */
+		i2c_detach_client(&ir->c_rx);
+	} else if (client == &ir->c_tx) {
+		i2c_detach_client(&ir->c_tx);
+	} else {
+		mutex_unlock(&ir->lock);
+		zilog_error("ir_detach: detached from something we didn't "
+			    "attach to\n");
+		return -ENODEV;
+	}
+
+	--ir->devs;
+	if (ir->devs < 0) {
+		mutex_unlock(&ir->lock);
+		zilog_error("ir_detach: invalid device count\n");
+		return -ENODEV;
+	} else if (ir->devs == 0) {
+		/* unregister lirc plugin */
+		if (ir->l.minor >= 0 && ir->l.minor < MAX_IRCTL_DEVICES) {
+			lirc_unregister_plugin(ir->l.minor);
+			ir_devices[ir->l.minor] = NULL;
+		}
+
+		/* free memory */
+		lirc_buffer_free(&ir->buf);
+		mutex_unlock(&ir->lock);
+		kfree(ir);
+		return 0;
+	}
+	mutex_unlock(&ir->lock);
+	return 0;
+}
+
+static int ir_probe(struct i2c_adapter *adap)
+{
+	struct i2c_client c;
+	char buf;
+
+	if (adap->id == I2C_HW_B_BT848 ||
+	    adap->id == I2C_HW_B_CX2341X) {
+		int have_rx = 0, have_tx = 0;
+
+		/*
+		 * The external IR receiver is at i2c address 0x71.
+		 * The IR transmitter is at 0x70.
+		 */
+		memset(&c, 0, sizeof(c));
+		c.adapter = adap;
+		c.addr = 0x70;
+
+		if (!disable_rx) {
+			if (i2c_master_recv(&c, &buf, 1) == 1)
+				have_rx = 1;
+			dprintk("probe 0x70 @ %s: %s\n",
+				adap->name,
+				have_rx ? "yes" : "no");
+		}
+
+		if (!disable_tx) {
+			c.addr = 0x71;
+			if (i2c_master_recv(&c, &buf, 1) == 1)
+				have_tx = 1;
+			dprintk("probe 0x71 @ %s: %s\n",
+				adap->name,
+				have_tx ? "yes" : "no");
+		}
+
+		if (have_rx || have_tx)
+			return ir_attach(adap, have_rx, have_tx);
+		else
+			zilog_error("%s: no devices found\n", adap->name);
+	}
+
+	return 0;
+}
+
+static int ir_command(struct i2c_client *client, unsigned int cmd, void *arg)
+{
+	/* nothing */
+	return 0;
+}
+
+/* ----------------------------------------------------------------------- */
+#ifdef MODULE
+
+int init_module(void)
+{
+	mutex_init(&tx_data_lock);
+	request_module("ivtv");
+	request_module("firmware_class");
+	i2c_add_driver(&driver);
+	return 0;
+}
+
+void cleanup_module(void)
+{
+	i2c_del_driver(&driver);
+	/* if loaded */
+	fw_unload();
+}
+
+MODULE_DESCRIPTION("Zilog/Hauppauge infrared transmitter driver (i2c stack)");
+MODULE_AUTHOR("Gerd Knorr, Michal Kochanowicz, Christoph Bartelmus, "
+	      "Ulrich Mueller, Stefan Jahn, Jerome Brock, Mark Weaver");
+MODULE_LICENSE("GPL");
+/* for compat with old name, which isn't all that accurate anymore */
+MODULE_ALIAS("lirc_pvr150");
+
+module_param(minor, int, 0444);
+MODULE_PARM_DESC(minor, "Preferred minor device number");
+
+module_param(debug, bool, 0644);
+MODULE_PARM_DESC(debug, "Enable debugging messages");
+
+module_param(disable_rx, bool, 0644);
+MODULE_PARM_DESC(disable_rx, "Disable the IR receiver device");
+
+module_param(disable_tx, bool, 0644);
+MODULE_PARM_DESC(disable_tx, "Disable the IR transmitter device");
+
+#endif /* MODULE */
+
+/*
+ * Overrides for Emacs so that we follow Linus's tabbing style.
+ * ---------------------------------------------------------------------------
+ * Local variables:
+ * c-basic-offset: 8
+ * End:
+ */
diff -Naurp linux-2.6.27.noarch/drivers/input/lirc/Makefile linux-2.6.27.noarch.lirc/drivers/input/lirc/Makefile
--- linux-2.6.27.noarch/drivers/input/lirc/Makefile	1969-12-31 19:00:00.000000000 -0500
+++ linux-2.6.27.noarch.lirc/drivers/input/lirc/Makefile	2008-10-21 16:04:26.000000000 -0400
@@ -0,0 +1,23 @@
+# Makefile for the lirc drivers.
+#
+
+# Each configuration option enables a list of files.
+
+EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -I$(src)
+
+obj-$(CONFIG_LIRC_DEV)		+= lirc_dev.o
+obj-$(CONFIG_LIRC_BT829)	+= lirc_bt829.o
+obj-$(CONFIG_LIRC_I2C)		+= lirc_i2c.o
+obj-$(CONFIG_LIRC_IGORPLUGUSB)	+= lirc_igorplugusb.o
+obj-$(CONFIG_LIRC_IMON)		+= lirc_imon.o
+obj-$(CONFIG_LIRC_IT87)		+= lirc_it87.o
+obj-$(CONFIG_LIRC_ITE8709)	+= lirc_ite8709.o
+obj-$(CONFIG_LIRC_MCEUSB)	+= lirc_mceusb.o
+obj-$(CONFIG_LIRC_MCEUSB2)	+= lirc_mceusb2.o
+obj-$(CONFIG_LIRC_PARALLEL)	+= lirc_parallel.o
+obj-$(CONFIG_LIRC_SASEM)	+= lirc_sasem.o
+obj-$(CONFIG_LIRC_SERIAL)	+= lirc_serial.o
+obj-$(CONFIG_LIRC_SIR)		+= lirc_sir.o
+obj-$(CONFIG_LIRC_STREAMZAP)	+= lirc_streamzap.o
+obj-$(CONFIG_LIRC_TTUSBIR)	+= lirc_ttusbir.o
+obj-$(CONFIG_LIRC_ZILOG)	+= lirc_zilog.o
diff -Naurp linux-2.6.27.noarch/drivers/input/Makefile linux-2.6.27.noarch.lirc/drivers/input/Makefile
--- linux-2.6.27.noarch/drivers/input/Makefile	2008-10-09 18:13:53.000000000 -0400
+++ linux-2.6.27.noarch.lirc/drivers/input/Makefile	2008-10-21 16:03:34.000000000 -0400
@@ -25,3 +25,5 @@ obj-$(CONFIG_INPUT_MISC)	+= misc/
 obj-$(CONFIG_INPUT_APMPOWER)	+= apm-power.o
 
 obj-$(CONFIG_XEN_KBDDEV_FRONTEND)	+= xen-kbdfront.o
+
+obj-$(CONFIG_INPUT_LIRC)       += lirc/


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

iD8DBQBI7pteyGugalF9Dw4RApsYAJ9xH75lDR839Gosavdj7cCMcdWfMgCeIGUi
pE5kVnXWIhknW0IZrj8dFno=
=ldHJ
-----END PGP SIGNATURE-----


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

iD8DBQBJA/NFyGugalF9Dw4RAqmqAJ9AJ4Acfpx+ZGPKrtRx60SQc4cB9wCfQpG0
h6JdKXv1JFtUXsZizOa1NAA=
=uhpg
-----END PGP SIGNATURE-----


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/.cvsignore,v
retrieving revision 1.830
retrieving revision 1.831
diff -u -r1.830 -r1.831
--- .cvsignore	22 Oct 2008 22:46:59 -0000	1.830
+++ .cvsignore	30 Oct 2008 04:41:10 -0000	1.831
@@ -2,6 +2,6 @@
 GNUmakefile
 kernel-2.6.*.config
 temp-*
-kernel-2.6.26
-linux-2.6.26.tar.bz2
-patch-2.6.26.7.bz2
+kernel-2.6.27
+linux-2.6.27.tar.bz2
+patch-2.6.27.4.bz2


Index: Makefile
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/Makefile,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -r1.70 -r1.71
--- Makefile	10 Apr 2008 15:24:50 -0000	1.70
+++ Makefile	30 Oct 2008 04:41:10 -0000	1.71
@@ -39,7 +39,6 @@
 	@perl -pi -e 's/# CONFIG_SLUB_DEBUG_ON is not set/CONFIG_SLUB_DEBUG_ON=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_LOCK_STAT is not set/CONFIG_LOCK_STAT=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_STACK_USAGE is not set/CONFIG_DEBUG_STACK_USAGE=y/' config-nodebug
-	@perl -pi -e 's/# CONFIG_DEBUG_IGNORE_QUIET is not set/CONFIG_DEBUG_IGNORE_QUIET=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_SLAB is not set/CONFIG_DEBUG_SLAB=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_MUTEXES is not set/CONFIG_DEBUG_MUTEXES=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_RT_MUTEXES is not set/CONFIG_DEBUG_RT_MUTEXES=y/' config-nodebug
@@ -49,8 +48,6 @@
 	@perl -pi -e 's/# CONFIG_DEBUG_SPINLOCK is not set/CONFIG_DEBUG_SPINLOCK=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_VM is not set/CONFIG_DEBUG_VM=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_SLEEP_IN_IRQ is not set/CONFIG_DEBUG_SLEEP_IN_IRQ=y/' config-nodebug
-	@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-debug
-	@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug
 	@perl -pi -e 's/# CONFIG_FAULT_INJECTION is not set/CONFIG_FAULT_INJECTION=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_FAILSLAB is not set/CONFIG_FAILSLAB=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_FAIL_PAGE_ALLOC is not set/CONFIG_FAIL_PAGE_ALLOC=y/' config-nodebug
@@ -58,15 +55,25 @@
 	@perl -pi -e 's/# CONFIG_FAULT_INJECTION_DEBUG_FS is not set/CONFIG_FAULT_INJECTION_DEBUG_FS=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set/CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_SG is not set/CONFIG_DEBUG_SG=y/' config-nodebug
-	@perl -pi -e 's/# CONFIG_USB_DEBUG is not set/CONFIG_USB_DEBUG=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_DEBUG_WRITECOUNT is not set/CONFIG_DEBUG_WRITECOUNT=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS is not set/CONFIG_DEBUG_OBJECTS=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_FREE is not set/CONFIG_DEBUG_OBJECTS_FREE=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_TIMERS is not set/CONFIG_DEBUG_OBJECTS_TIMERS=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_X86_PTDUMP is not set/CONFIG_X86_PTDUMP=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_CAN_DEBUG_DEVICES is not set/CONFIG_CAN_DEBUG_DEVICES=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_MODULE_FORCE_UNLOAD is not set/CONFIG_MODULE_FORCE_UNLOAD=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_SYSCTL_SYSCALL_CHECK is not set/CONFIG_SYSCTL_SYSCALL_CHECK=y/' config-nodebug
+
+	# just in case we're going from extremedebug -> debug
+	@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug
 
 	@perl -pi -e 's/^%define debugbuildsenabled 1/%define debugbuildsenabled 0/' kernel.spec
+	@perl -pi -e 's/CONFIG_NR_CPUS=64/CONFIG_NR_CPUS=512/' config-x86_64-generic
 
 release:
 	@perl -pi -e 's/CONFIG_SLUB_DEBUG_ON=y/# CONFIG_SLUB_DEBUG_ON is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_LOCK_STAT=y/# CONFIG_LOCK_STAT is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_STACK_USAGE=y/# CONFIG_DEBUG_STACK_USAGE is not set/' config-nodebug
-	@perl -pi -e 's/CONFIG_DEBUG_IGNORE_QUIET=y/# CONFIG_DEBUG_IGNORE_QUIET is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_SLAB=y/# CONFIG_DEBUG_SLAB is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_MUTEXES=y/# CONFIG_DEBUG_MUTEXES is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_RT_MUTEXES=y/# CONFIG_DEBUG_RT_MUTEXES is not set/' config-nodebug
@@ -85,19 +92,37 @@
 	@perl -pi -e 's/CONFIG_FAULT_INJECTION_DEBUG_FS=y/# CONFIG_FAULT_INJECTION_DEBUG_FS is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y/# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_SG=y/# CONFIG_DEBUG_SG is not set/' config-nodebug
-	@perl -pi -e 's/CONFIG_USB_DEBUG=y/# CONFIG_USB_DEBUG is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_DEBUG_WRITECOUNT=y/# CONFIG_DEBUG_WRITECOUNT is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_DEBUG_OBJECTS=y/# CONFIG_DEBUG_OBJECTS is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_FREE=y/# CONFIG_DEBUG_OBJECTS_FREE is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_TIMERS=y/# CONFIG_DEBUG_OBJECTS_TIMERS is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_X86_PTDUMP=y/# CONFIG_X86_PTDUMP is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_CAN_DEBUG_DEVICES=y/# CONFIG_CAN_DEBUG_DEVICES is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_MODULE_FORCE_UNLOAD=y/# CONFIG_MODULE_FORCE_UNLOAD is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_SYSCTL_SYSCALL_CHECK=y/# CONFIG_SYSCTL_SYSCALL_CHECK is not set/' config-nodebug
+
+	@perl -pi -e 's/CONFIG_NR_CPUS=512/CONFIG_NR_CPUS=64/' config-x86_64-generic
 
 	@perl -pi -e 's/^%define debugbuildsenabled 0/%define debugbuildsenabled 1/' kernel.spec
 
+rhel:
+	@perl -pi -e 's/# CONFIG_PPC_64K_PAGES is not set/CONFIG_PPC_64K_PAGES=y/' config-powerpc64
+	@perl -pi -e 's/CONFIG_NR_CPUS=64/CONFIG_NR_CPUS=512/' config-x86_64-generic
 
 reconfig:
 	@rm -f kernel-*-config
-	@VERSION="2.6.25" make -f Makefile.config configs
+	@VERSION="2.6.27" make -f Makefile.config configs
 	@scripts/reconfig.sh
 
+force-tag: $(SPECFILE) $(COMMON_DIR)/branches
+	@$(MAKE) tag TAG_OPTS="-F $(TAG_OPTS)"
+
 # since i386 isn't a target...
 compile compile-short: DIST_DEFINES += --target $(shell uname -m)
 
+# 'make local' also needs to build the noarch firmware package
+local: noarch
+
 #
 # Hacks for building vanilla (unpatched) kernel rpms.
 # Use "make vanilla-TARGET" like "make TARGET" (make vanilla-scratch-build).


Index: Makefile.config
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/Makefile.config,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -r1.63 -r1.64
--- Makefile.config	8 Apr 2008 09:07:04 -0000	1.63
+++ Makefile.config	30 Oct 2008 04:41:11 -0000	1.64
@@ -12,11 +12,10 @@
 	$(CFG)-s390x.config \
 	$(CFG)-ppc.config $(CFG)-ppc-smp.config \
 	$(CFG)-sparc64.config $(CFG)-sparc64-smp.config \
-	$(CFG)-ppc64.config $(CFG)-ppc64-kdump.config $(CFG)-ia64.config \
-	$(CFG)-i686-xen.config $(CFG)-x86_64-xen.config \
-	$(CFG)-ia64-xen.config
+	$(CFG)-ppc64.config $(CFG)-ppc64-kdump.config $(CFG)-ppc64-debug.config \
+	$(CFG)-ia64.config
 
-PLATFORMS	= x86 x86_64 powerpc powerpc32 powerpc64 s390x ia64 sparc64 sparc
+PLATFORMS	= x86 x86_64 powerpc powerpc32 powerpc64 s390x ia64 sparc64
 TEMPFILES	= $(addprefix temp-, $(addsuffix -generic, $(PLATFORMS)))
 
 configs: $(CONFIGFILES)
@@ -46,15 +45,15 @@
 temp-x86_64-debug-generic: config-x86_64-generic temp-debug-generic
 	perl merge.pl $^  > $@
 
-temp-sparc-generic: config-sparc-generic temp-generic
-	perl merge.pl $^  > $@
-
 temp-sparc64-generic: config-sparc64-generic temp-generic
 	perl merge.pl $^  > $@
 
 temp-powerpc-generic: config-powerpc-generic temp-generic
 	perl merge.pl $^  > $@
 
+temp-powerpc-debug-generic: config-powerpc-generic temp-debug-generic
+	perl merge.pl $^  > $@
+
 temp-powerpc32-generic: config-powerpc32-generic temp-powerpc-generic
 	perl merge.pl $^  > $@
 
@@ -64,21 +63,6 @@
 temp-ia64-generic: config-ia64-generic temp-generic
 	perl merge.pl $^ > $@
 
-temp-x86-xen-generic-tmp: config-xen-generic temp-x86-generic
-	perl merge.pl $^ > $@
-
-temp-x86-xen-generic: config-xen-x86 temp-x86-xen-generic-tmp
-	perl merge.pl $^ > $@
-
-temp-x86_64-xen-generic-tmp: config-xen-generic temp-x86_64-generic
-	perl merge.pl $^ > $@
-
-temp-x86_64-xen-generic: config-xen-x86_64 temp-x86_64-xen-generic-tmp
-	perl merge.pl $^ > $@
-
-temp-ia64-xen-generic: config-xen-generic temp-ia64-generic
-	perl merge.pl $^ > $@
-
 kernel-$(VERSION)-i686.config: config-i686 temp-x86-generic
 	perl merge.pl $^ i386 > $@
 
@@ -103,18 +87,18 @@
 kernel-$(VERSION)-sparc64-smp.config: config-sparc64-smp temp-sparc64-generic
 	perl merge.pl $^ sparc64 > $@
 
-kernel-$(VERSION)-sparc64.config: config-sparc64 temp-sparc64-generic
+kernel-$(VERSION)-sparc64.config: /dev/null temp-sparc64-generic
 	perl merge.pl $^ sparc64 > $@
 
-kernel-$(VERSION)-sparc.config: config-sparc temp-sparc-generic
-	perl merge.pl $^ sparc > $@
-
 kernel-$(VERSION)-ppc64.config: config-powerpc64 temp-powerpc-generic
 	perl merge.pl $^ powerpc > $@
 
 kernel-$(VERSION)-ppc64-kdump.config: config-powerpc64-kdump kernel-$(VERSION)-ppc64.config
 	perl merge.pl $^ powerpc > $@
 
+kernel-$(VERSION)-ppc64-debug.config: config-powerpc64 temp-powerpc-debug-generic
+	perl merge.pl $^ powerpc > $@
+
 kernel-$(VERSION)-s390x.config: config-s390x temp-s390-generic
 	perl merge.pl $^ s390 > $@
 
@@ -124,14 +108,5 @@
 kernel-$(VERSION)-ppc-smp.config: config-powerpc32-smp temp-powerpc32-generic
 	perl merge.pl $^ powerpc > $@
 
-kernel-$(VERSION)-ia64.config: config-ia64 temp-ia64-generic
-	perl merge.pl $^ ia64 > $@
-
-kernel-$(VERSION)-i686-xen.config: config-i686-PAE temp-x86-xen-generic
-	perl merge.pl $^ i386 > $@
-
-kernel-$(VERSION)-x86_64-xen.config: /dev/null temp-x86_64-xen-generic
-	perl merge.pl $^ x86_64 > $@
-
-kernel-$(VERSION)-ia64-xen.config: config-xen-ia64 temp-ia64-xen-generic
+kernel-$(VERSION)-ia64.config: /dev/null temp-ia64-generic
 	perl merge.pl $^ ia64 > $@


Index: config-debug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-debug,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- config-debug	4 Aug 2008 22:20:04 -0000	1.12
+++ config-debug	30 Oct 2008 04:41:11 -0000	1.13
@@ -1,6 +1,5 @@
 CONFIG_SND_VERBOSE_PRINTK=y
 CONFIG_SND_DEBUG=y
-CONFIG_SND_DEBUG_DETECT=y
 CONFIG_SND_PCM_XRUN_DEBUG=y
 
 CONFIG_DEBUG_MUTEXES=y
@@ -30,8 +29,6 @@
 
 # CONFIG_DEBUG_PAGEALLOC is not set
 
-CONFIG_USB_DEBUG=y
-
 CONFIG_DEBUG_WRITECOUNT=y
 CONFIG_DEBUG_OBJECTS=y
 # CONFIG_DEBUG_OBJECTS_SELFTEST is not set
@@ -41,3 +38,7 @@
 CONFIG_X86_PTDUMP=y
 
 CONFIG_CAN_DEBUG_DEVICES=y
+
+CONFIG_MODULE_FORCE_UNLOAD=y
+
+CONFIG_SYSCTL_SYSCALL_CHECK=y


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-generic,v
retrieving revision 1.119
retrieving revision 1.120
diff -u -r1.119 -r1.120
--- config-generic	20 Oct 2008 21:04:38 -0000	1.119
+++ config-generic	30 Oct 2008 04:41:11 -0000	1.120
@@ -14,6 +14,9 @@
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
+
+CONFIG_BUILD_DOCSRC=y
+
 #
 # General setup
 #
@@ -62,7 +65,7 @@
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 # CONFIG_MODULE_FORCE_LOAD is not set
-# CONFIG_MODULE_FORCE_UNLOAD is not set
+# -- MODULE_FORCE_UNLOAD is controlled by config-debug/nodebug
 # CONFIG_MODVERSIONS is not set
 CONFIG_MODULE_SRCVERSION_ALL=y
 CONFIG_KMOD=y
@@ -78,7 +81,7 @@
 CONFIG_PCIEAER=y
 CONFIG_PCIEASPM=y
 # CONFIG_PCIEASPM_DEBUG is not set
-CONFIG_HOTPLUG_PCI_PCIE=m
+CONFIG_HOTPLUG_PCI_PCIE=y
 CONFIG_HOTPLUG_PCI_FAKE=m
 CONFIG_PCI_LEGACY=y
 
@@ -110,6 +113,8 @@
 CONFIG_MMC_BLOCK=m
 CONFIG_MMC_RICOH_MMC=m
 CONFIG_MMC_SDHCI=m
+CONFIG_MMC_SDHCI_PCI=m
+CONFIG_MMC_SDRICOH_CS=m
 CONFIG_MMC_TIFM_SD=m
 CONFIG_MMC_WBSD=m
 
@@ -148,6 +153,8 @@
 # Generic Driver Options
 #
 CONFIG_FW_LOADER=y
+# CONFIG_FIRMWARE_IN_KERNEL is not set
+CONFIG_EXTRA_FIRMWARE=""
 
 # CONFIG_SPI is not set
 
@@ -289,6 +296,7 @@
 CONFIG_ISAPNP=y
 # CONFIG_PNPBIOS is not set
 
+CONFIG_ACPI_PCI_SLOT=y
 CONFIG_HOTPLUG_PCI_ACPI=m
 CONFIG_HOTPLUG_PCI_ACPI_IBM=m
 
@@ -325,7 +333,7 @@
 CONFIG_CISS_SCSI_TAPE=y
 CONFIG_BLK_DEV_DAC960=m
 CONFIG_BLK_DEV_UMEM=m
-CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_CRYPTOLOOP=m
 CONFIG_BLK_DEV_NBD=m
 CONFIG_BLK_DEV_RAM=y
@@ -342,6 +350,7 @@
 # CONFIG_BLK_DEV_IT8213 is not set
 # CONFIG_BLK_DEV_TC86C001 is not set
 CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_DEV_INTEGRITY=y
 
 
 #
@@ -413,11 +422,12 @@
 CONFIG_VIRTIO_BALLOON=m
 CONFIG_VIRTIO_NET=m
 CONFIG_HW_RANDOM_VIRTIO=m
+CONFIG_VIRTIO_CONSOLE=m
 
 #
 # SCSI device support
 #
-CONFIG_SCSI=m
+CONFIG_SCSI=y
 
 CONFIG_SCSI_ENCLOSURE=m
 CONFIG_SCSI_PROC_FS=y
@@ -426,15 +436,21 @@
 CONFIG_SCSI_SRP_ATTRS=m
 CONFIG_SCSI_TGT=m
 
+CONFIG_SCSI_DH=y
+CONFIG_SCSI_DH_RDAC=m
+CONFIG_SCSI_DH_HP_SW=m
+CONFIG_SCSI_DH_EMC=m
+CONFIG_SCSI_DH_ALUA=m
+
 #
 # SCSI support type (disk, tape, CD-ROM)
 #
-CONFIG_BLK_DEV_SD=m
+CONFIG_BLK_DEV_SD=y
 CONFIG_CHR_DEV_ST=m
 CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
+CONFIG_BLK_DEV_SR=y
 CONFIG_BLK_DEV_SR_VENDOR=y
-CONFIG_CHR_DEV_SG=m
+CONFIG_CHR_DEV_SG=y
 CONFIG_CHR_DEV_SCH=m
 
 #
@@ -490,13 +506,13 @@
 CONFIG_MEGARAID_LEGACY=m
 CONFIG_MEGARAID_SAS=m
 
-CONFIG_ATA=m
+CONFIG_ATA=y
 CONFIG_ATA_SFF=y
-CONFIG_ATA_PIIX=m
+CONFIG_ATA_PIIX=y
 CONFIG_ATA_ACPI=y
 CONFIG_BLK_DEV_SX8=m
 CONFIG_PDC_ADMA=m
-CONFIG_SATA_AHCI=m
+CONFIG_SATA_AHCI=y
 CONFIG_SATA_INIC162X=m
 CONFIG_SATA_MV=m
 CONFIG_SATA_NV=m
@@ -620,18 +636,18 @@
 CONFIG_MD_RAID5_RESHAPE=y
 CONFIG_MD_RAID10=m
 CONFIG_MD_RAID456=m
-CONFIG_BLK_DEV_DM=m
+CONFIG_BLK_DEV_DM=y
 CONFIG_DM_CRYPT=m
 CONFIG_DM_DEBUG=y
 # CONFIG_DM_DELAY is not set
-CONFIG_DM_MIRROR=m
+CONFIG_DM_MIRROR=y
 CONFIG_DM_MULTIPATH=m
 CONFIG_DM_MULTIPATH_EMC=m
 CONFIG_DM_MULTIPATH_HP=m
 CONFIG_DM_MULTIPATH_RDAC=m
-CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_SNAPSHOT=y
 CONFIG_DM_UEVENT=y
-CONFIG_DM_ZERO=m
+CONFIG_DM_ZERO=y
 
 #
 # Fusion MPT device support
@@ -703,6 +719,7 @@
 CONFIG_IP_MULTIPLE_TABLES=y
 CONFIG_IP_ROUTE_MULTIPATH=y
 CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_NF_SECURITY=m
 # CONFIG_IP_PNP is not set
 CONFIG_NET_IPIP=m
 CONFIG_NET_IPGRE=m
@@ -769,11 +786,11 @@
 CONFIG_BRIDGE=m
 CONFIG_NETFILTER=y
 CONFIG_NETFILTER_ADVANCED=y
-CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CONNTRACK=y
 CONFIG_NETFILTER_NETLINK=m
 CONFIG_NETFILTER_NETLINK_QUEUE=m
 CONFIG_NETFILTER_NETLINK_LOG=m
-CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XTABLES=y
 CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
 CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
 CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
@@ -791,7 +808,7 @@
 CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
 CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
 CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
 CONFIG_NETFILTER_XT_MATCH_DCCP=m
 CONFIG_NETFILTER_XT_MATCH_DSCP=m
 CONFIG_NETFILTER_XT_MATCH_ESP=m
@@ -811,7 +828,7 @@
 CONFIG_NETFILTER_XT_MATCH_RATEEST=m
 CONFIG_NETFILTER_XT_MATCH_REALM=m
 CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATE=y
 CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
 CONFIG_NETFILTER_XT_MATCH_STRING=m
 CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
@@ -824,7 +841,7 @@
 #
 # IP: Netfilter Configuration
 #
-CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK_ENABLED=y
 
 CONFIG_NF_CT_ACCT=y
 CONFIG_NF_CONNTRACK_MARK=y
@@ -840,8 +857,8 @@
 CONFIG_NF_CONNTRACK_SANE=m
 CONFIG_NF_CONNTRACK_SIP=m
 CONFIG_NF_CONNTRACK_TFTP=m
-CONFIG_NF_CONNTRACK_IPV4=m
-CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_NF_CONNTRACK_IPV4=y
+CONFIG_NF_CONNTRACK_IPV6=y
 CONFIG_NF_NAT=m
 CONFIG_NF_NAT_SNMP_BASIC=m
 CONFIG_NF_CT_PROTO_DCCP=m
@@ -866,7 +883,7 @@
 CONFIG_IP_NF_TARGET_ECN=m
 CONFIG_IP_NF_TARGET_LOG=m
 CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_REJECT=y
 CONFIG_IP_NF_TARGET_TTL=m
 CONFIG_IP_NF_MANGLE=m
 CONFIG_IP_NF_ARPTABLES=m
@@ -874,14 +891,16 @@
 CONFIG_IP_NF_ARP_MANGLE=m
 CONFIG_IP_NF_QUEUE=m
 CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_FILTER=m
+
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_FILTER=y
 
 #
 # IPv6: Netfilter Configuration
 #
-CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_FILTER=m
 CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MANGLE=m
 CONFIG_IP6_NF_MATCH_AH=m
 CONFIG_IP6_NF_MATCH_EUI64=m
 CONFIG_IP6_NF_MATCH_FRAG=m
@@ -891,9 +910,9 @@
 CONFIG_IP6_NF_MATCH_OPTS=m
 CONFIG_IP6_NF_MATCH_OWNER=m
 CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_QUEUE=m
 CONFIG_IP6_NF_RAW=m
+CONFIG_IP6_NF_SECURITY=m
 CONFIG_IP6_NF_TARGET_LOG=m
 CONFIG_IP6_NF_TARGET_REJECT=m
 CONFIG_IP6_NF_TARGET_HL=m
@@ -909,6 +928,7 @@
 CONFIG_BRIDGE_EBT_BROUTE=m
 CONFIG_BRIDGE_EBT_DNAT=m
 CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_IP6=m
 CONFIG_BRIDGE_EBT_LIMIT=m
 CONFIG_BRIDGE_EBT_LOG=m
 CONFIG_BRIDGE_EBT_MARK=m
@@ -946,6 +966,7 @@
 CONFIG_SCTP_HMAC_MD5=y
 CONFIG_ATM=m
 CONFIG_VLAN_8021Q=m
+CONFIG_VLAN_8021Q_GVRP=y
 CONFIG_LLC=m
 # CONFIG_LLC2 is not set
 CONFIG_IPX=m
@@ -1033,7 +1054,6 @@
 CONFIG_NET_PKTGEN=m
 # CONFIG_NET_TCPPROBE is not set
 CONFIG_NETDEVICES=y
-CONFIG_NETDEVICES_MULTIQUEUE=y
 
 #
 # ARCnet devices
@@ -1065,7 +1085,11 @@
 CONFIG_ATM_IDT77252=m
 CONFIG_ATM_AMBASSADOR=m
 CONFIG_ATM_HORIZON=m
-CONFIG_ATM_FORE200E_MAYBE=m
+CONFIG_ATM_FORE200E=m
+# CONFIG_ATM_FORE200E_USE_TASKLET is not set
+CONFIG_ATM_FORE200E_TX_RETRY=16
+CONFIG_ATM_FORE200E_DEBUG=0
+
 CONFIG_ATM_HE=m
 CONFIG_PPPOATM=m
 CONFIG_PPPOL2TP=m
@@ -1081,7 +1105,6 @@
 # CONFIG_ATM_IDT77252_RCV_ALL is not set
 # CONFIG_ATM_AMBASSADOR_DEBUG is not set
 # CONFIG_ATM_HORIZON_DEBUG is not set
-# CONFIG_ATM_FORE200E_PCA is not set
 # CONFIG_ATM_HE_USE_SUNI is not set
 # CONFIG_ATM_NICSTAR_USE_SUNI is not set
 # CONFIG_ATM_NICSTAR_USE_IDT77105 is not set
@@ -1154,8 +1177,8 @@
 CONFIG_BNX2=m
 CONFIG_QLA3XXX=m
 CONFIG_ATL1=m
-CONFIG_ATL1E=m
 CONFIG_ATL2=m
+CONFIG_ATL1E=m
 # CONFIG_EEPRO100 is not set
 CONFIG_E100=m
 CONFIG_FEALNX=m
@@ -1197,13 +1220,15 @@
 CONFIG_E1000_NAPI=y
 # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
 CONFIG_E1000E=m
+CONFIG_IGB=m
+# CONFIG_IGB_LRO is not set
 CONFIG_NS83820=m
 CONFIG_HAMACHI=m
 CONFIG_YELLOWFIN=m
 CONFIG_R8169=m
 CONFIG_R8169_NAPI=y
 CONFIG_R8169_VLAN=y
-CONFIG_SFC=m
+CONFIG_SFC=n
 # CONFIG_SK98LIN is not set
 CONFIG_SKGE=m
 # CONFIG_SKGE_DEBUG is not set
@@ -1252,7 +1277,7 @@
 #
 # Wireless LAN
 #
-CONFIG_WLAN_PRE80211=y
+# CONFIG_WLAN_PRE80211 is not set
 # CONFIG_STRIP is not set
 # CONFIG_ARLAN is not set
 CONFIG_PCMCIA_WAVELAN=m
@@ -1260,7 +1285,7 @@
 CONFIG_WLAN_80211=y
 # CONFIG_PCMCIA_RAYCS is not set
 
-CONFIG_MAC80211=m
+CONFIG_MAC80211=y
 CONFIG_MAC80211_QOS=y
 CONFIG_MAC80211_RC_DEFAULT_PID=y
 # CONFIG_MAC80211_RC_DEFAULT_SIMPLE is not set
@@ -1273,8 +1298,9 @@
 # CONFIG_MAC80211_DEBUG_MENU is not set
 # CONFIG_MAC80211_DEBUG is not set
 # CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set
+# CONFIG_MAC80211_DEBUG is not set
 
-CONFIG_IEEE80211=m
+CONFIG_IEEE80211=y
 CONFIG_IEEE80211_DEBUG=y
 CONFIG_IEEE80211_CRYPT_WEP=m
 CONFIG_IEEE80211_CRYPT_CCMP=m
@@ -1283,10 +1309,13 @@
 CONFIG_IEEE80211_SOFTMAC_DEBUG=y
 CONFIG_CFG80211=m
 CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
 
 CONFIG_ADM8211=m
 CONFIG_ATH5K=m
 CONFIG_ATH5K_DEBUG=y
+CONFIG_ATH9K=m
 CONFIG_AIRO=m
 CONFIG_AIRO_CS=m
 CONFIG_ATMEL=m
@@ -1318,18 +1347,17 @@
 CONFIG_LIBERTAS_CS=m
 CONFIG_LIBERTAS_SDIO=m
 CONFIG_LIBERTAS_DEBUG=y
+CONFIG_IWLCORE=m
 CONFIG_IWLCORE_RFKILL=y
 CONFIG_IWLWIFI_LEDS=y
 CONFIG_IWLWIFI_RUN_TIME_CALIB=y
 CONFIG_IWLWIFI_DEBUG=y
 CONFIG_IWLWIFI_DEBUGFS=y
 CONFIG_IWLWIFI_RFKILL=y
-CONFIG_IWL4965=m
-CONFIG_IWL4965_SENSITIVITY=y
-CONFIG_IWL4965_SPECTRUM_MEASUREMENT=y
-CONFIG_IWL4965_RUN_TIME_CALIB=y
-CONFIG_IWL4965_HT=y
-CONFIG_IWL4965_LEDS=y
+CONFIG_IWLAGN=m
+CONFIG_IWLAGN_SPECTRUM_MEASUREMENT=y
+CONFIG_IWLAGN_LEDS=y
+CONFIG_IWL4965=y
 CONFIG_IWL5000=y
 CONFIG_IWL5000_RUN_TIME_CALIB=y
 CONFIG_IWL3945=m
@@ -1493,7 +1521,10 @@
 #
 # Bluetooth device drivers
 #
-CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIBTUSB=m
+# Disable the BT_HCIUSB driver.
+# It sucks more power than BT_HCIBTUSB which has the same functionality.
+# CONFIG_BT_HCIUSB is not set
 CONFIG_BT_HCIUART=m
 CONFIG_BT_HCIUART_H4=y
 CONFIG_BT_HCIUART_BCSP=y
@@ -1512,8 +1543,16 @@
 #
 # ISDN subsystem
 #
+CONFIG_ISDN=y
+CONFIG_MISDN=m
+CONFIG_MISDN_DSP=m
+CONFIG_MISDN_L1OIP=m
 
-CONFIG_ISDN=m
+#
+# mISDN hardware drivers
+#
+CONFIG_MISDN_HFCPCI=m
+CONFIG_MISDN_HFCMULTI=m
 CONFIG_ISDN_I4L=m
 CONFIG_ISDN_DRV_AVMB1_B1PCI=m
 CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
@@ -1680,6 +1719,7 @@
 CONFIG_MOUSE_SERIAL=m
 CONFIG_MOUSE_VSXXXAA=m
 CONFIG_MOUSE_APPLETOUCH=m
+CONFIG_MOUSE_BCM5974=m
 CONFIG_INPUT_JOYSTICK=y
 CONFIG_JOYSTICK_ANALOG=m
 CONFIG_JOYSTICK_A3D=m
@@ -1713,9 +1753,12 @@
 CONFIG_TOUCHSCREEN_GUNZE=m
 CONFIG_TOUCHSCREEN_ELO=m
 CONFIG_TOUCHSCREEN_FUJITSU=m
+CONFIG_TOUCHSCREEN_HTCPEN=m
+CONFIG_TOUCHSCREEN_INEXIO=m
 CONFIG_TOUCHSCREEN_MTOUCH=m
 CONFIG_TOUCHSCREEN_MK712=m
 CONFIG_TOUCHSCREEN_PENMOUNT=m
+CONFIG_TOUCHSCREEN_TOUCHIT213=m
 CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
 CONFIG_TOUCHSCREEN_TOUCHWIN=m
 CONFIG_TOUCHSCREEN_UCB1400=m
@@ -1807,15 +1850,16 @@
 #
 # I2C Algorithms
 #
-# CONFIG_I2C_HELPER_AUTO is not set
 # CONFIG_I2C_DEBUG_ALGO is not set
+CONFIG_I2C_HELPER_AUTO=y
 CONFIG_I2C_ALGOBIT=m
 CONFIG_I2C_ALGOPCF=m
-CONFIG_I2C_ALGOPCA=m
 
 #
 # I2C Hardware Bus support
 #
+
+CONFIG_I2C_ALGOPCA=m
 # CONFIG_I2C_ALI1535 is not set
 # CONFIG_I2C_ALI1563 is not set
 # CONFIG_I2C_ALI15X3 is not set
@@ -1828,6 +1872,10 @@
 # CONFIG_I2C_ELEKTOR is not set
 # CONFIG_I2C_I801 is not set
 # CONFIG_I2C_I810 is not set
+# CONFIG_I2C_ISCH is not set
+# CONFIG_I2C_NFORCE2_S4985 is not set
+CONFIG_AT24=m
+
 CONFIG_I2C_NFORCE2=m
 # CONFIG_I2C_OCORES is not set
 CONFIG_I2C_PARPORT=m
@@ -1855,6 +1903,7 @@
 #
 CONFIG_SENSORS_ABITUGURU=m
 CONFIG_SENSORS_ABITUGURU3=m
+CONFIG_SENSORS_AD7414=m
 CONFIG_SENSORS_AD7418=m
 CONFIG_SENSORS_ADM1021=m
 CONFIG_SENSORS_ADM1025=m
@@ -2051,12 +2100,14 @@
 CONFIG_DRM_TDFX=m
 CONFIG_DRM_R128=m
 CONFIG_DRM_RADEON=m
+CONFIG_DRM_RADEON_KMS=y
 CONFIG_DRM_I810=m
 CONFIG_DRM_I830=m
 CONFIG_DRM_MGA=m
 CONFIG_DRM_SIS=m
 CONFIG_DRM_SAVAGE=m
 CONFIG_DRM_I915=m
+CONFIG_DRM_I915_KMS=n
 CONFIG_DRM_VIA=m
 CONFIG_DRM_NOUVEAU=m
 
@@ -2069,7 +2120,7 @@
 CONFIG_CARDMAN_4040=m
 
 CONFIG_MWAVE=m
-# CONFIG_RAW_DRIVER is not set
+CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=8192
 CONFIG_HANGCHECK_TIMER=m
 
@@ -2135,6 +2186,7 @@
 CONFIG_VIDEO_PVRUSB2_DVB=y
 CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR=y
 CONFIG_VIDEO_PVRUSB2_ONAIR_USB2=y
+CONFIG_VIDEO_HDPVR=m
 CONFIG_VIDEO_SAA5246A=m
 CONFIG_VIDEO_SAA5249=m
 CONFIG_VIDEO_SAA6588=m
@@ -2172,12 +2224,16 @@
 CONFIG_VIDEO_ZORAN_DC30=m
 CONFIG_VIDEO_ZORAN_LML33=m
 CONFIG_VIDEO_ZORAN_LML33R10=m
+CONFIG_VIDEO_ZORAN_ZR36060=m
 CONFIG_VIDEO_FB_IVTV=m
 CONFIG_VIDEO_M52790=m
 CONFIG_VIDEO_VP27SMPX=m
 CONFIG_TUNER_3036=m
 # CONFIG_TUNER_TEA5761 is not set
 
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+
 #
 # Radio Adapters
 #
@@ -2206,6 +2262,7 @@
 CONFIG_DVB_BT8XX=m
 CONFIG_DVB_BUDGET_CORE=m
 CONFIG_DVB_CX24110=m
+CONFIG_DVB_DRX397XD=m
 CONFIG_DVB_ISL6405=m
 CONFIG_DVB_L64781=m
 CONFIG_DVB_LGDT330X=m
@@ -2214,12 +2271,16 @@
 CONFIG_DVB_PLUTO2=m
 CONFIG_DVB_S5H1409=m
 CONFIG_DVB_S5H1420=m
+CONFIG_DVB_SIANO_SMS1XXX=m
+CONFIG_DVB_SIANO_SMS1XXX_SMS_IDS=y
 CONFIG_DVB_SP8870=m
 CONFIG_DVB_TDA10021=m
 CONFIG_DVB_TDA10023=m
 CONFIG_DVB_TDA1004X=m
 CONFIG_DVB_TUA6100=m
 CONFIG_DVB_TTUSB_DEC=m
+CONFIG_DVB_USB_ANYSEE=m
+CONFIG_DVB_USB_DW2102=m
 CONFIG_DVB_VES1820=m
 CONFIG_DVB_VES1X93=m
 
@@ -2294,6 +2355,7 @@
 CONFIG_VIDEO_PVRUSB2_29XXX=y
 CONFIG_VIDEO_PVRUSB2_SYSFS=y
 # CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_IR_I2C=m
 
 #
 # Graphics support
@@ -2315,6 +2377,7 @@
 CONFIG_FB_ATY_GX=y
 CONFIG_FB_ATY_GENERIC_LCD=y
 # CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_CARMINE is not set
 CONFIG_FB_CIRRUS=m
 # CONFIG_FB_CYBER2000 is not set
 # CONFIG_FB_CYBLA is not set
@@ -2403,17 +2466,18 @@
 #
 # Advanced Linux Sound Architecture
 #
-CONFIG_SND=m
+CONFIG_SND=y
+# CONFIG_SND_DEBUG_VERBOSE is not set
 CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_SEQUENCER=m
+CONFIG_SND_SEQUENCER=y
 CONFIG_SND_SEQ_DUMMY=m
 CONFIG_SND_SEQUENCER_OSS=y
 CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
 CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
 CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_RTCTIMER=m
+CONFIG_SND_RTCTIMER=y
 CONFIG_SND_DYNAMIC_MINORS=y
 # CONFIG_SND_SUPPORT_OLD_API is not set
 
@@ -2428,7 +2492,9 @@
 CONFIG_SND_MPU401=m
 CONFIG_SND_PORTMAN2X4=m
 CONFIG_SND_AC97_POWER_SAVE=y
-CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
+CONFIG_SND_AC97_POWER_SAVE_DEFAULT=5
+
+CONFIG_SND_DRIVERS=y
 
 #
 # ISA devices
@@ -2439,6 +2505,7 @@
 #
 # PCI devices
 #
+CONFIG_SND_PCI=y
 CONFIG_SND_ADLIB=m
 CONFIG_SND_ALI5451=m
 CONFIG_SND_ALS300=m
@@ -2467,7 +2534,7 @@
 CONFIG_SND_ES1968=m
 CONFIG_SND_FM801=m
 CONFIG_SND_FM801_TEA575X_BOOL=y
-CONFIG_SND_HDA_INTEL=m
+CONFIG_SND_HDA_INTEL=y
 CONFIG_SND_HDA_HWDEP=y
 CONFIG_SND_HDA_CODEC_REALTEK=y
 CONFIG_SND_HDA_CODEC_ANALOG=y
@@ -2484,7 +2551,7 @@
 CONFIG_SND_HIFIER=m
 CONFIG_SND_ICE1712=m
 CONFIG_SND_ICE1724=m
-CONFIG_SND_INTEL8X0=m
+CONFIG_SND_INTEL8X0=y
 CONFIG_SND_INTEL8X0M=m
 CONFIG_SND_KORG1212=m
 CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL=y
@@ -2495,7 +2562,7 @@
 CONFIG_SND_NM256=m
 CONFIG_SND_OXYGEN=m
 CONFIG_SND_RME32=m
-# CONFIG_SND_PCSP is not set
+CONFIG_SND_PCSP=m
 CONFIG_SND_PCXHR=m
 CONFIG_SND_RIPTIDE=m
 CONFIG_SND_RME96=m
@@ -2515,6 +2582,7 @@
 #
 # ALSA USB devices
 #
+CONFIG_SND_USB=y
 CONFIG_SND_USB_AUDIO=m
 CONFIG_SND_USB_CAIAQ=m
 CONFIG_SND_USB_CAIAQ_INPUT=y
@@ -2523,6 +2591,7 @@
 #
 # PCMCIA devices
 #
+# CONFIG_SND_PCMCIA is not set
 # CONFIG_SND_VXPOCKET is not set
 
 #
@@ -2535,11 +2604,12 @@
 #
 CONFIG_USB=y
 CONFIG_USB_SUPPORT=y
+# CONFIG_USB_DEBUG is not set
 
 # DEPRECATED: See bug 362221. Fix udev.
 # CONFIG_USB_DEVICE_CLASS is not set
 
-# CONFIG_USB_PERSIST is not set
+CONFIG_USB_PERSIST=y
 
 #
 # Miscellaneous USB options
@@ -2551,13 +2621,13 @@
 #
 # USB Host Controller Drivers
 #
-CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_EHCI_SPLIT_ISO=y
 CONFIG_USB_EHCI_ROOT_HUB_TT=y
 CONFIG_USB_EHCI_TT_NEWSCHED=y
-CONFIG_USB_OHCI_HCD=m
+CONFIG_USB_OHCI_HCD=y
 # CONFIG_USB_OHCI_HCD_SSB is not set
-CONFIG_USB_UHCI_HCD=m
+CONFIG_USB_UHCI_HCD=y
 # CONFIG_USB_SL811_CS is not set
 # CONFIG_USB_R8A66597_HCD is not set
 
@@ -2581,6 +2651,7 @@
 CONFIG_USB_STORAGE_DPCM=y
 CONFIG_USB_STORAGE_SDDR09=y
 CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_SIERRA=y
 CONFIG_USB_STORAGE_JUMPSHOT=y
 CONFIG_USB_STORAGE_USBAT=y
 CONFIG_USB_STORAGE_ONETOUCH=y
@@ -2610,12 +2681,6 @@
 CONFIG_USB_IDMOUSE=m
 
 #
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-
-#
 # USB Imaging devices
 #
 CONFIG_USB_MDC800=m
@@ -2630,18 +2695,26 @@
 CONFIG_USB_VICAM=m
 CONFIG_USB_DSBR=m
 CONFIG_USB_ET61X251=m
+CONFIG_USB_GSPCA=m
 CONFIG_USB_IBMCAM=m
 CONFIG_USB_KONICAWC=m
 CONFIG_USB_OV511=m
+CONFIG_USB_S2255=m
 CONFIG_USB_SE401=m
+# CONFIG_VIDEO_SH_MOBILE_CEU is not set
 CONFIG_USB_STV680=m
 CONFIG_USB_SN9C102=m
 CONFIG_USB_ZR364XX=m
+CONFIG_SOC_CAMERA=m
+CONFIG_SOC_CAMERA_MT9M001=m
+CONFIG_SOC_CAMERA_MT9V022=m
+CONFIG_SOC_CAMERA_PLATFORM=m
 
 #
 # USB Network adaptors
 #
 CONFIG_USB_CATC=m
+CONFIG_USB_HSO=m
 CONFIG_USB_KAWETH=m
 CONFIG_USB_PEGASUS=m
 CONFIG_USB_RTL8150=m
@@ -2694,7 +2767,7 @@
 CONFIG_USB_SERIAL_EMPEG=m
 CONFIG_USB_SERIAL_FTDI_SIO=m
 CONFIG_USB_SERIAL_FUNSOFT=m
-CONFIG_USB_SERIAL_GARMIN=m
+# CONFIG_USB_SERIAL_GARMIN is not set
 CONFIG_USB_SERIAL_HP4X=m
 CONFIG_USB_SERIAL_IPAQ=m
 CONFIG_USB_SERIAL_IPW=m
@@ -2790,13 +2863,11 @@
 CONFIG_USB_TRANCEVIBRATOR=m
 CONFIG_USB_U132_HCD=m
 CONFIG_USB_UEAGLEATM=m
+CONFIG_USB_UVCVIDEO=m
 CONFIG_USB_W9968CF=m
 CONFIG_USB_XUSBATM=m
-CONFIG_USB_ZC0301=m
+CONFIG_USB_ZC0301=n
 CONFIG_USB_ZERO=m
-CONFIG_USB_VIDEO_CLASS=m
-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
-
 
 CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
 
@@ -2812,6 +2883,8 @@
 
 # Multifunction USB devices
 CONFIG_MFD_SM501=m
+CONFIG_MFD_SM501_GPIO=y
+# CONFIG_MFD_TC6393XB is not set
 
 #
 # File systems
@@ -2821,16 +2894,17 @@
 CONFIG_EXT2_FS_POSIX_ACL=y
 CONFIG_EXT2_FS_SECURITY=y
 CONFIG_EXT2_FS_XIP=y
-CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS=y
 CONFIG_EXT3_FS_XATTR=y
 CONFIG_EXT3_FS_POSIX_ACL=y
 CONFIG_EXT3_FS_SECURITY=y
-CONFIG_JBD=m
+CONFIG_JBD=y
 # CONFIG_JBD_DEBUG is not set
-CONFIG_EXT4DEV_FS=m
-CONFIG_EXT4DEV_FS_XATTR=y
-CONFIG_EXT4DEV_FS_POSIX_ACL=y
-CONFIG_EXT4DEV_FS_SECURITY=y
+CONFIG_EXT4_FS=m
+CONFIG_EXT4_FS_XATTR=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_EXT4DEV_COMPAT=y
 CONFIG_JBD2_DEBUG=y
 CONFIG_FS_MBCACHE=y
 CONFIG_REISERFS_FS=m
@@ -2925,6 +2999,7 @@
 # CONFIG_UFS_DEBUG is not set
 CONFIG_9P_FS=m
 CONFIG_FUSE_FS=m
+CONFIG_OMFS_FS=m
 
 #
 # Network File Systems
@@ -2979,6 +3054,7 @@
 # CONFIG_OCFS2_DEBUG_MASKLOG is not set
 CONFIG_OCFS2_FS_O2CB=m
 CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
+# CONFIG_OCFS2_FS_STATS is not set
 CONFIG_CONFIGFS_FS=m
 
 CONFIG_DLM=m
@@ -2987,6 +3063,11 @@
 CONFIG_GFS2_FS_LOCKING_NOLOCK=m
 CONFIG_GFS2_FS_LOCKING_DLM=m
 
+CONFIG_UBIFS_FS=m
+CONFIG_UBIFS_FS_XATTR=y
+# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
+# CONFIG_UBIFS_FS_DEBUG is not set
+
 #
 # Partition Types
 #
@@ -3126,7 +3207,9 @@
 # Cryptographic options
 #
 CONFIG_CRYPTO=y
+CONFIG_CRYPTO_FIPS=y
 CONFIG_CRYPTO_HW=y
+CONFIG_CRYPTO_BLKCIPHER=y
 CONFIG_CRYPTO_MANAGER=m
 # CONFIG_CRYPTO_CRYPTD is not set
 CONFIG_CRYPTO_AES=m
@@ -3157,6 +3240,10 @@
 CONFIG_CRYPTO_MICHAEL_MIC=m
 CONFIG_CRYPTO_NULL=m
 CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_RMD128=m
+CONFIG_CRYPTO_RMD160=m
+CONFIG_CRYPTO_RMD256=m
+CONFIG_CRYPTO_RMD320=m
 CONFIG_CRYPTO_SALSA20=m
 CONFIG_CRYPTO_SALSA20_586=m
 CONFIG_CRYPTO_SEED=m
@@ -3176,6 +3263,9 @@
 CONFIG_CRYPTO_DEV_HIFN_795X=m
 CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
 
+# Random number generation
+CONFIG_CRYPTO_PRNG=m
+
 #
 # Library routines
 #
@@ -3183,6 +3273,7 @@
 CONFIG_CRC32=m
 CONFIG_CRC_CCITT=m
 CONFIG_CRC_ITU_T=m
+CONFIG_CRC_T10DIF=m
 
 CONFIG_ZLIB_INFLATE=y
 CONFIG_ZLIB_DEFLATE=m
@@ -3206,16 +3297,15 @@
 CONFIG_FB_ATY_BACKLIGHT=y
 
 CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_PLATFORM=m
 
 CONFIG_SCHEDSTATS=y
 CONFIG_SCHED_DEBUG=y
 CONFIG_FAIR_GROUP_SCHED=y
 CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-CONFIG_GROUP_SCHED=n
-# with GROUP_SCHED disabled these three have no effect
-# CONFIG_FAIR_GROUP_SCHED=y
-# CONFIG_RT_GROUP_SCHED=y
-# CONFIG_CGROUP_SCHED=y
+CONFIG_GROUP_SCHED=y
+CONFIG_RT_GROUP_SCHED=y
+CONFIG_CGROUP_SCHED=y
 # NOTE: Before changing the below, take notice that page struct will grow past a cacheline on 32bit.
 # CONFIG_CGROUP_MEM_RES_CTLR is not set
 
@@ -3235,6 +3325,7 @@
 CONFIG_ENABLE_MUST_CHECK=y
 
 CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
 
 CONFIG_KEXEC=y
 
@@ -3252,6 +3343,7 @@
 CONFIG_PM_DEBUG=y
 CONFIG_PM_TRACE=y
 # CONFIG_PM_VERBOSE is not set
+CONFIG_PM_TEST_SUSPEND=y
 
 CONFIG_CRASH=m
 
@@ -3416,28 +3508,39 @@
 CONFIG_RESOURCES_64BIT=y
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
+# CONFIG_LEDS_AMS_DELTA is not set
 # CONFIG_LEDS_CORGI is not set
+# CONFIG_LEDS_IXP4XX is not set
 # CONFIG_LEDS_LOCOMO is not set
+# CONFIG_LEDS_NET48XX is not set
+# CONFIG_LEDS_PCA9532 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_S3C24XX is not set
 # CONFIG_LEDS_SPITZ is not set
-# CONFIG_LEDS_IXP4XX is not set
 # CONFIG_LEDS_TOSA is not set
-# CONFIG_LEDS_S3C24XX is not set
-# CONFIG_LEDS_AMS_DELTA is not set
-# CONFIG_LEDS_NET48XX is not set
 CONFIG_LEDS_TRIGGERS=y
 CONFIG_LEDS_TRIGGER_TIMER=m
 CONFIG_LEDS_TRIGGER_IDE_DISK=y
 CONFIG_LEDS_TRIGGER_HEARTBEAT=m
 CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
 
+CONFIG_DMADEVICES=y
 CONFIG_DMA_ENGINE=y
 CONFIG_NET_DMA=y
+# CONFIG_DMATEST is not set
 
 CONFIG_UNUSED_SYMBOLS=y
 
 CONFIG_UTRACE=y
 CONFIG_UTRACE_PTRACE=y
 
+# CONFIG_FTRACE is not set
+CONFIG_IRQSOFF_TRACER=y
+CONFIG_SCHED_TRACER=y
+CONFIG_CONTEXT_SWITCH_TRACER=y
+# CONFIG_DYNAMIC_FTRACE is not set
+# CONFIG_FTRACE_STARTUP_TEST is not set
+
 CONFIG_KPROBES=y
 
 # CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
@@ -3468,6 +3571,8 @@
 CONFIG_UIO=m
 CONFIG_UIO_CIF=m
 CONFIG_UIO_SMX=m
+CONFIG_UIO_PDRV=m
+CONFIG_UIO_PDRV_GENIRQ=m
 
 CONFIG_INSTRUMENTATION=y
 CONFIG_MARKERS=y
@@ -3478,18 +3583,18 @@
 # LIRC
 CONFIG_INPUT_LIRC=y
 CONFIG_LIRC_DEV=m
-CONFIG_LIRC_ATIUSB=m
 CONFIG_LIRC_BT829=m
-CONFIG_LIRC_CMDIR=m
 CONFIG_LIRC_I2C=m
 CONFIG_LIRC_IGORPLUGUSB=m
 CONFIG_LIRC_IMON=m
 CONFIG_LIRC_IT87=m
+CONFIG_LIRC_ITE8709=m
 CONFIG_LIRC_MCEUSB=m
 CONFIG_LIRC_MCEUSB2=m
-CONFIG_LIRC_PVR150=m
+CONFIG_LIRC_ZILOG=m
 CONFIG_LIRC_PARALLEL=m
 CONFIG_LIRC_SERIAL=m
+CONFIG_LIRC_SASEM=m
 CONFIG_LIRC_SIR=m
 CONFIG_LIRC_STREAMZAP=m
 CONFIG_LIRC_TTUSBIR=m
@@ -3500,7 +3605,7 @@
 
 CONFIG_PM_TRACE_RTC=y
 CONFIG_R6040=m
-CONFIG_IGB=m
+
 CONFIG_BNX2X=m
 CONFIG_NOZOMI=m
 CONFIG_PCF8575=m
@@ -3544,9 +3649,15 @@
 
 # CONFIG_HTC_PASIC3 is not set
 
-CONFIG_SOC_CAMERA=m
-CONFIG_SOC_CAMERA_MT9M001=m
-CONFIG_SOC_CAMERA_MT9V022=m
 # MT9V022_PCA9536_SWITCH is not set
 
-# CONFIG_THERMAL_HWMON is not set
+CONFIG_THERMAL_HWMON=y
+
+CONFIG_OPTIMIZE_INLINING=y
+
+# FIXME: This should be x86/ia64 only
+# CONFIG_HP_ILO is not set
+
+# CONFIG_GPIOLIB is not set
+
+CONFIG_HP_WMI=m


Index: config-i686
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-i686,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- config-i686	9 Aug 2008 21:35:42 -0000	1.2
+++ config-i686	30 Oct 2008 04:41:11 -0000	1.3
@@ -3,7 +3,6 @@
 CONFIG_HIGHMEM4G=y
 # CONFIG_HIGHMEM64G is not set
 
-# temporarily disable padlock until bugs are fixed
-# CONFIG_CRYPTO_DEV_PADLOCK is not set
+CONFIG_CRYPTO_DEV_PADLOCK=m
 CONFIG_CRYPTO_DEV_PADLOCK_AES=m
 CONFIG_CRYPTO_DEV_PADLOCK_SHA=m


Index: config-ia64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-ia64-generic,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- config-ia64-generic	4 Aug 2008 22:20:04 -0000	1.11
+++ config-ia64-generic	30 Oct 2008 04:41:11 -0000	1.12
@@ -104,6 +104,17 @@
 #
 CONFIG_SGI_SNSC=y
 CONFIG_IA64_SGI_SN_XP=y
+CONFIG_SGI_TIOCX=y
+CONFIG_SGI_MBCS=m
+CONFIG_SGI_IOC3=m
+CONFIG_SGI_IOC4=y
+CONFIG_SGI_XP=m
+CONFIG_SGI_GRU=m
+# CONFIG_SGI_GRU_DEBUG is not set
+CONFIG_SERIAL_SGI_L1_CONSOLE=y
+CONFIG_SERIAL_SGI_IOC3=m
+CONFIG_SERIAL_SGI_IOC4=m
+
 
 #
 # SCSI low-level drivers
@@ -135,7 +146,6 @@
 CONFIG_ACPI_VIDEO=m
 # CONFIG_ACPI_PROC_EVENT is not set
 
-CONFIG_SERIAL_SGI_L1_CONSOLE=y
 CONFIG_PM=y
 CONFIG_HOTPLUG_PCI=y
 # CONFIG_HPET is not set
@@ -145,8 +155,6 @@
 CONFIG_PNPACPI=y
 
 CONFIG_SCHED_SMT=y
-CONFIG_SGI_TIOCX=y
-CONFIG_SGI_MBCS=m
 
 CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
 
@@ -165,11 +173,6 @@
 
 # CONFIG_CRASH is not set
 
-CONFIG_SERIAL_SGI_IOC3=m
-CONFIG_SGI_IOC3=m
-CONFIG_SERIAL_SGI_IOC4=m
-CONFIG_SGI_IOC4=y
-
 # CONFIG_PERMIT_BSP_REMOVE is not set
 # CONFIG_FORCE_CPEI_RETARGET is not set
 
@@ -179,7 +182,6 @@
 
 CONFIG_HW_RANDOM_INTEL=m
 
-#temporary until ia64 kexec/kdump is fixed (breaks xen)
 CONFIG_CRASH_DUMP=y
 CONFIG_PROC_VMCORE=y
 
@@ -197,7 +199,11 @@
 CONFIG_FRAME_WARN=2048
 
 CONFIG_VIRT_CPU_ACCOUNTING=y
-CONFIG_SGI_XP=m
 CONFIG_VIRTUALIZATION=y
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
+
+CONFIG_HP_ILO=m
+
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y


Index: config-nodebug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-nodebug,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- config-nodebug	4 Aug 2008 22:20:04 -0000	1.14
+++ config-nodebug	30 Oct 2008 04:41:11 -0000	1.15
@@ -1,7 +1,6 @@
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
+CONFIG_SND_VERBOSE_PRINTK=y
+CONFIG_SND_DEBUG=y
+CONFIG_SND_PCM_XRUN_DEBUG=y
 
 # CONFIG_DEBUG_MUTEXES is not set
 # CONFIG_DEBUG_RT_MUTEXES is not set
@@ -29,8 +28,6 @@
 
 # CONFIG_DEBUG_PAGEALLOC is not set
 
-# CONFIG_USB_DEBUG is not set
-
 # CONFIG_DEBUG_WRITECOUNT is not set
 # CONFIG_DEBUG_OBJECTS is not set
 # CONFIG_DEBUG_OBJECTS_SELFTEST is not set
@@ -40,3 +37,7 @@
 # CONFIG_X86_PTDUMP is not set
 
 # CONFIG_CAN_DEBUG_DEVICES is not set
+
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set


Index: config-powerpc-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-powerpc-generic,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- config-powerpc-generic	4 Aug 2008 22:20:04 -0000	1.18
+++ config-powerpc-generic	30 Oct 2008 04:41:11 -0000	1.19
@@ -211,6 +211,7 @@
 CONFIG_USB_EHCI_HCD_PPC_OF=y
 
 # CONFIG_MPC5121_ADS is not set
+# CONFIG_MPC5121_GENERIC is not set
 CONFIG_MTD_OF_PARTS=m
 # CONFIG_MTD_NAND_FSL_ELBC is not set
 CONFIG_THERMAL=y
@@ -219,3 +220,36 @@
 
 CONFIG_DMADEVICES=y
 # CONFIG_FSL_DMA is not set
+
+CONFIG_SND_PPC=y
+
+CONFIG_PPC_82xx=y
+CONFIG_PPC_83xx=y
+CONFIG_PPC_86xx=y
+CONFIG_EXTRA_TARGETS=""
+# CONFIG_CODE_PATCHING_SELFTEST is not set
+# CONFIG_FTR_FIXUP_SELFTEST is not set
+
+# CONFIG_MATH_EMULATION is not set
+# CONFIG_RAPIDIO is not set
+# CONFIG_FS_ENET is not set
+# CONFIG_UCC_GETH is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_SERIAL_CPM is not set
+# CONFIG_SERIAL_QE is not set
+# CONFIG_I2C_CPM is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_W1_MASTER_GPIO is not set
+# CONFIG_MT9M001_PCA9536_SWITCH is not set
+# CONFIG_MT9V022_PCA9536_SWITCH is not set
+# CONFIG_LEDS_GPIO is not set
+# CONFIG_KGDB_CONSOLE is not set
+# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_MAX732X is not set
+
+CONFIG_MDIO_OF_GPIO=m
+
+CONFIG_SERIO_XILINX_XPS_PS2=m
+
+# CONFIG_PPC_SMLPAR is not set


Index: config-powerpc32-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-powerpc32-generic,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- config-powerpc32-generic	2 Sep 2008 23:28:15 -0000	1.10
+++ config-powerpc32-generic	30 Oct 2008 04:41:11 -0000	1.11
@@ -144,3 +144,39 @@
 
 # PPC gets sad with debug alloc (bz 448598)
 # CONFIG_DEBUG_PAGEALLOC is not set
+
+CONFIG_SND_ISA=y
+CONFIG_CRYPTO_DEV_TALITOS=m
+
+CONFIG_FSL_EMB_PERFMON=y
+CONFIG_MPC8272_ADS=y
+CONFIG_PQ2FADS=y
+CONFIG_EP8248E=y
+CONFIG_MPC831x_RDB=y
+CONFIG_MPC832x_MDS=y
+CONFIG_MPC832x_RDB=y
+CONFIG_MPC834x_MDS=y
+CONFIG_MPC834x_ITX=y
+CONFIG_MPC836x_MDS=y
+CONFIG_MPC836x_RDK=y
+CONFIG_MPC837x_MDS=y
+CONFIG_MPC837x_RDB=y
+CONFIG_SBC834x=y
+CONFIG_ASP834x=y
+CONFIG_MPC8641_HPCN=y
+CONFIG_SBC8641D=y
+CONFIG_MPC8610_HPCD=y
+
+CONFIG_83xx_WDT=m
+CONFIG_8xxx_WDT=m
+
+# CONFIG_USB_MUSB_HDRC is not set
+
+# busted in 2.6.27
+# drivers/mtd/maps/sbc8240.c: In function 'init_sbc8240_mtd':
+# drivers/mtd/maps/sbc8240.c:172: warning: passing argument 1 of 'simple_map_init' from incompatible pointer type
+# drivers/mtd/maps/sbc8240.c:177: error: 'struct mtd_info' has no member named 'module'
+# CONFIG_MTD_SBC8240 is not set
+
+CONFIG_MTD_NAND_FSL_UPM=m
+


Index: config-powerpc64
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-powerpc64,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- config-powerpc64	4 Aug 2008 22:20:04 -0000	1.15
+++ config-powerpc64	30 Oct 2008 04:41:11 -0000	1.16
@@ -163,3 +163,15 @@
 CONFIG_BLK_DEV_HD_ONLY=y
 CONFIG_VIRTUALIZATION=y
 
+CONFIG_VSX=y
+
+CONFIG_SCSI_IBMVFC=m
+# CONFIG_SCSI_IBMVFC_TRACE is not set
+CONFIG_IBM_BSR=m
+
+CONFIG_SERIO_XILINX_XPS_PS2=m
+
+CONFIG_PPC_IBM_CELL_RESETBUTTON=y
+CONFIG_PPC_IBM_CELL_POWERBUTTON=m
+CONFIG_CBE_CPUFREQ_SPU_GOVERNOR=m
+


Index: config-rhel-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-rhel-generic,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- config-rhel-generic	24 Sep 2007 21:59:53 -0000	1.11
+++ config-rhel-generic	30 Oct 2008 04:41:11 -0000	1.12
@@ -1,23 +1,57 @@
+# CONFIG_ISA is not set
+# CONFIG_ISAPNP is not set
+# CONFIG_I2C_PCA_ISA is not set
+
 # CONFIG_SCSI_BUSLOGIC is not set
 # CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_DC390T is not set
+
 # CONFIG_ATALK is not set
 # CONFIG_DEV_APPLETALK is not set
 # CONFIG_LTPC is not set
 # CONFIG_COPS is not set
 # CONFIG_IPX is not set
 # CONFIG_IPDDP is not set
-# CONFIG_IRDA is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_ISAPNP is not set
+# CONFIG_DECNET is not set
+# CONFIG_PLIP is not set
+
 # CONFIG_PCMCIA_AHA152X is not set
 # CONFIG_PCMCIA_NINJA_SCSI is not set
 # CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_IEEE1394 is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
 # CONFIG_EL2 is not set
 # CONFIG_ELPLUS is not set
 # CONFIG_WD80x3 is not set
+# CONFIG_I82092 is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_ULTRA is not set
+# CONFIG_SKFP is not set
+# CONFIG_DE600 is not set
+# CONFIG_DE620 is not set
+# CONFIG_CS89x0 is not set
+# CONFIG_AC3200 is not set
+# CONFIG_NI52 is not set
+# CONFIG_NI65 is not set
+# CONFIG_LANCE is not set
+# CONFIG_EL16 is not set
+# CONFIG_EL3 is not set
+# CONFIG_3C515 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_HP100 is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_NET_SB1000 is not set
+# CONFIG_DEPCA is not set
+# CONFIG_ATP is not set
+
 # CONFIG_GAMEPORT is not set
-# CONFIG_DVB is not set
+
 # CONFIG_SND_AD1816A is not set
 # CONFIG_SND_AD1848 is not set
 # CONFIG_SND_CS4231 is not set
@@ -38,7 +72,7 @@
 # CONFIG_SND_SB8 is not set
 # CONFIG_SND_SB16 is not set
 # CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SB16_CSP=y
+# CONFIG_SND_SB16_CSP is not set
 # CONFIG_SND_WAVEFRONT is not set
 # CONFIG_SND_ALS100 is not set
 # CONFIG_SND_AZT2320 is not set
@@ -47,30 +81,22 @@
 # CONFIG_SND_OPL3SA2 is not set
 # CONFIG_SND_SGALAXY is not set
 # CONFIG_SND_SSCAPE is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
+
 # CONFIG_WAN_ROUTER is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_9P_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_FUSE_FS is not set
+
 # CONFIG_BINFMT_AOUT is not set
+
 # CONFIG_DRM_TDFX is not set
 # CONFIG_DRM_SIS is not set
+
 # CONFIG_BLK_DEV_UMEM is not set
+
 # CONFIG_MWAVE is not set
+
 # CONFIG_ROCKETPORT is not set
 # CONFIG_R3964 is not set
 # CONFIG_TIPAR is not set
+
 # CONFIG_JOYSTICK_ANALOG is not set
 # CONFIG_JOYSTICK_A3D is not set
 # CONFIG_JOYSTICK_ADI is not set
@@ -93,6 +119,7 @@
 # CONFIG_JOYSTICK_DB9 is not set
 # CONFIG_JOYSTICK_GAMECON is not set
 # CONFIG_JOYSTICK_TURBOGRAFX is not set
+
 # CONFIG_RADIO_CADET is not set
 # CONFIG_RADIO_RTRACK is not set
 # CONFIG_RADIO_RTRACK2 is not set
@@ -108,20 +135,10 @@
 # CONFIG_RADIO_TERRATEC is not set
 # CONFIG_RADIO_TRUST is not set
 # CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_TYPHOON_PROC_FS=y
 # CONFIG_RADIO_ZOLTRIX is not set
-# CONFIG_PLIP is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
+
+# CONFIG_TUNER_3036 is not set
+
 # CONFIG_VIDEO_PMS is not set
 # CONFIG_VIDEO_BWQCAM is not set
 # CONFIG_VIDEO_CQCAM is not set
@@ -130,7 +147,6 @@
 # CONFIG_VIDEO_CPIA_PP is not set
 # CONFIG_VIDEO_CPIA_USB is not set
 # CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
 # CONFIG_VIDEO_STRADIS is not set
 # CONFIG_VIDEO_ZORAN is not set
 # CONFIG_VIDEO_ZORAN_BUZ is not set
@@ -146,48 +162,43 @@
 # CONFIG_VIDEO_HEXIUM_GEMINI is not set
 # CONFIG_VIDEO_CX88 is not set
 # CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_I82092 is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_ULTRA is not set
-# CONFIG_SKFP is not set
-# CONFIG_DE600 is not set
-# CONFIG_DE620 is not set
-# CONFIG_CS89x0 is not set
-# CONFIG_AC3200 is not set
-# CONFIG_NI52 is not set
-# CONFIG_NI65 is not set
-# CONFIG_LANCE is not set
-# CONFIG_EL16 is not set
-# CONFIG_EL3 is not set
-# CONFIG_3C515 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_HP100 is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_NET_SB1000 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_ATP is not set
+
 # CONFIG_INFTL is not set
 # CONFIG_MTD_DOC2000 is not set
 # CONFIG_MTD_DOC2001PLUS is not set
 # CONFIG_MTD_PMC551 is not set
 # CONFIG_MTD_COMPLEX_MAPPINGS is not set
 # CONFIG_MTD_PCI is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
+
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_NEOMAGIC is not set
 # CONFIG_FB_ASILIANT is not set
 # CONFIG_FB_HGA_ACCEL is not set
 # CONFIG_FB_3DFX_ACCEL is not set
 # CONFIG_FB_TRIDENT_ACCEL is not set
-# CONFIG_SCSI_DC390T is not set
-CONFIG_AUDIT=y
+
 # CONFIG_AUTOFS_FS is not set
 # CONFIG_JFS_FS is not set
-# CONFIG_I2C_PCA_ISA is not set
-# CONFIG_DECNET is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_RAW_DRIVER=y
-# CONFIG_ISA is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_9P_FS is not set
+# CONFIG_OCFS2_FS is not set
 


Index: config-s390x
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-s390x,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- config-s390x	4 Aug 2008 22:20:04 -0000	1.5
+++ config-s390x	30 Oct 2008 04:41:11 -0000	1.6
@@ -118,7 +118,6 @@
 # CONFIG_IRDA is not set
 # CONFIG_BT is not set
 # CONFIG_WIRELESS_EXT is not set
-# CONFIG_WLAN_PRE80211 is not set
 # CONFIG_WLAN_80211 is not set
 # CONFIG_MAC80211 is not set
 # CONFIG_IEEE80211 is not set
@@ -209,3 +208,11 @@
 CONFIG_KVM=m
 CONFIG_S390_GUEST=y
 
+
+CONFIG_MEMORY_HOTPLUG=y
+CONFIG_MEMORY_HOTREMOVE=y
+CONFIG_CHSC_SCH=m
+
+# drivers/isdn/hardware/mISDN/hfcmulti.c:5255:2: error: #error "not running on big endian machines now"
+# CONFIG_MISDN_HFCMULTI is not set
+


Index: config-sparc64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-sparc64-generic,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- config-sparc64-generic	11 Oct 2008 14:50:33 -0000	1.17
+++ config-sparc64-generic	30 Oct 2008 04:41:11 -0000	1.18
@@ -1,3 +1,4 @@
+# CONFIG_SMP is not set
 CONFIG_SPARC=y
 CONFIG_SPARC64=y
 CONFIG_SECCOMP=y
@@ -188,4 +189,9 @@
 
 CONFIG_NUMA=y
 
-CONFIG_ATL1E=n
+CONFIG_SND_SPARC=y
+
+CONFIG_HW_RANDOM_N2RNG=m
+
+# drivers/isdn/hardware/mISDN/hfcmulti.c:5255:2: error: #error "not running on big endian machines now"
+# CONFIG_MISDN_HFCMULTI is not set


Index: config-sparc64-smp
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-sparc64-smp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- config-sparc64-smp	12 Jul 2007 19:15:37 -0000	1.1
+++ config-sparc64-smp	30 Oct 2008 04:41:11 -0000	1.2
@@ -0,0 +1 @@
+CONFIG_SMP=y


Index: config-x86-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-x86-generic,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- config-x86-generic	9 Aug 2008 21:35:42 -0000	1.36
+++ config-x86-generic	30 Oct 2008 04:41:11 -0000	1.37
@@ -15,6 +15,7 @@
 # CONFIG_X86_SUMMIT is not set
 # CONFIG_X86_BIGSMP is not set
 # CONFIG_X86_VISWS is not set
+# CONFIG_X86_RDC321X is not set
 # CONFIG_X86_ES7000 is not set
 # CONFIG_M386 is not set
 # CONFIG_M486 is not set
@@ -82,6 +83,11 @@
 CONFIG_FB_EFI=y
 # CONFIG_FB_N411 is not set
 
+CONFIG_FB_GEODE=y
+CONFIG_FB_GEODE_LX=y
+CONFIG_FB_GEODE_GX=y
+# CONFIG_FB_GEODE_GX1 is not set
+
 # CONFIG_PCI_GOBIOS is not set
 # CONFIG_PCI_GODIRECT is not set
 # CONFIG_PCI_GOMMCONFIG is not set
@@ -126,12 +132,12 @@
 CONFIG_X86_MPPARSE=y
 
 CONFIG_ACPI=y
-CONFIG_ACPI_AC=m
+CONFIG_ACPI_AC=y
 # CONFIG_ACPI_ASUS is not set
 CONFIG_ACPI_PROCFS_POWER=y
 CONFIG_ACPI_SYSFS_POWER=y
-CONFIG_ACPI_BATTERY=m
-CONFIG_ACPI_BAY=m
+CONFIG_ACPI_BATTERY=y
+CONFIG_ACPI_BAY=y
 CONFIG_ACPI_BLACKLIST_YEAR=1999
 CONFIG_ACPI_BUTTON=y
 CONFIG_ACPI_CONTAINER=m
@@ -200,6 +206,8 @@
 CONFIG_CRYPTO_AES_586=m
 CONFIG_CRYPTO_TWOFISH_586=m
 # CONFIG_CRYPTO_DEV_PADLOCK is not set
+# CONFIG_CRYPTO_DEV_PADLOCK_AES is not set
+# CONFIG_CRYPTO_DEV_PADLOCK_SHA is not set
 
 CONFIG_GENERIC_ISA_DMA=y
 CONFIG_SCHED_SMT=y
@@ -209,7 +217,7 @@
 CONFIG_PM_STD_PARTITION=""
 
 CONFIG_DEBUG_RODATA=y
-# CONFIG_DEBUG_STACKOVERFLOW is not set
+CONFIG_DEBUG_STACKOVERFLOW=y
 CONFIG_4KSTACKS=y
 CONFIG_DEBUG_NMI_TIMEOUT=5
 
@@ -251,13 +259,16 @@
 CONFIG_I2C_AMD8111=m
 CONFIG_I2C_I801=m
 CONFIG_I2C_I810=m
+CONFIG_I2C_ISCH=m
 CONFIG_I2C_NFORCE2=m
+CONFIG_I2C_NFORCE2_S4985=m
 CONFIG_I2C_PIIX4=m
 CONFIG_I2C_PROSAVAGE=m
 CONFIG_I2C_SAVAGE4=m
 CONFIG_I2C_SIS5595=m
 CONFIG_I2C_SIS630=m
 CONFIG_I2C_SIS96X=m
+
 CONFIG_I2C_VIA=m
 CONFIG_I2C_VIAPRO=m
 CONFIG_I2C_VOODOO3=m
@@ -282,10 +293,12 @@
 CONFIG_EDAC_I82975X=m
 CONFIG_EDAC_I3000=m
 CONFIG_EDAC_I5000=m
+CONFIG_EDAC_I5100=m
 CONFIG_EDAC_R82600=m
 
 CONFIG_SCHED_MC=y
 
+CONFIG_SND_ISA=y
 CONFIG_SND_ES18XX=m
 
 CONFIG_TCG_INFINEON=m
@@ -302,32 +315,52 @@
 # CONFIG_SGI_IOC4 is not set
 
 CONFIG_ASUS_LAPTOP=m
+CONFIG_COMPAL_LAPTOP=m
+CONFIG_EEEPC_LAPTOP=m
 CONFIG_FUJITSU_LAPTOP=m
+# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
 CONFIG_MSI_LAPTOP=m
 CONFIG_SONY_LAPTOP=m
-CONFIG_EEEPC_LAPTOP=m
 
 # CONFIG_SMSC37B787_WDT is not set
 CONFIG_W83697HF_WDT=m
 
-CONFIG_PARAVIRT=y
-
 CONFIG_RELOCATABLE=y
 CONFIG_PHYSICAL_ALIGN=0x400000
 CONFIG_PHYSICAL_START=0x400000
 CONFIG_CRASH_DUMP=y
+# CONFIG_KEXEC_JUMP is not set
 CONFIG_PROC_VMCORE=y
 
 CONFIG_CRYPTO_DEV_GEODE=m
 
 CONFIG_VIDEO_CAFE_CCIC=m
 
+CONFIG_VIRTUALIZATION=y
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
 CONFIG_KVM_AMD=m
+CONFIG_KVM_TRACE=y
+CONFIG_LGUEST=m
+
+CONFIG_PARAVIRT_GUEST=y
+CONFIG_PARAVIRT=y
+# CONFIG_PARAVIRT_DEBUG is not set
 CONFIG_KVM_CLOCK=y
 CONFIG_KVM_GUEST=y
-CONFIG_KVM_TRACE=y
+CONFIG_LGUEST_GUEST=y
+CONFIG_VMI=y
+
+CONFIG_XEN=y
+CONFIG_XEN_MAX_DOMAIN_MEMORY=8
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_SCRUB_PAGES=y
+CONFIG_XEN_SAVE_RESTORE=y
+CONFIG_HVC_XEN=y
+CONFIG_XEN_FBDEV_FRONTEND=y
+CONFIG_XEN_KBDDEV_FRONTEND=y
+CONFIG_XEN_BLKDEV_FRONTEND=m
+CONFIG_XEN_NETDEV_FRONTEND=m
 
 CONFIG_MTD_ESB2ROM=m
 CONFIG_MTD_CK804XROM=m
@@ -351,14 +384,6 @@
 CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
 
-CONFIG_VIRTUALIZATION=y
-CONFIG_PARAVIRT_GUEST=y
-CONFIG_VMI=y
-CONFIG_LGUEST=m
-CONFIG_LGUEST_GUEST=y
-# CONFIG_XEN is not set
-# CONFIG_HVC_XEN is not set
-
 CONFIG_DMADEVICES=y
 CONFIG_INTEL_IOATDMA=m
 
@@ -370,7 +395,22 @@
 CONFIG_HP_WATCHDOG=m
 
 CONFIG_OLPC=y
-CONFIG_BATTERY_OLPC=m
+CONFIG_BATTERY_OLPC=y
+
+CONFIG_STRICT_DEVMEM=y
+
+# CONFIG_MEMTEST is not set
+# CONFIG_MAXSMP is not set
+CONFIG_MTRR_SANITIZER=y
+CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0
+CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
+CONFIG_SYSPROF_TRACER=y
+
+# CONFIG_X86_VERBOSE_BOOTUP is not set
+# CONFIG_MMIOTRACE is not set
+
+# CONFIG_DEBUG_PER_CPU_MAPS is not set
 
-CONFIG_NONPROMISC_DEVMEM=y
+CONFIG_HP_ILO=m
 
+CONFIG_BACKLIGHT_MBP_NVIDIA=m


Index: config-x86_64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/config-x86_64-generic,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- config-x86_64-generic	9 Aug 2008 21:35:42 -0000	1.35
+++ config-x86_64-generic	30 Oct 2008 04:41:11 -0000	1.36
@@ -1,6 +1,5 @@
 CONFIG_64BIT=y
 CONFIG_UID16=y
-# CONFIG_X86_64_XEN is not set
 # CONFIG_MK8 is not set
 # CONFIG_MPSC is not set
 CONFIG_GENERIC_CPU=y
@@ -11,6 +10,7 @@
 CONFIG_K8_NUMA=y
 CONFIG_X86_64_ACPI_NUMA=y
 # CONFIG_NUMA_EMU is not set
+CONFIG_MAXSMP=y
 CONFIG_NR_CPUS=64
 CONFIG_X86_POWERNOW_K8=m
 CONFIG_X86_POWERNOW_K8_ACPI=y
@@ -97,12 +97,15 @@
 CONFIG_ACPI_PROC_EVENT=y
 
 CONFIG_ASUS_LAPTOP=m
+CONFIG_COMPAL_LAPTOP=m
 CONFIG_FUJITSU_LAPTOP=m
+# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
 CONFIG_MSI_LAPTOP=m
 CONFIG_SONY_LAPTOP=m
 CONFIG_SONYPI_COMPAT=y
 # CONFIG_EEEPC_LAPTOP is not set
 
+
 CONFIG_THINKPAD_ACPI=m
 # CONFIG_THINKPAD_ACPI_DEBUG is not set
 CONFIG_THINKPAD_ACPI_BAY=y
@@ -137,6 +140,8 @@
 CONFIG_PNPACPI=y
 
 CONFIG_BLK_DEV_AMD74XX=y
+CONFIG_CRYPTO_DEV_PADLOCK=m
+CONFIG_CRYPTO_DEV_PADLOCK_AES=y
 CONFIG_CRYPTO_AES_X86_64=m
 CONFIG_CRYPTO_TWOFISH_X86_64=m
 CONFIG_CRYPTO_SALSA20_X86_64=m
@@ -152,10 +157,13 @@
 CONFIG_I2C_AMD756_S4882=m
 CONFIG_I2C_AMD8111=m
 CONFIG_I2C_I801=m
+CONFIG_I2C_ISCH=m
 # CONFIG_I2C_I810 is not set
+CONFIG_I2C_NFORCE2_S4985=m
 CONFIG_I2C_PIIX4=m
 # CONFIG_I2C_SIS5595 is not set
 # CONFIG_I2C_SIS630 is not set
+
 CONFIG_I2C_SIS96X=m
 CONFIG_I2C_VIA=m
 CONFIG_I2C_VIAPRO=m
@@ -172,6 +180,7 @@
 CONFIG_EDAC_E7XXX=m
 CONFIG_EDAC_E752X=m
 CONFIG_EDAC_I5000=m
+CONFIG_EDAC_I5100=m
 CONFIG_EDAC_I82875P=m
 CONFIG_EDAC_I82860=m
 CONFIG_EDAC_I82975X=m
@@ -212,18 +221,15 @@
 # CONFIG_CC_STACKPROTECTOR_ALL is not set
 
 CONFIG_SGI_IOC4=m
-# CONFIG_SGI_IOC4 is not set
+CONFIG_SGI_XP=m
+CONFIG_SGI_GRU=m
+# CONFIG_SGI_GRU_DEBUG is not set
 
 # CONFIG_SMSC37B787_WDT is not set
 CONFIG_W83697HF_WDT=m
 
 # CONFIG_VIDEO_CAFE_CCIC is not set
 
-CONFIG_KVM=m
-CONFIG_KVM_INTEL=m
-CONFIG_KVM_AMD=m
-CONFIG_KVM_TRACE=y
-
 CONFIG_MTD_ESB2ROM=m
 CONFIG_MTD_CK804XROM=m
 
@@ -246,17 +252,33 @@
 CONFIG_CPU_IDLE_GOV_MENU=y
 
 CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=m
+CONFIG_KVM_INTEL=m
+CONFIG_KVM_AMD=m
+CONFIG_KVM_TRACE=y
+
+CONFIG_PARAVIRT_GUEST=y
+CONFIG_PARAVIRT=y
+# CONFIG_PARAVIRT_DEBUG is not set
+CONFIG_KVM_CLOCK=y
+CONFIG_KVM_GUEST=y
+
+CONFIG_XEN=y
+CONFIG_XEN_MAX_DOMAIN_MEMORY=32
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_SCRUB_PAGES=y
+CONFIG_XEN_SAVE_RESTORE=y
+CONFIG_HVC_XEN=y
+CONFIG_XEN_FBDEV_FRONTEND=y
+CONFIG_XEN_KBDDEV_FRONTEND=y
+CONFIG_XEN_BLKDEV_FRONTEND=m
+CONFIG_XEN_NETDEV_FRONTEND=m
 
 CONFIG_DMADEVICES=y
 CONFIG_INTEL_IOATDMA=m
 
 CONFIG_SENSORS_I5K_AMB=m
 
-CONFIG_PARAVIRT_GUEST=y
-CONFIG_KVM_CLOCK=y
-CONFIG_KVM_GUEST=y
-CONFIG_PARAVIRT=y
-
 # CONFIG_COMPAT_VDSO is not set
 CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
 # CONFIG_DEBUG_PER_CPU_MAPS is not set
@@ -272,7 +294,20 @@
 CONFIG_X86_PAT=y
 # FIXME: These should be 32bit only
 # CONFIG_FB_N411 is not set
-CONFIG_NONPROMISC_DEVMEM=y
+CONFIG_STRICT_DEVMEM=y
 
 CONFIG_DIRECT_GBPAGES=y
 
+# CONFIG_MEMTEST is not set
+CONFIG_AMD_IOMMU=y
+# CONFIG_MAXSMP is not set
+CONFIG_MTRR_SANITIZER=y
+CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0
+CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
+CONFIG_SYSPROF_TRACER=y
+# CONFIG_X86_VERBOSE_BOOTUP is not set
+# CONFIG_MMIOTRACE is not set
+
+CONFIG_X86_MPPARSE=y
+
+CONFIG_BACKLIGHT_MBP_NVIDIA=m


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/kernel.spec,v
retrieving revision 1.813
retrieving revision 1.814
diff -u -r1.813 -r1.814
--- kernel.spec	23 Oct 2008 01:01:30 -0000	1.813
+++ kernel.spec	30 Oct 2008 04:41:11 -0000	1.814
@@ -20,7 +20,7 @@
 # kernel spec when the kernel is rebased, so fedora_build automatically
 # works out to the offset from the rebase, so it doesn't get too ginormous.
 #
-%define fedora_cvs_origin   727
+%define fedora_cvs_origin   813
 %define fedora_build_string %(R="$Revision$"; R="${R%% \$}"; R="${R#: 1.}"; echo $R)
 %define fedora_build_origin %(R=%{fedora_build_string}; R="${R%%%%.*}"; echo $R)
 %define fedora_build_prefix %(expr %{fedora_build_origin} - %{fedora_cvs_origin})
@@ -30,13 +30,13 @@
 # base_sublevel is the kernel version we're starting with and patching
 # on top of -- for example, 2.6.22-rc7-git1 starts with a 2.6.21 base,
 # which yields a base_sublevel of 21.
-%define base_sublevel 26
+%define base_sublevel 27
 
 ## If this is a released kernel ##
 %if 0%{?released_kernel}
 
 # Do we have a -stable update to apply?
-%define stable_update 7
+%define stable_update 4
 # Is it a -stable RC?
 %define stable_rc 0
 # Set rpm version accordingly
@@ -517,18 +517,14 @@
 Source21: config-debug
 Source22: config-nodebug
 Source23: config-generic
-Source24: config-xen-generic
 Source25: config-rhel-generic
-Source26: config-rhel-x86-generic
 
 Source30: config-x86-generic
 Source31: config-i586
 Source32: config-i686
 Source33: config-i686-PAE
-Source34: config-xen-x86
 
 Source40: config-x86_64-generic
-Source41: config-xen-x86_64
 
 Source50: config-powerpc-generic
 Source51: config-powerpc32-generic
@@ -537,13 +533,10 @@
 Source54: config-powerpc64-kdump
 
 Source60: config-ia64-generic
-Source61: config-ia64
-Source62: config-xen-ia64
 
 Source70: config-s390x
 
 Source90: config-sparc64-generic
-Source91: config-sparc64
 Source92: config-sparc64-smp
 
 # Here should be only the patches up to the upstream canonical Linus tree.
@@ -598,22 +591,15 @@
 # patches queued for the next -stable release
 #Patch11: linux-2.6-stable-queue.patch
 
-Patch20: linux-2.6-ptrace-cleanup.patch
-Patch21: linux-2.6-tracehook.patch
-Patch22: linux-2.6-utrace.patch
-Patch23: linux-2.6-kernel-doc-structs-private.patch
-Patch24: linux-2.6.27-x86-tracehook-syscall-arg-order.patch
+Patch21: linux-2.6-utrace.patch
+Patch22: linux-2.6-x86-tracehook.patch
+Patch23: linux-2.6.27-x86-tracehook-syscall-arg-order.patch
 
 Patch41: linux-2.6-sysrq-c.patch
-Patch42: linux-2.6-sched-clock-fix-nohz-interaction.patch
 
 Patch70: linux-2.6-x86-tune-generic.patch
 Patch75: linux-2.6-x86-debug-boot.patch
-Patch87: linux-2.6-x86-apic-dump-all-regs-v3.patch
-Patch97: linux-2.6-x86-hpet-04-workaround-sb700-bios.patch
-Patch100: linux-2.6-x86-pci-detect-end_bus_number.patch
 Patch101: linux-2.6-x86-check-for-null-irq-context.patch
-Patch106: linux-2.6-x86-sb450-skip-irq0-override-if-not-routed-to-INT2.patch
 
 # ppc
 Patch140: linux-2.6-ps3-ehci-iso.patch
@@ -622,9 +608,6 @@
 Patch143: linux-2.6-g5-therm-shutdown.patch
 Patch144: linux-2.6-vio-modalias.patch
 Patch147: linux-2.6-imac-transparent-bridge.patch
-Patch148: linux-2.6-powerpc-zImage-32MiB.patch
-Patch150: linux-2.6-fbdev-teach-offb-about-palette-on-radeon-r500-r600.patch
-Patch151: linux-2.6-powerpc-fix-OF-parsing-of-64-bits-pci-addresses.patch
 
 Patch160: linux-2.6-execshield.patch
 Patch250: linux-2.6-debug-sizeof-structs.patch
@@ -640,15 +623,12 @@
 
 
 # filesystem patches
-Patch420: linux-2.6-fs-cifs-turn-off-unicode-during-session-establishment.patch
 Patch421: linux-2.6-squashfs.patch
-Patch422: linux-2.6-fs-cifs-fix-plaintext-authentication.patch
 
 Patch430: linux-2.6-net-silence-noisy-printks.patch
 
 Patch450: linux-2.6-input-kill-stupid-messages.patch
-Patch451: linux-2.6-input-fix_fn_key_on_macbookpro_4_1_and_mb_air.patch
-Patch452: linux-2.6-hwmon-applesmc-remove-debugging-messages.patch
+Patch452: linux-2.6.27-hwmon-applesmc-2.6.28.patch
 Patch460: linux-2.6-serial-460800.patch
 Patch510: linux-2.6-silence-noise.patch
 Patch570: linux-2.6-selinux-mprotect-checks.patch
@@ -658,49 +638,28 @@
 # libata
 Patch670: linux-2.6-ata-quirk.patch
 Patch672: linux-2.6-sata-eeepc-faster.patch
-Patch673: linux-2.6-libata-pata_marvell-play-nice-with-ahci.patch
-Patch674: linux-2.6-libata-fix-a-large-collection-of-DMA-mode-mismatches.patch
-Patch675: linux-2.6-libata-pata_it821x-driver-updates-and-reworking.patch
 Patch676: linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch
 Patch678: linux-2.6-libata-sata_nv-disable-swncq.patch
 
-Patch680: linux-2.6-wireless.patch
-Patch681: linux-2.6-wireless-pending.patch
-#Patch682: linux-2.6-wireless-fixups.patch
-Patch683: linux-2.6-wireless-stable-backports.patch
-Patch685: linux-2.6-wireless-rt2500pci-restoring-missing-line.patch
-Patch686: linux-2.6-wireless-p54-fix-regression-due-to-delete-NETDEVICES_MULTIQUEUE-option.patch
-Patch687: linux-2.6-wireless-revert-b43-add-RFKILL_STATE_HARD_BLOCKED-support.patch
-
-Patch698: linux-2.6-rt2500usb-fix.patch
+# wireless
 Patch699: linux-2.6-at76.patch
 
 Patch700: linux-2.6-nfs-client-mounts-hang.patch
 
-Patch810: linux-2.6-cpuidle-1-do-not-use-poll_idle-unless-user-asks-for-it.patch
-Patch820: linux-2.6-cpuidle-2-menu-governor-fix-wrong-usage-of-measured_us.patch
-Patch830: linux-2.6-cpuidle-3-make-ladder-governor-honor-latency-requirements.patch
-
 #mm
 
 Patch1101: linux-2.6-default-mmf_dump_elf_headers.patch
 Patch1400: linux-2.6-smarter-relatime.patch
-Patch1515: linux-2.6-lirc.patch
+Patch1515: linux-2.6.27-lirc.patch
 
 # nouveau + drm fixes
 Patch1801: drm-fedora9-rollup.patch
-Patch1802: linux-2.6-drm-i915-fix-ioctl-security.patch
 
 # kludge to make ich9 e1000 work
 Patch2000: linux-2.6-e1000-ich9.patch
-Patch2001: linux-2.6-netdev-e1000e-fix-drv-load-issues-amt.patch
-
-# write protect e1000e nvm
-Patch2002: linux-2.6-e1000e-write-protect-nvm.patch
 
 # atl2 network driver
 Patch2020: linux-2.6-netdev-atl2.patch
-Patch2021: linux-2.6-netdev-atl1e.patch
 
 Patch2030: linux-2.6-net-tulip-interrupt.patch
 
@@ -708,37 +667,24 @@
 
 # linux1394 git patches
 Patch2200: linux-2.6-firewire-git-update.patch
+Patch2201: linux-2.6-firewire-git-pending.patch
 
 # make USB EHCI driver respect "nousb" parameter
 Patch2300: linux-2.6-usb-ehci-hcd-respect-nousb.patch
 
-Patch2501: linux-2.6-ppc-use-libgcc.patch
-
 # get rid of imacfb and make efifb work everywhere it was used
 Patch2600: linux-2.6-merge-efifb-imacfb.patch
 
-Patch2700: linux-2.6-intel-msr-backport.patch
-Patch2701: linux-2.6-libata-sff-kill-spurious-WARN_ON-in-ata_hsm_move.patch
-
-# for kerneloops reports
-Patch2800: linux-2.6-net-print-module-name-as-part-of-the-message.patch
-Patch2801: linux-2.6-warn-add-WARN-macro.patch
-Patch2802: linux-2.6-warn-Turn-the-netdev-timeout-WARN_ON-into-WARN.patch
-Patch2803: linux-2.6-warn-rename-WARN-to-WARNING.patch
-
 # fix RTC
-Patch2900: linux-2.6-rtc-cmos-look-for-pnp-rtc-first.patch
-Patch2910: linux-2.6-x86-register-platform-rtc-if-pnp-doesnt-describe-it.patch
-
-# backported version of http://git.kernel.org/?p=linux/kernel/git/davem/sparc-2.6.git;a=commitdiff;h=73ccefab8a6590bb3d5b44c046010139108ab7ca
-# needed to build sparc64 kernel
-Patch3000: linux-sparc-tracehook-syscall.patch
-
-# fix IOCTL security in sbni driver
-Patch3100: linux-2.6-wan-missing-capability-checks-in-sbni_ioctl.patch
+Patch2800: linux-2.6-rtc-cmos-look-for-pnp-rtc-first.patch
+Patch2810: linux-2.6-x86-register-platform-rtc-if-pnp-doesnt-describe-it.patch
 
+# ext4 fun - new & improved, now with less dev!
+Patch2900: linux-2.6.27-ext4-stable-patch-queue.patch
+Patch2901: linux-2.6.27-fs-disable-fiemap.patch
 # CVE-2008-3528
-Patch3200: linux-2.6.26-ext-dir-corruption-fix.patch
+Patch2902: linux-2.6.27-ext-dir-corruption-fix.patch
+Patch2903: linux-2.6.27-delay-ext4-free-block-cap-check.patch
 
 %endif
 
@@ -1080,32 +1026,19 @@
 fi
 
 # Roland's utrace ptrace replacement.
-ApplyPatch linux-2.6-ptrace-cleanup.patch
-ApplyPatch linux-2.6-tracehook.patch
 ApplyPatch linux-2.6-utrace.patch
-ApplyPatch linux-2.6-kernel-doc-structs-private.patch
+ApplyPatch linux-2.6-x86-tracehook.patch
 ApplyPatch linux-2.6.27-x86-tracehook-syscall-arg-order.patch
 
 # enable sysrq-c on all kernels, not only kexec
 ApplyPatch linux-2.6-sysrq-c.patch
 
-# fix sched clock monotonicity bugs
-ApplyPatch linux-2.6-sched-clock-fix-nohz-interaction.patch
-
 # Architecture patches
 # x86(-64)
 # Compile 686 kernels tuned for Pentium4.
 ApplyPatch linux-2.6-x86-tune-generic.patch
-# dump *PIC state at boot with apic=debug
-ApplyPatch linux-2.6-x86-apic-dump-all-regs-v3.patch
-# hpet fixes from 2.6.27
-ApplyPatch linux-2.6-x86-hpet-04-workaround-sb700-bios.patch
-# fix e820 reservation checking
-ApplyPatch linux-2.6-x86-pci-detect-end_bus_number.patch
 # don't oops if there's no IRQ stack available
 ApplyPatch linux-2.6-x86-check-for-null-irq-context.patch
-# fix boot on some broken HP notebooks (nx6...)
-ApplyPatch linux-2.6-x86-sb450-skip-irq0-override-if-not-routed-to-INT2.patch
 
 #
 # PowerPC
@@ -1127,11 +1060,6 @@
 ApplyPatch linux-2.6-vio-modalias.patch
 # Work around PCIe bridge setup on iSight
 ApplyPatch linux-2.6-imac-transparent-bridge.patch
-# Link zImage at 32MiB (for POWER machines, Efika)
-ApplyPatch linux-2.6-powerpc-zImage-32MiB.patch
-# fixes for quad PPC 970 powerstation (#457467)
-ApplyPatch linux-2.6-fbdev-teach-offb-about-palette-on-radeon-r500-r600.patch
-ApplyPatch linux-2.6-powerpc-fix-OF-parsing-of-64-bits-pci-addresses.patch
 
 #
 # SPARC64
@@ -1151,10 +1079,6 @@
 ApplyPatch linux-2.6-usb-ehci-hcd-respect-nousb.patch
 
 # ACPI
-# fix cpuidle misbehavior
-ApplyPatch linux-2.6-cpuidle-1-do-not-use-poll_idle-unless-user-asks-for-it.patch
-ApplyPatch linux-2.6-cpuidle-2-menu-governor-fix-wrong-usage-of-measured_us.patch
-ApplyPatch linux-2.6-cpuidle-3-make-ladder-governor-honor-latency-requirements.patch
 
 # mm
 
@@ -1195,11 +1119,8 @@
 
 # Filesystem patches.
 # cifs
-ApplyPatch linux-2.6-fs-cifs-turn-off-unicode-during-session-establishment.patch
 # Squashfs
 ApplyPatch linux-2.6-squashfs.patch
-# fix CIFS plaintext passwords
-ApplyPatch linux-2.6-fs-cifs-fix-plaintext-authentication.patch
 
 # Networking
 # Disable easy to trigger printk's.
@@ -1208,10 +1129,8 @@
 # Misc fixes
 # The input layer spews crap no-one cares about.
 ApplyPatch linux-2.6-input-kill-stupid-messages.patch
-# add support for macbook pro 4,1 and macbook air keyboards
-ApplyPatch linux-2.6-input-fix_fn_key_on_macbookpro_4_1_and_mb_air.patch
 # kill annoying applesmc debug messages
-ApplyPatch linux-2.6-hwmon-applesmc-remove-debugging-messages.patch
+ApplyPatch linux-2.6.27-hwmon-applesmc-2.6.28.patch
 
 # Allow to use 480600 baud on 16C950 UARTs
 ApplyPatch linux-2.6-serial-460800.patch
@@ -1231,45 +1150,15 @@
 # ia64 ata quirk
 ApplyPatch linux-2.6-ata-quirk.patch
 # fix it821x
-ApplyPatch linux-2.6-libata-pata_it821x-driver-updates-and-reworking.patch
 ApplyPatch linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch
 # Make Eee disk faster.
 ApplyPatch linux-2.6-sata-eeepc-faster.patch
-# don't use ahci for pata_marvell adapters
-ApplyPatch linux-2.6-libata-pata_marvell-play-nice-with-ahci.patch
-# fix drivers making wrong assumptions about what dma values mean
-ApplyPatch linux-2.6-libata-fix-a-large-collection-of-DMA-mode-mismatches.patch
 # disable swncq on sata_nv
 ApplyPatch linux-2.6-libata-sata_nv-disable-swncq.patch
 
-# wireless patches headed for 2.6.26
-#ApplyPatch linux-2.6-wireless.patch
-# wireless patches headed for 2.6.27
-ApplyPatch linux-2.6-wireless-pending.patch
-
 # Add misc wireless bits from upstream wireless tree
 ApplyPatch linux-2.6-at76.patch
 
-# fixups to make current wireless patches build on this kernel
-#ApplyPatch linux-2.6-wireless-fixups.patch
-
-# backports of upstream -stable wireless patches that we need
-# (reverted in -upstream-reverts)
-C=$(wc -l $RPM_SOURCE_DIR/linux-2.6-wireless-stable-backports.patch | awk '{print $1}')
-if [ "$C" -gt 10 ]; then
-ApplyPatch linux-2.6-wireless-stable-backports.patch
-fi
-
-# fix for long-standing rt2500usb issues
-ApplyPatch linux-2.6-rt2500usb-fix.patch
-
-# bf4634afd8bb72936d2d56425ec792ca1bfa92a2
-ApplyPatch linux-2.6-wireless-rt2500pci-restoring-missing-line.patch
-# e95926d05d028a6bf0ab60b21b484c3d622fdcd1
-ApplyPatch linux-2.6-wireless-revert-b43-add-RFKILL_STATE_HARD_BLOCKED-support.patch
-# aaa1553512b9105699113ea7e2ea726f3d9d4de2
-ApplyPatch linux-2.6-wireless-p54-fix-regression-due-to-delete-NETDEVICES_MULTIQUEUE-option.patch
-
 # implement smarter atime updates support.
 ApplyPatch linux-2.6-smarter-relatime.patch
 
@@ -1280,57 +1169,46 @@
 ApplyPatch linux-2.6-default-mmf_dump_elf_headers.patch
 
 # http://www.lirc.org/
-ApplyPatch linux-2.6-lirc.patch
+ApplyPatch linux-2.6.27-lirc.patch
 
 ApplyPatch linux-2.6-e1000-ich9.patch
-ApplyPatch linux-2.6-netdev-e1000e-fix-drv-load-issues-amt.patch
-ApplyPatch linux-2.6-e1000e-write-protect-nvm.patch
 
 ApplyPatch linux-2.6-netdev-atl2.patch
-ApplyPatch linux-2.6-netdev-atl1e.patch
 
 ApplyPatch linux-2.6-net-tulip-interrupt.patch
 
 ApplyPatch linux-2.6-netdev-e1000e-add-support-for-82567lm-4.patch
 
 # Nouveau DRM + drm fixes
-ApplyPatch drm-fedora9-rollup.patch
-ApplyPatch linux-2.6-drm-i915-fix-ioctl-security.patch
+#ApplyPatch drm-fedora9-rollup.patch
 
 # Filesystem patches
-ApplyPatch linux-2.6.26-ext-dir-corruption-fix.patch
+
+# Pending ext4 patch queue, minus fiemap, includes s/ext4dev/ext4
+ApplyPatch linux-2.6.27-ext4-stable-patch-queue.patch
+# Disable fiemap until it is really truly upstream & released
+ApplyPatch linux-2.6.27-fs-disable-fiemap.patch
+# CVE-2008-3528, ext-fs dir corruption
+ApplyPatch linux-2.6.27-ext-dir-corruption-fix.patch
+# Delay capability() checks 'til last in ext4
+ApplyPatch linux-2.6.27-delay-ext4-free-block-cap-check.patch
+
 
 # linux1394 git patches
 ApplyPatch linux-2.6-firewire-git-update.patch
-#C=$(wc -l $RPM_SOURCE_DIR/linux-2.6-firewire-git-pending.patch | awk '{print $1}')
-#if [ "$C" -gt 10 ]; then
-#ApplyPatch linux-2.6-firewire-git-pending.patch
-#fi
 
-ApplyPatch linux-2.6-ppc-use-libgcc.patch
+C=$(wc -l $RPM_SOURCE_DIR/linux-2.6-firewire-git-pending.patch | awk '{print $1}')
+if [ "$C" -gt 10 ]; then
+ApplyPatch linux-2.6-firewire-git-pending.patch
+fi
 
 # get rid of imacfb and make efifb work everywhere it was used
 ApplyPatch linux-2.6-merge-efifb-imacfb.patch
 
-ApplyPatch linux-2.6-intel-msr-backport.patch
-ApplyPatch linux-2.6-libata-sff-kill-spurious-WARN_ON-in-ata_hsm_move.patch
-
-# for kerneloops reports
-ApplyPatch linux-2.6-net-print-module-name-as-part-of-the-message.patch
-ApplyPatch linux-2.6-warn-add-WARN-macro.patch
-ApplyPatch linux-2.6-warn-Turn-the-netdev-timeout-WARN_ON-into-WARN.patch
-ApplyPatch linux-2.6-warn-rename-WARN-to-WARNING.patch
-
 # fix RTC
 ApplyPatch linux-2.6-rtc-cmos-look-for-pnp-rtc-first.patch
 ApplyPatch linux-2.6-x86-register-platform-rtc-if-pnp-doesnt-describe-it.patch
 
-# backport syscall tracing to use the new tracehook.h entry points.
-ApplyPatch linux-sparc-tracehook-syscall.patch
-
-# CVE-2008-3525
-ApplyPatch linux-2.6-wan-missing-capability-checks-in-sbni_ioctl.patch
-
 # END OF PATCH APPLICATIONS
 
 %endif
@@ -1924,6 +1802,9 @@
 %kernel_variant_files -a /%{image_install_path}/xen*-%{KVERREL}.xen -e /etc/ld.so.conf.d/kernelcap-%{KVERREL}.xen.conf %{with_xen} xen
 
 %changelog
+* Thu Oct 30 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.27.4-1
+- Linux 2.6.27.4
+
 * Wed Oct 22 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.26.7-86
 - Support building from CVS branches.
 

linux-2.6-build-nonintconfig.patch:

Index: linux-2.6-build-nonintconfig.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/linux-2.6-build-nonintconfig.patch,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- linux-2.6-build-nonintconfig.patch	12 Feb 2008 06:18:04 -0000	1.13
+++ linux-2.6-build-nonintconfig.patch	30 Oct 2008 04:41:11 -0000	1.14
@@ -18,7 +18,7 @@
 index fda6313..ed33b66 100644
 --- a/scripts/kconfig/conf.c
 +++ b/scripts/kconfig/conf.c
-@@ -22,6 +22,8 @@ enum {
+@@ -22,6 +22,8 @@
  	ask_all,
  	ask_new,
  	ask_silent,
@@ -27,7 +27,7 @@
  	set_default,
  	set_yes,
  	set_mod,
-@@ -38,6 +40,8 @@ static struct menu *rootEntry;
+@@ -39,6 +41,8 @@
  
  static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n");
  
@@ -36,55 +36,52 @@
  static const char *get_help(struct menu *menu)
  {
  	if (menu_has_help(menu))
-@@ -112,6 +116,16 @@ static int conf_askvalue(struct symbol *sym, const char *def)
- 		fflush(stdout);
- 		fgets(line, 128, stdin);
- 		return 1;
-+	case dont_ask:
-+		if (!sym_has_value(sym)) {
-+			fprintf(stderr,"CONFIG_%s\n",sym->name);
-+			return_value++;
-+		}
-+		/*FALLTHROUGH*/
-+	case dont_ask_dont_tell:
-+		if (sym_has_value(sym))
-+			return 0;
-+		return 1;
- 	case set_default:
- 		printf("%s\n", def);
- 		return 1;
-@@ -351,6 +365,11 @@ static int conf_choice(struct menu *menu)
- 			printf("?");
- 		printf("]: ");
- 		switch (input_mode) {
-+		case dont_ask:
-+		case dont_ask_dont_tell:
-+			cnt = def;
-+			printf("%d\n", cnt);
-+			break;
- 		case ask_new:
- 		case ask_silent:
- 			if (!is_new) {
-@@ -486,6 +505,10 @@ static void check_conf(struct menu *menu)
+@@ -359,7 +363,10 @@
+ 
+ 		switch (prop->type) {
+ 		case P_MENU:
+-			if (input_mode == ask_silent && rootEntry != menu) {
++			if ((input_mode == ask_silent ||
++			     input_mode == dont_ask ||
++			     input_mode == dont_ask_dont_tell) &&
++			    rootEntry != menu) {
+ 				check_conf(menu);
+ 				return;
+ 			}
+@@ -417,12 +424,21 @@
+ 	if (sym && !sym_has_value(sym)) {
+ 		if (sym_is_changable(sym) ||
+ 		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
++			if (input_mode == dont_ask ||
++			    input_mode == dont_ask_dont_tell) {
++				if (input_mode == dont_ask &&
++				    sym->name && !sym_is_choice_value(sym)) {
++					fprintf(stderr,"CONFIG_%s\n",sym->name);
++					++return_value;
++				}
++			} else {
  			if (!conf_cnt++)
  				printf(_("*\n* Restart config...\n*\n"));
  			rootEntry = menu_get_parent_menu(menu);
-+			if (input_mode == dont_ask
-+			    || input_mode == dont_ask_dont_tell)
-+				fprintf(stderr,"CONFIG_%s\n",sym->name);
-+			else
  			conf(rootEntry);
  		}
  	}
-@@ -504,11 +527,17 @@ int main(int ac, char **av)
++	}
+ 
+ 	for (child = menu->list; child; child = child->next)
+ 		check_conf(child);
+@@ -438,7 +454,7 @@
  	bindtextdomain(PACKAGE, LOCALEDIR);
  	textdomain(PACKAGE);
  
 -	while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) {
-+	while ((opt = getopt(ac, av, "osbBdD:nmyrh")) != -1) {
++ 	while ((opt = getopt(ac, av, "osbBdD:nmyrh")) != -1) {
  		switch (opt) {
  		case 'o':
- 			input_mode = ask_new;
+ 			input_mode = ask_silent;
+@@ -447,6 +463,12 @@
+ 			input_mode = ask_silent;
+ 			sync_kconfig = 1;
  			break;
 +		case 'b':
 +			input_mode = dont_ask;
@@ -92,11 +89,11 @@
 +		case 'B':
 +			input_mode = dont_ask_dont_tell;
 +			break;
- 		case 's':
- 			input_mode = ask_silent;
- 			valid_stdin = isatty(0) && isatty(1) && isatty(2);
-@@ -573,6 +602,8 @@ int main(int ac, char **av)
- 		}
+ 		case 'd':
+ 			input_mode = set_default;
+ 			break;
+@@ -510,6 +532,8 @@
+ 	case ask_silent:
  	case ask_all:
  	case ask_new:
 +	case dont_ask:
@@ -104,20 +101,28 @@
  		conf_read(NULL);
  		break;
  	case set_no:
-@@ -619,7 +650,8 @@ int main(int ac, char **av)
- 	do {
- 		conf_cnt = 0;
- 		check_conf(&rootmenu);
--	} while (conf_cnt);
-+ 	} while (conf_cnt && (input_mode != dont_ask
-+			      && input_mode != dont_ask_dont_tell));
- 	if (conf_write(NULL)) {
- 		fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
- 		return 1;
-@@ -630,5 +662,5 @@ skip_check:
- 		return 1;
+@@ -571,12 +595,16 @@
+ 		conf(&rootmenu);
+ 		input_mode = ask_silent;
+ 		/* fall through */
++	case dont_ask:
++	case dont_ask_dont_tell:
+ 	case ask_silent:
+ 		/* Update until a loop caused no more changes */
+ 		do {
+ 			conf_cnt = 0;
+ 			check_conf(&rootmenu);
+-		} while (conf_cnt);
++		} while (conf_cnt &&
++			 (input_mode != dont_ask &&
++			  input_mode != dont_ask_dont_tell));
+ 		break;
  	}
  
+@@ -598,5 +626,5 @@
+ 			exit(1);
+ 		}
+ 	}
 -	return 0;
 +	return return_value;
  }

linux-2.6-debug-nmi-timeout.patch:

Index: linux-2.6-debug-nmi-timeout.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/linux-2.6-debug-nmi-timeout.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-debug-nmi-timeout.patch	15 Oct 2007 18:36:20 -0000	1.3
+++ linux-2.6-debug-nmi-timeout.patch	30 Oct 2008 04:41:11 -0000	1.4
@@ -1,25 +1,14 @@
---- linux-2.6.20.noarch/arch/x86/kernel/nmi_32.c~	2007-04-13 15:52:37.000000000 -0400
-+++ linux-2.6.20.noarch/arch/x86/kernel/nmi_32.c	2007-04-13 15:53:06.000000000 -0400
-@@ -1044,7 +1044,7 @@ __kprobes int nmi_watchdog_tick(struct p
+--- linux-2.6.26.noarch/arch/x86/kernel/nmi.c~	2008-07-14 20:31:14.000000000 -0400
++++ linux-2.6.26.noarch/arch/x86/kernel/nmi.c	2008-07-14 20:31:38.000000000 -0400
+@@ -416,7 +416,7 @@ nmi_watchdog_tick(struct pt_regs *regs, 
  		 * wait a few IRQs (5 seconds) before doing the oops ...
  		 */
- 		alert_counter[cpu]++;
--		if (alert_counter[cpu] == 5*nmi_hz)
-+		if (alert_counter[cpu] == CONFIG_DEBUG_NMI_TIMEOUT*nmi_hz)
+ 		local_inc(&__get_cpu_var(alert_counter));
+-		if (local_read(&__get_cpu_var(alert_counter)) == 5 * nmi_hz)
++		if (local_read(&__get_cpu_var(alert_counter)) == CONFIG_DEBUG_NMI_TIMEOUT * nmi_hz)
  			/*
  			 * die_nmi will return ONLY if NOTIFY_STOP happens..
  			 */
---- linux-2.6.20.noarch/arch/x86/kernel/nmi_64.c~	2007-04-13 15:53:09.000000000 -0400
-+++ linux-2.6.20.noarch/arch/x86/kernel/nmi_64.c	2007-04-13 15:53:29.000000000 -0400
-@@ -923,7 +923,7 @@ int __kprobes nmi_watchdog_tick(struct p
- 		 * wait a few IRQs (5 seconds) before doing the oops ...
- 		 */
- 		local_inc(&__get_cpu_var(alert_counter));
--		if (local_read(&__get_cpu_var(alert_counter)) == 5*nmi_hz)
-+		if (local_read(&__get_cpu_var(alert_counter)) == CONFIG_DEBUG_NMI_TIMEOUT*nmi_hz)
- 			die_nmi("NMI Watchdog detected LOCKUP on CPU %d\n", regs,
- 				panic_on_timeout);
- 	} else {
 --- linux-2.6.21.noarch/lib/Kconfig.debug~	2007-07-06 17:05:46.000000000 -0400
 +++ linux-2.6.21.noarch/lib/Kconfig.debug	2007-07-06 17:06:07.000000000 -0400
 @@ -126,6 +126,14 @@ config SCHEDSTATS

linux-2.6-execshield.patch:

Index: linux-2.6-execshield.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/linux-2.6-execshield.patch,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -r1.89 -r1.90
--- linux-2.6-execshield.patch	5 Aug 2008 03:10:58 -0000	1.89
+++ linux-2.6-execshield.patch	30 Oct 2008 04:41:11 -0000	1.90
@@ -99,11 +99,11 @@
  
  	if (!cpu_isset(cpu, flush_cpumask))
  		goto out;
---- linux-2.6.25.noarch/arch/x86/kernel/traps_32.c~	2008-05-16 13:43:36.000000000 -0400
-+++ linux-2.6.25.noarch/arch/x86/kernel/traps_32.c	2008-05-16 13:48:08.000000000 -0400
-@@ -602,13 +602,97 @@ 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)
+--- linux-2.6.26.noarch/arch/x86/kernel/traps_32.c~	2008-07-14 20:20:15.000000000 -0400
++++ linux-2.6.26.noarch/arch/x86/kernel/traps_32.c	2008-07-14 20:26:18.000000000 -0400
+@@ -596,7 +596,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, 0)
 -DO_ERROR_INFO(32, SIGILL, "iret exception", iret_error, ILL_BADSTK, 0, 1)
 +
@@ -143,7 +143,8 @@
 +	desc1 = &current->mm->context.user_cs;
 +	desc2 = get_cpu_gdt_table(cpu) + GDT_ENTRY_DEFAULT_USER_CS;
 +
-+	if (desc1->a != desc2->a || desc1->b != desc2->b) {
++	if ((desc1->a & 0xff0000ff) != (desc2->a & 0xff0000ff) ||
++	    desc1->b != desc2->b) {
 +		/*
 +		 * The CS was not in sync - reload it and retry the
 +		 * instruction. If the instruction still faults then
@@ -191,8 +192,9 @@
 +	}
 +}
  
- void __kprobes do_general_protection(struct pt_regs *regs, long error_code)
- {
+ void __kprobes
+ do_general_protection(struct pt_regs *regs, long error_code)
+@@ -605,6 +688,7 @@ do_general_protection(struct pt_regs *re
  	struct thread_struct *thread;
  	struct tss_struct *tss;
  	int cpu;
@@ -200,15 +202,7 @@
  
  	cpu = get_cpu();
  	tss = &per_cpu(init_tss, cpu);
-@@ -641,7 +725,6 @@ void __kprobes do_general_protection(str
- 
- 		return;
- 	}
--	put_cpu();
- 
- 	if (regs->flags & X86_VM_MASK)
- 		goto gp_in_vm86;
-@@ -634,6 +718,22 @@ void __kprobes do_general_protection(struct pt_regs * regs,
+@@ -645,6 +729,23 @@ do_general_protection(struct pt_regs *re
  	if (!user_mode(regs))
  		goto gp_in_kernel;
  
@@ -228,10 +222,11 @@
 +			current->mm->context.user_cs.b);
 +	}
 +
- 	current->thread.error_code = error_code;
- 	current->thread.trap_no = 13;
- 	if (show_unhandled_signals && unhandled_signal(current, SIGSEGV) &&
-@@ -650,11 +750,13 @@ void __kprobes do_general_protection(struct pt_regs * regs,
++
+ 	tsk->thread.error_code = error_code;
+ 	tsk->thread.trap_no = 13;
+ 
+@@ -662,11 +763,13 @@ do_general_protection(struct pt_regs *re
  	return;
  
  gp_in_vm86:
@@ -242,9 +237,9 @@
  
  gp_in_kernel:
 +	put_cpu();
- 	if (!fixup_exception(regs)) {
- 		current->thread.error_code = error_code;
- 		current->thread.trap_no = 13;
+ 	if (fixup_exception(regs))
+ 		return;
+ 
 diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
 index 8106bba..23932be 100644
 --- a/arch/x86/mm/init_32.c
@@ -279,7 +274,7 @@
  
  	return 0;
  }
-@@ -527,6 +525,11 @@ void __init paging_init(void)
+@@ -782,6 +782,10 @@ unsigned long __init_refok init_memory_m
  	if (nx_enabled)
  		printk(KERN_INFO "NX (Execute Disable) protection: active\n");
 +	else
@@ -287,10 +282,9 @@
 +	if (exec_shield)
 +		printk(KERN_INFO "Using x86 segment limits to approximate "
 +			"NX protection\n");
-+
- 	pagetable_init();
  
- 	load_cr3(swapper_pg_dir);
+ 	/* Enable PSE if available */
+ 	if (cpu_has_pse)
 diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
 index 56fe712..ec932ae 100644
 --- a/arch/x86/mm/mmap.c
@@ -403,98 +397,11 @@
  	if (!whole) {
  		min_flt = task->min_flt;
  		maj_flt = task->maj_flt;
-diff --git a/include/asm-ia64/pgalloc.h b/include/asm-ia64/pgalloc.h
-index b9ac1a6..24f183a 100644
---- a/include/asm-ia64/pgalloc.h
-+++ b/include/asm-ia64/pgalloc.h
-@@ -1,6 +1,10 @@
- #ifndef _ASM_IA64_PGALLOC_H
- #define _ASM_IA64_PGALLOC_H
- 
-+#define arch_add_exec_range(mm, limit)		do { ; } while (0)
-+#define arch_flush_exec_range(mm)		do { ; } while (0)
-+#define arch_remove_exec_range(mm, limit)	do { ; } while (0)
-+
- /*
-  * This file contains the functions and defines necessary to allocate
-  * page tables.
-diff --git a/include/asm-powerpc/pgalloc.h b/include/asm-powerpc/pgalloc.h
-index b4505ed..25068ae 100644
---- a/include/asm-powerpc/pgalloc.h
-+++ b/include/asm-powerpc/pgalloc.h
-@@ -2,6 +2,11 @@
- #define _ASM_POWERPC_PGALLOC_H
- #ifdef __KERNEL__
- 
-+/* Dummy functions since we don't support execshield on ppc */
-+#define arch_add_exec_range(mm, limit) do { ; } while (0)
-+#define arch_flush_exec_range(mm)      do { ; } while (0)
-+#define arch_remove_exec_range(mm, limit) do { ; } while (0)
-+
- #ifdef CONFIG_PPC64
- #include <asm/pgalloc-64.h>
- #else
-diff --git a/include/asm-ppc/pgalloc.h b/include/asm-ppc/pgalloc.h
-index fd4d1d7..de55ad5 100644
---- a/include/asm-ppc/pgalloc.h
-+++ b/include/asm-ppc/pgalloc.h
-@@ -41,5 +41,10 @@ extern void pte_free(struct mm_struct *mm, pgtable_t pte);
- 
- #define check_pgt_cache()	do { } while (0)
- 
-+#define arch_add_exec_range(mm, limit)         do { ; } while (0)
-+#define arch_flush_exec_range(mm)              do { ; } while (0)
-+#define arch_remove_exec_range(mm, limit)      do { ; } while (0)
-+
-+
- #endif /* _PPC_PGALLOC_H */
- #endif /* __KERNEL__ */
-diff --git a/include/asm-s390/pgalloc.h b/include/asm-s390/pgalloc.h
-index f5b2bf3..a43f0ec 100644
---- a/include/asm-s390/pgalloc.h
-+++ b/include/asm-s390/pgalloc.h
-@@ -17,6 +17,10 @@
- #include <linux/gfp.h>
- #include <linux/mm.h>
- 
-+#define arch_add_exec_range(mm, limit) do { ; } while (0)
-+#define arch_flush_exec_range(mm)      do { ; } while (0)
-+#define arch_remove_exec_range(mm, limit) do { ; } while (0)
-+
- #define check_pgt_cache()	do {} while (0)
- 
- unsigned long *crst_table_alloc(struct mm_struct *, int);
-diff --git a/include/asm-sparc/pgalloc.h b/include/asm-sparc/pgalloc.h
-index 6292cd0..2632807 100644
---- a/include/asm-sparc/pgalloc.h
-+++ b/include/asm-sparc/pgalloc.h
-@@ -66,4 +66,8 @@ BTFIXUPDEF_CALL(void, pte_free, pgtable_t )
- #define pte_free(mm, pte)	BTFIXUP_CALL(pte_free)(pte)
- #define __pte_free_tlb(tlb, pte)	pte_free((tlb)->mm, pte)
- 
-+#define arch_add_exec_range(mm, limit)		do { ; } while (0)
-+#define arch_flush_exec_range(mm)		do { ; } while (0)
-+#define arch_remove_exec_range(mm, limit)	do { ; } while (0)
-+
- #endif /* _SPARC_PGALLOC_H */
-diff --git a/include/asm-sparc64/pgalloc.h b/include/asm-sparc64/pgalloc.h
-index 3ee2d40..c998da2 100644
---- a/include/asm-sparc64/pgalloc.h
-+++ b/include/asm-sparc64/pgalloc.h
-@@ -79,4 +79,8 @@ static inline void check_pgt_cache(void)
- 	quicklist_trim(0, NULL, 25, 16);
- }
- 
-+#define arch_add_exec_range(mm, limit)		do { ; } while (0)
-+#define arch_flush_exec_range(mm)		do { ; } while (0)
-+#define arch_remove_exec_range(mm, limit)	do { ; } while (0)
-+
- #endif /* _SPARC64_PGALLOC_H */
 diff --git a/include/asm-x86/desc.h b/include/asm-x86/desc.h
 index 5b6a05d..7ad80b9 100644
 --- a/include/asm-x86/desc.h
 +++ b/include/asm-x86/desc.h
-@@ -353,6 +353,26 @@ static inline void set_system_gate_ist(int n, void *addr, unsigned ist)
+@@ -353,6 +353,22 @@ static inline void set_system_gate_ist(int n, void *addr, unsigned ist)
  	_set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, __KERNEL_CS);
  }
  
@@ -512,10 +419,6 @@
 +extern void arch_add_exec_range(struct mm_struct *mm, unsigned long limit);
 +extern void arch_remove_exec_range(struct mm_struct *mm, unsigned long limit);
 +extern void arch_flush_exec_range(struct mm_struct *mm);
-+#else
-+#define arch_add_exec_range(mm, limit)		do { ; } while (0)
-+#define arch_flush_exec_range(mm)		do { ; } while (0)
-+#define arch_remove_exec_range(mm, limit)	do { ; } while (0)
 +#endif /* CONFIG_X86_32 */
 +
  #else
@@ -649,10 +552,11 @@
 index d41ef6b..5304704 100644
 --- a/kernel/sysctl.c
 +++ b/kernel/sysctl.c
-@@ -83,6 +83,27 @@ extern int sysctl_stat_interval;
+@@ -83,6 +83,26 @@ extern int maps_protect;
+ extern int sysctl_stat_interval;
  extern int latencytop_enabled;
  extern int sysctl_nr_open_min, sysctl_nr_open_max;
- 
++
 +int exec_shield = (1<<0);
 +/* exec_shield is a bitmask:
 + * 0: off; vdso at STACK_TOP, 1 page below TASK_SIZE
@@ -670,13 +574,11 @@
 +
 +	return 1;
 +}
-+
 +__setup("exec-shield=", setup_exec_shield);
 +
-+
- /* Constants used for minimum and  maximum */
- #if defined(CONFIG_DETECT_SOFTLOCKUP) || defined(CONFIG_HIGHMEM)
- static int one = 1;
+ #ifdef CONFIG_RCU_TORTURE_TEST
+ extern int rcutorture_runnable;
+ #endif /* #ifdef CONFIG_RCU_TORTURE_TEST */
 @@ -383,6 +403,14 @@ static struct ctl_table kern_table[] = {
  		.proc_handler	= &proc_dointvec,
  	},
@@ -696,14 +598,33 @@
 index a32d28c..7634038 100644
 --- a/mm/mmap.c
 +++ b/mm/mmap.c
-@@ -26,6 +26,7 @@
- #include <linux/mount.h>
+@@ -27,6 +27,7 @@
  #include <linux/mempolicy.h>
  #include <linux/rmap.h>
+ #include <linux/mmu_notifier.h>
 +#include <linux/random.h>
  
  #include <asm/uaccess.h>
  #include <asm/cacheflush.h>
+@@ -41,6 +41,18 @@
+ #define arch_rebalance_pgtables(addr, len)		(addr)
+ #endif
+ 
++/* No sane architecture will #define these to anything else */
++#ifndef arch_add_exec_range
++#define arch_add_exec_range(mm, limit)	do { ; } while (0)
++#endif
++#ifndef arch_flush_exec_range
++#define arch_flush_exec_range(mm)	do { ; } while (0)
++#endif
++#ifndef arch_remove_exec_range
++#define arch_remove_exec_range(mm, limit)	do { ; } while (0)
++#endif
++
++
+ static void unmap_region(struct mm_struct *mm,
+ 		struct vm_area_struct *vma, struct vm_area_struct *prev,
+ 		unsigned long start, unsigned long end);
 @@ -377,6 +378,8 @@ static inline void
  __vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma,
  		struct vm_area_struct *prev, struct rb_node *rb_parent)
@@ -768,7 +689,7 @@
  }
 +EXPORT_SYMBOL(get_unmapped_area_prot);
 +
-+#define SHLIB_BASE             0x00110000
++#define SHLIB_BASE	0x00110000
 +
 +unsigned long arch_get_unmapped_exec_area(struct file *filp, unsigned long addr0,
 +		unsigned long len0, unsigned long pgoff, unsigned long flags)
@@ -879,9 +800,9 @@
  		vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
  
  	return 0;
-@@ -2048,6 +2139,7 @@ void exit_mmap(struct mm_struct *mm)
+@@ -2173,6 +2173,7 @@ void exit_mmap(struct mm_struct *mm)
  	vm_unacct_memory(nr_accounted);
- 	free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0);
+ 	free_pgtables(tlb, vma, FIRST_USER_ADDRESS, 0);
  	tlb_finish_mmu(tlb, 0, end);
 +	arch_flush_exec_range(mm);
  
@@ -891,7 +812,7 @@
 index 4de5468..6d822ad 100644
 --- a/mm/mprotect.c
 +++ b/mm/mprotect.c
-@@ -23,8 +23,12 @@
+@@ -23,8 +23,15 @@
  #include <linux/swapops.h>
  #include <asm/uaccess.h>
  #include <asm/pgtable.h>
@@ -901,6 +822,9 @@
 +#ifdef CONFIG_X86
 +#include <asm/desc.h>
 +#endif
++#ifndef arch_remove_exec_range
++#define arch_remove_exec_range(mm, limit)      do { ; } while (0)
++#endif
  
  #ifndef pgprot_modify
  static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
@@ -913,16 +837,16 @@
  	pgoff_t pgoff;
  	int error;
  	int dirty_accountable = 0;
-@@ -198,6 +202,9 @@ success:
+@@ -211,6 +211,9 @@ success:
  		dirty_accountable = 1;
  	}
  
 +	if (oldflags & VM_EXEC)
 +		arch_remove_exec_range(current->mm, old_end);
 +
+ 	mmu_notifier_invalidate_range_start(mm, start, end);
  	if (is_vm_hugetlb_page(vma))
  		hugetlb_change_protection(vma, start, end, vma->vm_page_prot);
- 	else
 diff --git a/mm/mremap.c b/mm/mremap.c
 index 08e3c7f..101f885 100644
 --- a/mm/mremap.c

linux-2.6-firewire-git-update.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.15 -r 1.16 linux-2.6-firewire-git-update.patch
Index: linux-2.6-firewire-git-update.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/linux-2.6-firewire-git-update.patch,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- linux-2.6-firewire-git-update.patch	5 Aug 2008 15:06:18 -0000	1.15
+++ linux-2.6-firewire-git-update.patch	30 Oct 2008 04:41:11 -0000	1.16
@@ -1,71 +1,35 @@
- drivers/firewire/Kconfig          |    9 ++-
- drivers/firewire/fw-card.c        |   92 ++++++++++--------------
- drivers/firewire/fw-cdev.c        |   29 +++++---
- drivers/firewire/fw-device.c      |   42 ++---------
- drivers/firewire/fw-device.h      |    1 -
- drivers/firewire/fw-ohci.c        |  111 +++++++++++++++--------------
- drivers/firewire/fw-sbp2.c        |   71 +++++++++----------
- drivers/firewire/fw-topology.c    |   24 ++++++-
- drivers/firewire/fw-transaction.c |  141 +++++++++++++++++++++++--------------
- drivers/firewire/fw-transaction.h |   52 +++++++++++---
- drivers/ieee1394/csr1212.c        |   34 ++++++---
- drivers/ieee1394/dma.c            |    2 +-
- drivers/ieee1394/eth1394.c        |    2 +-
- drivers/ieee1394/highlevel.c      |    4 +-
- drivers/ieee1394/highlevel.h      |   13 +++-
- drivers/ieee1394/raw1394.c        |   20 ++++--
- drivers/ieee1394/sbp2.c           |   22 +++++-
- drivers/ieee1394/sbp2.h           |    1 +
- drivers/ieee1394/video1394.c      |    2 +
- drivers/scsi/sd.c                 |    5 ++
- include/linux/pci_ids.h           |    1 +
- include/scsi/scsi_device.h        |    1 +
- 22 files changed, 401 insertions(+), 278 deletions(-)
+Git diff in linux1394-2.6-git at commit 3346610742cdef8b1670d090008aca0911e95880
+vs. tag v2.6.27, on 2008-10-29.
+
+---
+
+ drivers/firewire/fw-card.c         |   58 ++------
+ drivers/firewire/fw-cdev.c         |   42 +++---
+ drivers/firewire/fw-device.c       |   40 ++----
+ drivers/firewire/fw-device.h       |    4 +
+ drivers/firewire/fw-ohci.c         |  123 ++++++++++------
+ drivers/firewire/fw-sbp2.c         |  154 +++++++++-----------
+ drivers/firewire/fw-topology.c     |   18 ++-
+ drivers/firewire/fw-transaction.c  |   48 ++++++-
+ drivers/firewire/fw-transaction.h  |   20 ++-
+ drivers/ieee1394/csr1212.c         |    2 +-
+ drivers/ieee1394/dv1394.c          |    2 +-
+ drivers/ieee1394/eth1394.c         |    2 +-
+ drivers/ieee1394/nodemgr.c         |  279 ++++++++++++++----------------------
+ drivers/ieee1394/nodemgr.h         |    2 +-
+ drivers/ieee1394/raw1394-private.h |    1 +
+ drivers/ieee1394/raw1394.c         |  230 ++++++++++++++++-------------
+ drivers/ieee1394/sbp2.c            |  218 ++++++++++++----------------
+ drivers/ieee1394/sbp2.h            |   33 ++---
+ drivers/ieee1394/video1394.c       |    8 +-
+ include/linux/firewire-cdev.h      |    9 +-
+ 20 files changed, 622 insertions(+), 671 deletions(-)
 
-diff --git a/drivers/firewire/Kconfig b/drivers/firewire/Kconfig
-index 76f2671..fa6d6ab 100644
---- a/drivers/firewire/Kconfig
-+++ b/drivers/firewire/Kconfig
-@@ -16,8 +16,13 @@ config FIREWIRE
- 	  enable the new stack.
- 
- 	  To compile this driver as a module, say M here: the module will be
--	  called firewire-core.  It functionally replaces ieee1394, raw1394,
--	  and video1394.
-+	  called firewire-core.
-+
-+	  This module functionally replaces ieee1394, raw1394, and video1394.
-+	  To access it from application programs, you generally need at least
-+	  libraw1394 version 2.  IIDC/DCAM applications also need libdc1394
-+	  version 2.  No libraries are required to access storage devices
-+	  through the firewire-sbp2 driver.
- 
- config FIREWIRE_OHCI
- 	tristate "OHCI-1394 controllers"
 diff --git a/drivers/firewire/fw-card.c b/drivers/firewire/fw-card.c
-index 5b4c0d9..94cf070 100644
+index bbd73a4..94cf070 100644
 --- a/drivers/firewire/fw-card.c
 +++ b/drivers/firewire/fw-card.c
-@@ -16,12 +16,15 @@
-  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-  */
- 
--#include <linux/module.h>
--#include <linux/errno.h>
-+#include <linux/completion.h>
-+#include <linux/crc-itu-t.h>
- #include <linux/delay.h>
- #include <linux/device.h>
-+#include <linux/errno.h>
-+#include <linux/kref.h>
-+#include <linux/module.h>
- #include <linux/mutex.h>
--#include <linux/crc-itu-t.h>
-+
- #include "fw-transaction.h"
- #include "fw-topology.h"
- #include "fw-device.h"
-@@ -186,39 +189,16 @@ static const char gap_count_table[] = {
+@@ -189,39 +189,16 @@ static const char gap_count_table[] = {
  	63, 5, 7, 8, 10, 13, 16, 18, 21, 24, 26, 29, 32, 35, 37, 40
  };
  
@@ -107,7 +71,7 @@
  
  	spin_lock_irqsave(&card->lock, flags);
  	local_node = card->local_node;
-@@ -238,7 +218,7 @@ fw_card_bm_work(struct work_struct *work)
+@@ -241,7 +218,7 @@ fw_card_bm_work(struct work_struct *work)
  	root_id = root_node->node_id;
  	grace = time_after(jiffies, card->reset_jiffies + DIV_ROUND_UP(HZ, 10));
  
@@ -116,7 +80,7 @@
  	    (card->bm_generation != generation && grace)) {
  		/*
  		 * This first step is to figure out who is IRM and
-@@ -260,33 +240,28 @@ fw_card_bm_work(struct work_struct *work)
+@@ -263,33 +240,28 @@ fw_card_bm_work(struct work_struct *work)
  			goto pick_me;
  		}
  
@@ -162,129 +126,182 @@
  			/*
  			 * The lock request failed, maybe the IRM
  			 * isn't really IRM capable after all. Let's
-@@ -396,14 +371,16 @@ fw_card_initialize(struct fw_card *card, const struct fw_card_driver *driver,
+diff --git a/drivers/firewire/fw-cdev.c b/drivers/firewire/fw-cdev.c
+index 2e6d584..75bbd66 100644
+--- a/drivers/firewire/fw-cdev.c
++++ b/drivers/firewire/fw-cdev.c
+@@ -24,9 +24,11 @@
+ #include <linux/errno.h>
+ #include <linux/device.h>
+ #include <linux/vmalloc.h>
++#include <linux/mutex.h>
+ #include <linux/poll.h>
+ #include <linux/preempt.h>
+ #include <linux/time.h>
++#include <linux/spinlock.h>
+ #include <linux/delay.h>
+ #include <linux/mm.h>
+ #include <linux/idr.h>
+@@ -107,7 +109,6 @@ static int fw_device_op_open(struct inode *inode, struct file *file)
  {
- 	static atomic_t index = ATOMIC_INIT(-1);
+ 	struct fw_device *device;
+ 	struct client *client;
+-	unsigned long flags;
+ 
+ 	device = fw_device_get_by_devt(inode->i_rdev);
+ 	if (device == NULL)
+@@ -132,9 +133,9 @@ static int fw_device_op_open(struct inode *inode, struct file *file)
+ 
+ 	file->private_data = client;
+ 
+-	spin_lock_irqsave(&device->card->lock, flags);
++	mutex_lock(&device->client_list_mutex);
+ 	list_add_tail(&client->link, &device->client_list);
+-	spin_unlock_irqrestore(&device->card->lock, flags);
++	mutex_unlock(&device->client_list_mutex);
  
--	atomic_set(&card->device_count, 0);
- 	card->index = atomic_inc_return(&index);
- 	card->driver = driver;
- 	card->device = device;
- 	card->current_tlabel = 0;
- 	card->tlabel_mask = 0;
- 	card->color = 0;
-+	card->broadcast_channel = BROADCAST_CHANNEL_INITIAL;
- 
-+	kref_init(&card->kref);
-+	init_completion(&card->done);
- 	INIT_LIST_HEAD(&card->transaction_list);
- 	spin_lock_init(&card->lock);
- 	setup_timer(&card->flush_timer,
-@@ -496,7 +473,6 @@ dummy_enable_phys_dma(struct fw_card *card,
- }
- 
- static struct fw_card_driver dummy_driver = {
--	.name            = "dummy",
- 	.enable          = dummy_enable,
- 	.update_phy_reg  = dummy_update_phy_reg,
- 	.set_config_rom  = dummy_set_config_rom,
-@@ -507,6 +483,14 @@ static struct fw_card_driver dummy_driver = {
- };
+ 	return 0;
+ }
+@@ -205,12 +206,14 @@ fw_device_op_read(struct file *file,
+ 	return dequeue_event(client, buffer, count);
+ }
  
- void
-+fw_card_release(struct kref *kref)
-+{
-+	struct fw_card *card = container_of(kref, struct fw_card, kref);
[...2857 lines suppressed...]
+-					sizeof(cmd->scatter_gather_element),
+-					DMA_TO_DEVICE);
+ 			sbp2util_mark_command_completed(lu, cmd);
+ 			if (cmd->Current_SCpnt) {
+ 				cmd->Current_SCpnt->result = DID_ABORT << 16;
 diff --git a/drivers/ieee1394/sbp2.h b/drivers/ieee1394/sbp2.h
-index 80d8e09..875428b 100644
+index 875428b..c5036f1 100644
 --- a/drivers/ieee1394/sbp2.h
 +++ b/drivers/ieee1394/sbp2.h
-@@ -345,6 +345,7 @@ enum sbp2lu_state_types {
- #define SBP2_WORKAROUND_FIX_CAPACITY	0x8
- #define SBP2_WORKAROUND_DELAY_INQUIRY	0x10
- #define SBP2_INQUIRY_DELAY		12
-+#define SBP2_WORKAROUND_POWER_CONDITION	0x20
- #define SBP2_WORKAROUND_OVERRIDE	0x100
+@@ -139,13 +139,10 @@ struct sbp2_logout_orb {
+ 	u32 status_fifo_lo;
+ } __attribute__((packed));
+ 
+-#define PAGE_TABLE_SET_SEGMENT_BASE_HI(v)	((v) & 0xffff)
+-#define PAGE_TABLE_SET_SEGMENT_LENGTH(v)	(((v) & 0xffff) << 16)
+-
+ struct sbp2_unrestricted_page_table {
+-	u32 length_segment_base_hi;
+-	u32 segment_base_lo;
+-} __attribute__((packed));
++	__be32 high;
++	__be32 low;
++};
  
- #endif /* SBP2_H */
+ #define RESP_STATUS_REQUEST_COMPLETE		0x0
+ #define RESP_STATUS_TRANSPORT_FAILURE		0x1
+@@ -216,15 +213,18 @@ struct sbp2_status_block {
+ #define SBP2_UNIT_SPEC_ID_ENTRY			0x0000609e
+ #define SBP2_SW_VERSION_ENTRY			0x00010483
+ 
+-
+ /*
+- * SCSI specific definitions
++ * The default maximum s/g segment size of a FireWire controller is
++ * usually 0x10000, but SBP-2 only allows 0xffff. Since buffers have to
++ * be quadlet-aligned, we set the length limit to 0xffff & ~3.
+  */
++#define SBP2_MAX_SEG_SIZE			0xfffc
+ 
+-#define SBP2_MAX_SG_ELEMENT_LENGTH		0xf000
+-/* There is no real limitation of the queue depth (i.e. length of the linked
++/*
++ * There is no real limitation of the queue depth (i.e. length of the linked
+  * list of command ORBs) at the target. The chosen depth is merely an
+- * implementation detail of the sbp2 driver. */
++ * implementation detail of the sbp2 driver.
++ */
+ #define SBP2_MAX_CMDS				8
+ 
+ #define SBP2_SCSI_STATUS_GOOD			0x0
+@@ -240,12 +240,6 @@ struct sbp2_status_block {
+  * Representations of commands and devices
+  */
+ 
+-enum sbp2_dma_types {
+-	CMD_DMA_NONE,
+-	CMD_DMA_PAGE,
+-	CMD_DMA_SINGLE
+-};
+-
+ /* Per SCSI command */
+ struct sbp2_command_info {
+ 	struct list_head list;
+@@ -258,11 +252,6 @@ struct sbp2_command_info {
+ 	struct sbp2_unrestricted_page_table
+ 		scatter_gather_element[SG_ALL] __attribute__((aligned(8)));
+ 	dma_addr_t sge_dma;
+-	void *sge_buffer;
+-	dma_addr_t cmd_dma;
+-	enum sbp2_dma_types dma_type;
+-	unsigned long dma_size;
+-	enum dma_data_direction dma_dir;
+ };
+ 
+ /* Per FireWire host */
 diff --git a/drivers/ieee1394/video1394.c b/drivers/ieee1394/video1394.c
-index e24772d..069b9f6 100644
+index 25db6e6..fa9e7d8 100644
 --- a/drivers/ieee1394/video1394.c
 +++ b/drivers/ieee1394/video1394.c
-@@ -1503,6 +1503,8 @@ static int __init video1394_init_module (void)
- {
- 	int ret;
- 
-+	hpsb_init_highlevel(&video1394_highlevel);
-+
- 	cdev_init(&video1394_cdev, &video1394_fops);
- 	video1394_cdev.owner = THIS_MODULE;
- 	ret = cdev_add(&video1394_cdev, IEEE1394_VIDEO1394_DEV, 16);
-diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
-index 01cefbb..d53312c 100644
---- a/drivers/scsi/sd.c
-+++ b/drivers/scsi/sd.c
-@@ -1124,6 +1124,8 @@ sd_spinup_disk(struct scsi_disk *sdkp)
- 				cmd[1] = 1;	/* Return immediately */
- 				memset((void *) &cmd[2], 0, 8);
- 				cmd[4] = 1;	/* Start spin cycle */
-+				if (sdkp->device->start_stop_pwr_cond)
-+					cmd[4] |= 1 << 4;
- 				scsi_execute_req(sdkp->device, cmd, DMA_NONE,
- 						 NULL, 0, &sshdr,
- 						 SD_TIMEOUT, SD_MAX_RETRIES);
-@@ -1790,6 +1792,9 @@ static int sd_start_stop_device(struct scsi_disk *sdkp, int start)
- 	if (start)
- 		cmd[4] |= 1;	/* START */
- 
-+	if (sdp->start_stop_pwr_cond)
-+		cmd[4] |= start ? 1 << 4 : 3 << 4;	/* Active or Standby */
-+
- 	if (!scsi_device_online(sdp))
- 		return -ENODEV;
- 
-diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
-index 6595382..720d675 100644
---- a/include/linux/pci_ids.h
-+++ b/include/linux/pci_ids.h
-@@ -748,6 +748,7 @@
- #define PCI_VENDOR_ID_TI		0x104c
- #define PCI_DEVICE_ID_TI_TVP4020	0x3d07
- #define PCI_DEVICE_ID_TI_4450		0x8011
-+#define PCI_DEVICE_ID_TI_TSB43AB22	0x8023
- #define PCI_DEVICE_ID_TI_XX21_XX11	0x8031
- #define PCI_DEVICE_ID_TI_XX21_XX11_FM	0x8033
- #define PCI_DEVICE_ID_TI_XX21_XX11_SD	0x8034
-diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
-index f6a9fe0..00b7876 100644
---- a/include/scsi/scsi_device.h
-+++ b/include/scsi/scsi_device.h
-@@ -134,6 +134,7 @@ struct scsi_device {
- 	unsigned no_start_on_add:1;	/* do not issue start on add */
- 	unsigned allow_restart:1; /* issue START_UNIT in error handler */
- 	unsigned manage_start_stop:1;	/* Let HLD (sd) manage start/stop */
-+	unsigned start_stop_pwr_cond:1;	/* Set power cond. in START_STOP_UNIT */
- 	unsigned no_uld_attach:1; /* disable connecting to upper level drivers */
- 	unsigned select_no_atn:1;
- 	unsigned fix_capacity:1;	/* READ_CAPACITY is too high by 1 */
+@@ -893,7 +893,7 @@ static long video1394_ioctl(struct file *file,
+ 		if (unlikely(d == NULL))
+ 			return -EFAULT;
+ 
+-		if (unlikely((v.buffer<0) || (v.buffer>=d->num_desc - 1))) {
++		if (unlikely(v.buffer >= d->num_desc - 1)) {
+ 			PRINT(KERN_ERR, ohci->host->id,
+ 			      "Buffer %d out of range",v.buffer);
+ 			return -EINVAL;
+@@ -959,7 +959,7 @@ static long video1394_ioctl(struct file *file,
+ 		if (unlikely(d == NULL))
+ 			return -EFAULT;
+ 
+-		if (unlikely((v.buffer<0) || (v.buffer>d->num_desc - 1))) {
++		if (unlikely(v.buffer > d->num_desc - 1)) {
+ 			PRINT(KERN_ERR, ohci->host->id,
+ 			      "Buffer %d out of range",v.buffer);
+ 			return -EINVAL;
+@@ -1030,7 +1030,7 @@ static long video1394_ioctl(struct file *file,
+ 		d = find_ctx(&ctx->context_list, OHCI_ISO_TRANSMIT, v.channel);
+ 		if (d == NULL) return -EFAULT;
+ 
+-		if ((v.buffer<0) || (v.buffer>=d->num_desc - 1)) {
++		if (v.buffer >= d->num_desc - 1) {
+ 			PRINT(KERN_ERR, ohci->host->id,
+ 			      "Buffer %d out of range",v.buffer);
+ 			return -EINVAL;
+@@ -1137,7 +1137,7 @@ static long video1394_ioctl(struct file *file,
+ 		d = find_ctx(&ctx->context_list, OHCI_ISO_TRANSMIT, v.channel);
+ 		if (d == NULL) return -EFAULT;
+ 
+-		if ((v.buffer<0) || (v.buffer>=d->num_desc-1)) {
++		if (v.buffer >= d->num_desc - 1) {
+ 			PRINT(KERN_ERR, ohci->host->id,
+ 			      "Buffer %d out of range",v.buffer);
+ 			return -EINVAL;
+diff --git a/include/linux/firewire-cdev.h b/include/linux/firewire-cdev.h
+index 0f0e271..4d078e9 100644
+--- a/include/linux/firewire-cdev.h
++++ b/include/linux/firewire-cdev.h
+@@ -154,8 +154,13 @@ struct fw_cdev_event_iso_interrupt {
+  * @request:       Valid if @common.type == %FW_CDEV_EVENT_REQUEST
+  * @iso_interrupt: Valid if @common.type == %FW_CDEV_EVENT_ISO_INTERRUPT
+  *
+- * Convenience union for userspace use.  Events could be read(2) into a char
+- * buffer and then cast to this union for further processing.
++ * Convenience union for userspace use.  Events could be read(2) into an
++ * appropriately aligned char buffer and then cast to this union for further
++ * processing.  Note that for a request, response or iso_interrupt event,
++ * the data[] or header[] may make the size of the full event larger than
++ * sizeof(union fw_cdev_event).  Also note that if you attempt to read(2)
++ * an event into a buffer that is not large enough for it, the data that does
++ * not fit will be discarded so that the next read(2) will return a new event.
+  */
+ union fw_cdev_event {
+ 	struct fw_cdev_event_common common;

linux-2.6-netdev-atl2.patch:

Index: linux-2.6-netdev-atl2.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/linux-2.6-netdev-atl2.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-netdev-atl2.patch	4 Aug 2008 22:20:04 -0000	1.2
+++ linux-2.6-netdev-atl2.patch	30 Oct 2008 04:41:12 -0000	1.3
@@ -1,6 +1,173 @@
-diff -Nurp a/drivers/net/atl2/atl2_ethtool.c b/drivers/net/atl2/atl2_ethtool.c
---- a/drivers/net/atl2/atl2_ethtool.c	1969-12-31 19:00:00.000000000 -0500
-+++ b/drivers/net/atl2/atl2_ethtool.c	2007-12-10 12:45:39.000000000 -0500
+Index: linux-2.6.26.noarch/drivers/net/Kconfig
+===================================================================
+--- linux-2.6.26.noarch.orig/drivers/net/Kconfig
++++ linux-2.6.26.noarch/drivers/net/Kconfig
+@@ -2375,6 +2375,17 @@ config ATL1E
+ 	  To compile this driver as a module, choose M here.  The module
+ 	  will be called atl1e.
+ 
++	config ATL2
++	tristate "Atheros L2 Fast Ethernet support (EXPERIMENTAL)"
++	depends on PCI && EXPERIMENTAL
++	select CRC32
++	select MII
++	help
++	  This driver supports the Atheros L2 fast ethernet adapter.
++
++	  To compile this driver as a module, choose M here.  The module
++	  will be called atl2.
++
+ endif # NETDEV_1000
+ 
+ #
+Index: linux-2.6.26.noarch/drivers/net/Makefile
+===================================================================
+--- linux-2.6.26.noarch.orig/drivers/net/Makefile
++++ linux-2.6.26.noarch/drivers/net/Makefile
+@@ -17,6 +17,7 @@ obj-$(CONFIG_CAN) += can/
+ obj-$(CONFIG_BONDING) += bonding/
+ obj-$(CONFIG_ATL1) += atlx/
+ obj-$(CONFIG_ATL1E) += atl1e/
++obj-$(CONFIG_ATL2) += atl2/
+ obj-$(CONFIG_GIANFAR) += gianfar_driver.o
+ obj-$(CONFIG_TEHUTI) += tehuti.o
+ 
+Index: linux-2.6.26.noarch/drivers/net/atl2/Makefile
+===================================================================
+--- /dev/null
++++ linux-2.6.26.noarch/drivers/net/atl2/Makefile
+@@ -0,0 +1,2 @@
++obj-$(CONFIG_ATL2)	+= atl2.o
++atl2-y			+= atl2_main.o atl2_hw.o atl2_ethtool.o atl2_param.o
+Index: linux-2.6.26.noarch/drivers/net/atl2/atl2.h
+===================================================================
+--- /dev/null
++++ linux-2.6.26.noarch/drivers/net/atl2/atl2.h
+@@ -0,0 +1,120 @@
++/* atl2.h -- atl2 driver definitions
++ *
++ * Copyright(c) 2007 Atheros Corporation. All rights reserved.
++ * Copyright(c) 2006 xiong huang <xiong.huang at atheros.com>
++ * Copyright(c) 2007 Chris Snook <csnook at redhat.com>
++ *
++ * Derived from Intel e1000 driver
++ * Copyright(c) 1999 - 2005 Intel Corporation. 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 of the License, 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., 59
++ * Temple Place - Suite 330, Boston, MA  02111-1307, USA.
++ */
++
++#ifndef _ATL2_H_
++#define _ATL2_H_
++
++#include <asm/atomic.h>
++#include <linux/netdevice.h>
++
++#include "atl2_hw.h"
++
++struct atl2_ring_header {
++    /* pointer to the descriptor ring memory */
++    void *desc;
++    /* physical adress of the descriptor ring */
++    dma_addr_t dma;
++    /* length of descriptor ring in bytes */
++    unsigned int size;
++};
++
++/* board specific private data structure */
++struct atl2_adapter {
++	/* OS defined structs */
++	struct net_device *netdev;
++	struct pci_dev *pdev;
++	struct net_device_stats net_stats;
++#ifdef NETIF_F_HW_VLAN_TX
++	struct vlan_group *vlgrp;
++#endif
++	u32 wol;
++	u16 link_speed;
++	u16 link_duplex;
++
++	spinlock_t stats_lock;
++	spinlock_t tx_lock;
++
++	struct work_struct reset_task;
++	struct work_struct link_chg_task;
++	struct timer_list watchdog_timer;
++	struct timer_list phy_config_timer;
++
++	unsigned long cfg_phy;
++	bool mac_disabled;
++
++	/* All Descriptor memory */
++	dma_addr_t	ring_dma;
++	void		*ring_vir_addr;
++	int		ring_size;
++
++	tx_pkt_header_t	*txd_ring;
++	dma_addr_t	txd_dma;
++
++	tx_pkt_status_t	*txs_ring;
++	dma_addr_t	txs_dma;
++
++	rx_desc_t	*rxd_ring;
++	dma_addr_t	rxd_dma;
++
++	u32 txd_ring_size;         // bytes per unit
++	u32 txs_ring_size;         // dwords per unit
++	u32 rxd_ring_size;         // 1536bytes per unit
++
++	// read /write ptr:
++	// host
++	u32 txd_write_ptr;
++	u32 txs_next_clear;
++	u32 rxd_read_ptr;
++
++	// nic
++	atomic_t txd_read_ptr;
++	atomic_t txs_write_ptr;
++	u32 rxd_write_ptr;
++
++	/* Interrupt Moderator timer ( 2us resolution) */
++	u16 imt;
++	/* Interrupt Clear timer (2us resolution) */
++	u16 ict;
++
++	unsigned long flags;
++	/* structs defined in atl2_hw.h */
++	u32 bd_number;     // board number;
++	bool pci_using_64;
++	bool have_msi;
++	struct atl2_hw hw;
++
++	u32 usr_cmd;
++//    u32 regs_buff[ATL2_REGS_LEN];
++	u32 pci_state[16];
++
++	u32 *config_space;
++};
++
++enum atl2_state_t {
++	__ATL2_TESTING,
++	__ATL2_RESETTING,
++	__ATL2_DOWN
++};
++
++#endif /* _ATL2_H_ */
+Index: linux-2.6.26.noarch/drivers/net/atl2/atl2_ethtool.c
+===================================================================
+--- /dev/null
++++ linux-2.6.26.noarch/drivers/net/atl2/atl2_ethtool.c
 @@ -0,0 +1,416 @@
 +/* atl2_ethtool.c -- atl2 ethtool support
 + *
@@ -418,133 +585,10 @@
 +{
 +	SET_ETHTOOL_OPS(netdev, &atl2_ethtool_ops);
 +}
-diff -Nurp a/drivers/net/atl2/atl2.h b/drivers/net/atl2/atl2.h
---- a/drivers/net/atl2/atl2.h	1969-12-31 19:00:00.000000000 -0500
-+++ b/drivers/net/atl2/atl2.h	2007-12-10 10:54:33.000000000 -0500
-@@ -0,0 +1,120 @@
-+/* atl2.h -- atl2 driver definitions
-+ *
-+ * Copyright(c) 2007 Atheros Corporation. All rights reserved.
-+ * Copyright(c) 2006 xiong huang <xiong.huang at atheros.com>
-+ * Copyright(c) 2007 Chris Snook <csnook at redhat.com>
-+ *
-+ * Derived from Intel e1000 driver
-+ * Copyright(c) 1999 - 2005 Intel Corporation. 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 of the License, 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., 59
-+ * Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-+ */
-+
-+#ifndef _ATL2_H_
-+#define _ATL2_H_
-+
-+#include <asm/atomic.h>
-+#include <linux/netdevice.h>
-+
-+#include "atl2_hw.h"
-+
-+struct atl2_ring_header {
-+    /* pointer to the descriptor ring memory */
-+    void *desc;
-+    /* physical adress of the descriptor ring */
-+    dma_addr_t dma;
-+    /* length of descriptor ring in bytes */
-+    unsigned int size;
-+};
-+
-+/* board specific private data structure */
-+struct atl2_adapter {
-+	/* OS defined structs */
-+	struct net_device *netdev;
-+	struct pci_dev *pdev;
-+	struct net_device_stats net_stats;
-+#ifdef NETIF_F_HW_VLAN_TX
-+	struct vlan_group *vlgrp;
-+#endif
-+	u32 wol;
-+	u16 link_speed;
-+	u16 link_duplex;
-+
-+	spinlock_t stats_lock;
-+	spinlock_t tx_lock;
-+
-+	struct work_struct reset_task;
-+	struct work_struct link_chg_task;
-+	struct timer_list watchdog_timer;
-+	struct timer_list phy_config_timer;
-+
-+	unsigned long cfg_phy;
-+	bool mac_disabled;
-+
-+	/* All Descriptor memory */
-+	dma_addr_t	ring_dma;
-+	void		*ring_vir_addr;
-+	int		ring_size;
-+
-+	tx_pkt_header_t	*txd_ring;
-+	dma_addr_t	txd_dma;
-+
-+	tx_pkt_status_t	*txs_ring;
-+	dma_addr_t	txs_dma;
-+
-+	rx_desc_t	*rxd_ring;
-+	dma_addr_t	rxd_dma;
-+
-+	u32 txd_ring_size;         // bytes per unit
-+	u32 txs_ring_size;         // dwords per unit
-+	u32 rxd_ring_size;         // 1536bytes per unit
-+
-+	// read /write ptr:
-+	// host
-+	u32 txd_write_ptr;
-+	u32 txs_next_clear;
-+	u32 rxd_read_ptr;
-+
-+	// nic
-+	atomic_t txd_read_ptr;
-+	atomic_t txs_write_ptr;
-+	u32 rxd_write_ptr;
-+
-+	/* Interrupt Moderator timer ( 2us resolution) */
-+	u16 imt;
-+	/* Interrupt Clear timer (2us resolution) */
-+	u16 ict;
-+
-+	unsigned long flags;
-+	/* structs defined in atl2_hw.h */
-+	u32 bd_number;     // board number;
-+	bool pci_using_64;
-+	bool have_msi;
-+	struct atl2_hw hw;
-+
-+	u32 usr_cmd;
-+//    u32 regs_buff[ATL2_REGS_LEN];
-+	u32 pci_state[16];
-+
-+	u32 *config_space;
-+};
-+
-+enum atl2_state_t {
-+	__ATL2_TESTING,
-+	__ATL2_RESETTING,
-+	__ATL2_DOWN
-+};
-+
-+#endif /* _ATL2_H_ */
-diff -Nurp a/drivers/net/atl2/atl2_hw.c b/drivers/net/atl2/atl2_hw.c
---- a/drivers/net/atl2/atl2_hw.c	1969-12-31 19:00:00.000000000 -0500
-+++ b/drivers/net/atl2/atl2_hw.c	2007-12-10 11:21:08.000000000 -0500
+Index: linux-2.6.26.noarch/drivers/net/atl2/atl2_hw.c
+===================================================================
+--- /dev/null
++++ linux-2.6.26.noarch/drivers/net/atl2/atl2_hw.c
 @@ -0,0 +1,760 @@
 +/* atl2_hw.c -- atl2 hardware control functions
 + *
@@ -1306,9 +1350,10 @@
 +	atl2_write_phy_reg(hw, MII_DBG_ADDR, 3);
 +	atl2_write_phy_reg(hw, MII_DBG_DATA, 0);
 +}
-diff -Nurp a/drivers/net/atl2/atl2_hw.h b/drivers/net/atl2/atl2_hw.h
---- a/drivers/net/atl2/atl2_hw.h	1969-12-31 19:00:00.000000000 -0500
-+++ b/drivers/net/atl2/atl2_hw.h	2007-12-10 12:45:11.000000000 -0500
+Index: linux-2.6.26.noarch/drivers/net/atl2/atl2_hw.h
+===================================================================
+--- /dev/null
++++ linux-2.6.26.noarch/drivers/net/atl2/atl2_hw.h
 @@ -0,0 +1,758 @@
 +/* atl2_hw.h -- atl2 hardware definitions
 + *
@@ -2068,9 +2113,10 @@
 +};
 +
 +#endif /* _ATL2_HW_H_ */
-diff -Nurp a/drivers/net/atl2/atl2_main.c b/drivers/net/atl2/atl2_main.c
---- a/drivers/net/atl2/atl2_main.c	1969-12-31 19:00:00.000000000 -0500
-+++ b/drivers/net/atl2/atl2_main.c	2008-01-28 17:16:38.000000000 -0500
+Index: linux-2.6.26.noarch/drivers/net/atl2/atl2_main.c
+===================================================================
+--- /dev/null
++++ linux-2.6.26.noarch/drivers/net/atl2/atl2_main.c
 @@ -0,0 +1,1851 @@
 +/* atl2_main.c -- atl2 driver main functions
 + *
@@ -3923,9 +3969,10 @@
 +	struct atl2_adapter *adapter = hw->back;
 +	pci_write_config_word(adapter->pdev, reg, *value);
 +}
-diff -Nurp a/drivers/net/atl2/atl2_osdep.h b/drivers/net/atl2/atl2_osdep.h
---- a/drivers/net/atl2/atl2_osdep.h	1969-12-31 19:00:00.000000000 -0500
-+++ b/drivers/net/atl2/atl2_osdep.h	2007-12-04 16:48:02.000000000 -0500
+Index: linux-2.6.26.noarch/drivers/net/atl2/atl2_osdep.h
+===================================================================
+--- /dev/null
++++ linux-2.6.26.noarch/drivers/net/atl2/atl2_osdep.h
 @@ -0,0 +1,72 @@
 +/* atl2_osdep.h -- atl2 compat cruft
 + *
@@ -3999,9 +4046,10 @@
 +	(readl(((a)->hw_addr + reg) + ((offset) << 2)))
 +
 +#endif /* _ATL2_OSDEP_H_ */
-diff -Nurp a/drivers/net/atl2/atl2_param.c b/drivers/net/atl2/atl2_param.c
---- a/drivers/net/atl2/atl2_param.c	1969-12-31 19:00:00.000000000 -0500
-+++ b/drivers/net/atl2/atl2_param.c	2007-12-10 10:29:07.000000000 -0500
+Index: linux-2.6.26.noarch/drivers/net/atl2/atl2_param.c
+===================================================================
+--- /dev/null
++++ linux-2.6.26.noarch/drivers/net/atl2/atl2_param.c
 @@ -0,0 +1,317 @@
 +/* atl2_param.c -- atl2 parameter processing
 + *
@@ -4320,41 +4368,3 @@
 +	}
 +#endif
 +}
-diff -Nurp a/drivers/net/atl2/Makefile b/drivers/net/atl2/Makefile
---- a/drivers/net/atl2/Makefile	1969-12-31 19:00:00.000000000 -0500
-+++ b/drivers/net/atl2/Makefile	2008-01-31 14:37:35.000000000 -0500
-@@ -0,0 +1,2 @@
-+obj-$(CONFIG_ATL2)	+= atl2.o
-+atl2-y			+= atl2_main.o atl2_hw.o atl2_ethtool.o atl2_param.o
-diff -Nurp a/drivers/net/Kconfig b/drivers/net/Kconfig
---- a/drivers/net/Kconfig	2008-01-31 14:32:05.000000000 -0500
-+++ b/drivers/net/Kconfig	2008-01-31 14:44:01.000000000 -0500
-@@ -1999,6 +1999,17 @@ config NE_H8300
- 	  Say Y here if you want to use the NE2000 compatible
- 	  controller on the Renesas H8/300 processor.
- 
-+config ATL2
-+	tristate "Atheros L2 Fast Ethernet support (EXPERIMENTAL)"
-+	depends on PCI && EXPERIMENTAL
-+	select CRC32
-+	select MII
-+	help
-+	  This driver supports the Atheros L2 fast ethernet adapter.
-+
-+	  To compile this driver as a module, choose M here.  The module
-+	  will be called atl2.
-+
- source "drivers/net/fec_8xx/Kconfig"
- source "drivers/net/fs_enet/Kconfig"
- 
-diff -Nurp a/drivers/net/Makefile b/drivers/net/Makefile
---- a/drivers/net/Makefile	2008-01-31 14:32:05.000000000 -0500
-+++ b/drivers/net/Makefile	2008-01-31 14:38:52.000000000 -0500
-@@ -11,6 +11,7 @@ obj-$(CONFIG_CHELSIO_T3) += cxgb3/
- obj-$(CONFIG_CAN) += can/
- obj-$(CONFIG_BONDING) += bonding/
- obj-$(CONFIG_ATL1) += atlx/
-+obj-$(CONFIG_ATL2) += atl2/
- obj-$(CONFIG_GIANFAR) += gianfar_driver.o
- obj-$(CONFIG_TEHUTI) += tehuti.o
- 

linux-2.6-silence-noise.patch:

Index: linux-2.6-silence-noise.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/linux-2.6-silence-noise.patch,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- linux-2.6-silence-noise.patch	14 Aug 2008 19:04:50 -0000	1.16
+++ linux-2.6-silence-noise.patch	30 Oct 2008 04:41:12 -0000	1.17
@@ -1,158 +1,43 @@
---- linux-2.6.18.noarch/arch/x86/mm/init_64.c~	2006-10-16 17:09:56.000000000 -0400
-+++ linux-2.6.18.noarch/arch/x86/mm/init_64.c	2006-10-16 17:10:09.000000000 -0400
-@@ -337,10 +337,6 @@ static void __init find_early_table_spac
- 
- 	table_start >>= PAGE_SHIFT;
- 	table_end = table_start;
--
--	early_printk("kernel direct mapping tables up to %lx @ %lx-%lx\n",
--		end, table_start << PAGE_SHIFT,
--		(table_start << PAGE_SHIFT) + tables);
- }
- 
- /* Setup the direct mapping of the physical memory at PAGE_OFFSET.
- 
---- linux-2.6.18.noarch/drivers/pci/setup-res.c~	2006-10-17 17:15:34.000000000 -0400
-+++ linux-2.6.18.noarch/drivers/pci/setup-res.c	2006-10-17 17:15:56.000000000 -0400
-@@ -148,7 +148,7 @@ int pci_assign_resource(struct pci_dev *
- 	}
- 
- 	if (ret) {
--		printk(KERN_ERR "PCI: Failed to allocate %s resource "
-+		printk(KERN_DEBUG "PCI: Failed to allocate %s resource "
- 			"#%d:%llx@%llx for %s\n",
- 			res->flags & IORESOURCE_IO ? "I/O" : "mem",
- 			resno, (unsigned long long)size,
-@@ -186,7 +186,7 @@ int pci_assign_resource_fixed(struct pci
- 	}
- 
- 	if (ret) {
--		printk(KERN_ERR "PCI: Failed to allocate %s resource "
-+		printk(KERN_DEBUG "PCI: Failed to allocate %s resource "
- 				"#%d:%llx@%llx for %s\n",
- 			res->flags & IORESOURCE_IO ? "I/O" : "mem",
- 			resno, (unsigned long long)(res->end - res->start + 1),
---- linux-2.6.19.noarch/arch/x86/pci/i386.c~	2006-12-04 11:21:32.000000000 -0500
-+++ linux-2.6.19.noarch/arch/x86/pci/i386.c	2006-12-04 11:22:10.000000000 -0500
-@@ -112,7 +112,7 @@ static void __init pcibios_allocate_bus_
- 				pr = pci_find_parent_resource(dev, r);
- 				if (!r->start || !pr ||
- 				    request_resource(pr, r) < 0) {
--					printk(KERN_ERR "PCI: Cannot allocate "
-+					printk(KERN_DEBUG "PCI: Cannot allocate "
- 						"resource region %d "
- 						"of bridge %s\n",
- 						idx, pci_name(dev));
-@@ -155,7 +155,7 @@ static void __init pcibios_allocate_reso
- 				    r->start, r->end, r->flags, disabled, pass);
- 				pr = pci_find_parent_resource(dev, r);
- 				if (!pr || request_resource(pr, r) < 0) {
--					printk(KERN_ERR "PCI: Cannot allocate "
-+					printk(KERN_DEBUG "PCI: Cannot allocate "
- 						"resource region %d "
- 						"of device %s\n",
- 						idx, pci_name(dev));
-
-Remove noisy PM printk.
-This has served its purpose.
-
-Signed-off-by: Dave Jones <davej at redhat.com>
-
---- linux-2.6.20.noarch/drivers/pci/pci.c~	2007-04-16 18:14:14.000000000 -0400
-+++ linux-2.6.20.noarch/drivers/pci/pci.c	2007-04-16 18:14:33.000000000 -0400
-@@ -664,14 +664,9 @@ pci_restore_state(struct pci_dev *dev)
- 	 */
- 	for (i = 15; i >= 0; i--) {
- 		pci_read_config_dword(dev, i * 4, &val);
--		if (val != dev->saved_config_space[i]) {
--			printk(KERN_DEBUG "PM: Writing back config space on "
--				"device %s at offset %x (was %x, writing %x)\n",
--				pci_name(dev), i,
--				val, (int)dev->saved_config_space[i]);
-+		if (val != dev->saved_config_space[i])
- 			pci_write_config_dword(dev,i * 4,
- 				dev->saved_config_space[i]);
--		}
- 	}
- 	pci_restore_pcix_state(dev);
- 	pci_restore_msi_state(dev);
---- linux-2.6.25.noarch/drivers/base/power/main.c~	2008-05-16 10:26:38.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/base/power/main.c	2008-05-16 10:26:59.000000000 -0400
-@@ -64,9 +64,6 @@ int device_pm_add(struct device *dev)
+--- linux-2.6.26.noarch/drivers/base/power/main.c~	2008-08-22 20:57:57.000000000 -0400
++++ linux-2.6.26.noarch/drivers/base/power/main.c	2008-08-22 20:58:05.000000000 -0400
+@@ -69,9 +69,6 @@ void device_pm_unlock(void)
+  */
+ void device_pm_add(struct device *dev)
  {
- 	int error;
- 
 -	pr_debug("PM: Adding info for %s:%s\n",
 -		 dev->bus ? dev->bus->name : "No Bus",
 -		 kobject_name(&dev->kobj));
  	mutex_lock(&dpm_list_mtx);
- 	if ((dev->parent && dev->parent->power.sleeping) || all_sleeping) {
- 		if (dev->parent->power.sleeping)
-From fc4c74c4d0ccc7b57fcc841e88b63fd729f45115 Mon Sep 17 00:00:00 2001
-From: Jeremy Katz <katzj at redhat.com>
-Date: Tue, 1 Jul 2008 17:32:41 -0400
-Subject: [PATCH] Make loading padlock modules quieter when hardware isn't available
-
-When loading aes or sha256 via the module aliases, the padlock modules
-also try to get loaded.  Make the error message for them not being
-present only be a NOTICE rather than an ERROR so that use of 'quiet'
-will suppress the messages
-
-Signed-off-by: Jeremy Katz <katzj at redhat.com>
+ 	if (dev->parent) {
+ 		if (dev->parent->power.status >= DPM_SUSPENDING)
+From b4e96f34c17e5a79cd28774cc722bb33e7e02c6e Mon Sep 17 00:00:00 2001
+From: Peter Jones <pjones at redhat.com>
+Date: Thu, 25 Sep 2008 16:23:33 -0400
+Subject: [PATCH] Don't print an error message just because there's no i8042 chip.
+
+Some systems, such as EFI-based Apple systems, won't necessarily have an
+i8042 to initialize.  We shouldn't be printing an error message in this
+case, since not detecting the chip is the correct behavior.
 ---
- drivers/crypto/padlock-aes.c |    4 ++--
- drivers/crypto/padlock-sha.c |    4 ++--
- 2 files changed, 4 insertions(+), 4 deletions(-)
+ drivers/input/serio/i8042.c |    4 +---
+ 1 files changed, 1 insertions(+), 3 deletions(-)
 
-diff --git a/drivers/crypto/padlock-aes.c b/drivers/crypto/padlock-aes.c
-index bb30eb9..54a2a16 100644
---- a/drivers/crypto/padlock-aes.c
-+++ b/drivers/crypto/padlock-aes.c
-@@ -385,12 +385,12 @@ static int __init padlock_init(void)
- 	int ret;
- 
- 	if (!cpu_has_xcrypt) {
--		printk(KERN_ERR PFX "VIA PadLock not detected.\n");
-+		printk(KERN_NOTICE PFX "VIA PadLock not detected.\n");
- 		return -ENODEV;
- 	}
- 
- 	if (!cpu_has_xcrypt_enabled) {
--		printk(KERN_ERR PFX "VIA PadLock detected, but not enabled. Hmm, strange...\n");
-+		printk(KERN_NOTICE PFX "VIA PadLock detected, but not enabled. Hmm, strange...\n");
- 		return -ENODEV;
- 	}
- 
-diff --git a/drivers/crypto/padlock-sha.c b/drivers/crypto/padlock-sha.c
-index c666b4e..40d5680 100644
---- a/drivers/crypto/padlock-sha.c
-+++ b/drivers/crypto/padlock-sha.c
-@@ -254,12 +254,12 @@ static int __init padlock_init(void)
- 	int rc = -ENODEV;
+diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
+index 170f71e..4f3e632 100644
+--- a/drivers/input/serio/i8042.c
++++ b/drivers/input/serio/i8042.c
+@@ -701,10 +701,8 @@ static int __devinit i8042_check_aux(void)
  
- 	if (!cpu_has_phe) {
--		printk(KERN_ERR PFX "VIA PadLock Hash Engine not detected.\n");
-+		printk(KERN_NOTICE PFX "VIA PadLock Hash Engine not detected.\n");
- 		return -ENODEV;
- 	}
- 
- 	if (!cpu_has_phe_enabled) {
--		printk(KERN_ERR PFX "VIA PadLock detected, but not enabled. Hmm, strange...\n");
-+		printk(KERN_NOTICE PFX "VIA PadLock detected, but not enabled. Hmm, strange...\n");
+ static int i8042_controller_check(void)
+ {
+-	if (i8042_flush() == I8042_BUFFER_SIZE) {
+-		printk(KERN_ERR "i8042.c: No controller found.\n");
++	if (i8042_flush() == I8042_BUFFER_SIZE)
  		return -ENODEV;
- 	}
+-	}
  
+ 	return 0;
+ }
 -- 
-1.5.6
+1.6.0.1
 
---- linux-2.6.26.noarch/arch/x86/pci/mmconfig-shared.c~	2008-08-14 15:04:05.000000000 -0400
-+++ linux-2.6.26.noarch/arch/x86/pci/mmconfig-shared.c	2008-08-14 15:04:14.000000000 -0400
-@@ -365,7 +365,7 @@ static void __init pci_mmcfg_reject_brok
- 	return;
- 
- reject:
--	printk(KERN_ERR "PCI: Not using MMCONFIG.\n");
-+	printk(KERN_INFO "PCI: Not using MMCONFIG.\n");
- 	pci_mmcfg_arch_free();
- 	kfree(pci_mmcfg_config);
- 	pci_mmcfg_config = NULL;

linux-2.6-squashfs.patch:

Index: linux-2.6-squashfs.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/linux-2.6-squashfs.patch,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- linux-2.6-squashfs.patch	13 Feb 2008 21:57:30 -0000	1.29
+++ linux-2.6-squashfs.patch	30 Oct 2008 04:41:12 -0000	1.30
@@ -1,16 +1,15 @@
-diff --git a/fs/Kconfig b/fs/Kconfig
-index d731282..cab44a1 100644
---- a/fs/Kconfig
-+++ b/fs/Kconfig
-@@ -1367,6 +1367,56 @@ config CRAMFS
+diff -x .gitignore -Nurp linux-2.6.27-rc4/fs/Kconfig linux-2.6.27-rc4-squashfs3.4/fs/Kconfig
+--- linux-2.6.27-rc4/fs/Kconfig	2008-08-11 15:20:41.000000000 +0100
++++ linux-2.6.27-rc4-squashfs3.4/fs/Kconfig	2008-08-19 18:31:56.000000000 +0100
+@@ -1348,6 +1348,56 @@ config CRAMFS
  
  	  If unsure, say N.
  
 +config SQUASHFS
-+	tristate "SquashFS 3.3 - Squashed file system support"
++	tristate "SquashFS 3.4 - Squashed file system support"
 +	select ZLIB_INFLATE
 +	help
-+	  Saying Y here includes support for SquashFS 3.3 (a Compressed
++	  Saying Y here includes support for SquashFS 3.4 (a Compressed
 +	  Read-Only File System).  Squashfs is a highly compressed read-only
 +	  filesystem for Linux.  It uses zlib compression to compress both
 +	  files, inodes and directories.  Inodes in the system are very small
@@ -59,11 +58,10 @@
  config VXFS_FS
  	tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
  	depends on BLOCK
-diff --git a/fs/Makefile b/fs/Makefile
-index 1e7a11b..3faf857 100644
---- a/fs/Makefile
-+++ b/fs/Makefile
-@@ -73,6 +73,7 @@ obj-$(CONFIG_JBD)		+= jbd/
+diff -x .gitignore -Nurp linux-2.6.27-rc4/fs/Makefile linux-2.6.27-rc4-squashfs3.4/fs/Makefile
+--- linux-2.6.27-rc4/fs/Makefile	2008-08-11 15:20:41.000000000 +0100
++++ linux-2.6.27-rc4-squashfs3.4/fs/Makefile	2008-08-19 18:31:56.000000000 +0100
+@@ -74,6 +74,7 @@ obj-$(CONFIG_JBD)		+= jbd/
  obj-$(CONFIG_JBD2)		+= jbd2/
  obj-$(CONFIG_EXT2_FS)		+= ext2/
  obj-$(CONFIG_CRAMFS)		+= cramfs/
@@ -71,29 +69,14 @@
  obj-y				+= ramfs/
  obj-$(CONFIG_HUGETLBFS)		+= hugetlbfs/
  obj-$(CONFIG_CODA_FS)		+= coda/
-diff --git a/fs/squashfs/Makefile b/fs/squashfs/Makefile
-new file mode 100644
-index 0000000..1bc7b06
---- /dev/null
-+++ b/fs/squashfs/Makefile
-@@ -0,0 +1,7 @@
-+#
-+# Makefile for the linux squashfs routines.
-+#
-+
-+obj-$(CONFIG_SQUASHFS) += squashfs.o
-+squashfs-y += inode.o
-+squashfs-y += squashfs2_0.o
-diff --git a/fs/squashfs/inode.c b/fs/squashfs/inode.c
-new file mode 100644
-index 0000000..f578528
---- /dev/null
-+++ b/fs/squashfs/inode.c
-@@ -0,0 +1,2178 @@
+diff -x .gitignore -Nurp linux-2.6.27-rc4/fs/squashfs/inode.c linux-2.6.27-rc4-squashfs3.4/fs/squashfs/inode.c
+--- linux-2.6.27-rc4/fs/squashfs/inode.c	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.27-rc4-squashfs3.4/fs/squashfs/inode.c	2008-08-26 08:25:23.000000000 +0100
+@@ -0,0 +1,2173 @@
 +/*
 + * Squashfs - a compressed read only filesystem for Linux
 + *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008
 + * Phillip Lougher <phillip at lougher.demon.co.uk>
 + *
 + * This program is free software; you can redistribute it and/or
@@ -122,13 +105,16 @@
 +#include <linux/buffer_head.h>
 +#include <linux/vfs.h>
 +#include <linux/vmalloc.h>
++#include <linux/spinlock.h>
 +#include <linux/smp_lock.h>
 +#include <linux/exportfs.h>
 +
 +#include "squashfs.h"
 +
-+int squashfs_cached_blks;
-+
++static struct dentry *squashfs_fh_to_dentry(struct super_block *s,
++		struct fid *fid, int fh_len, int fh_type);
++static struct dentry *squashfs_fh_to_parent(struct super_block *s,
++		struct fid *fid, int fh_len, int fh_type);
 +static struct dentry *squashfs_get_parent(struct dentry *child);
 +static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode);
 +static int squashfs_statfs(struct dentry *, struct kstatfs *);
@@ -169,14 +155,9 @@
 +	.remount_fs = squashfs_remount
 +};
 +
-+static struct super_operations squashfs_export_super_ops = {
-+	.alloc_inode = squashfs_alloc_inode,
-+	.destroy_inode = squashfs_destroy_inode,
-+	.statfs = squashfs_statfs,
-+	.put_super = squashfs_put_super,
-+};
-+
 +static struct export_operations squashfs_export_ops = {
++	.fh_to_dentry = squashfs_fh_to_dentry,
++	.fh_to_parent = squashfs_fh_to_parent,
 +	.get_parent = squashfs_get_parent
 +};
 +
@@ -284,7 +265,7 @@
 +		goto read_failure;
 +
 +	if (c_byte) {
-+		bytes = msblk->devblksize - offset;
++		bytes = -offset;
 +		compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
 +		c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
 +
@@ -294,12 +275,8 @@
 +		if (c_byte > srclength || index < 0 || (index + c_byte) > sblk->bytes_used)
 +			goto read_failure;
 +
-+		bh[0] = sb_getblk(s, cur_index);
-+		if (bh[0] == NULL)
-+			goto block_release;
-+
-+		for (b = 1; bytes < c_byte; b++) {
-+			bh[b] = sb_getblk(s, ++cur_index);
++		for (b = 0; bytes < (int) c_byte; b++, cur_index++) {
++			bh[b] = sb_getblk(s, cur_index);
 +			if (bh[b] == NULL)
 +				goto block_release;
 +			bytes += msblk->devblksize;
@@ -312,6 +289,7 @@
 +		bh[0] = get_block_length(s, &cur_index, &offset, &c_byte);
 +		if (bh[0] == NULL)
 +			goto read_failure;
++		b = 1;
 +
 +		bytes = msblk->devblksize - offset;
 +		compressed = SQUASHFS_COMPRESSED(c_byte);
@@ -321,9 +299,9 @@
 +					? "" : "un", (unsigned int) c_byte);
 +
 +		if (c_byte > srclength || (index + c_byte) > sblk->bytes_used)
-+			goto read_failure;
++			goto block_release;
 +
-+		for (b = 1; bytes < c_byte; b++) {
++		for (; bytes < c_byte; b++) {
 +			bh[b] = sb_getblk(s, ++cur_index);
 +			if (bh[b] == NULL)
 +				goto block_release;
@@ -433,117 +411,204 @@
 +}
 +
 +
-+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, void *buffer,
-+				long long block, unsigned int offset,
-+				int length, long long *next_block,
-+				unsigned int *next_offset)
++static struct squashfs_cache_entry *squashfs_cache_get(struct super_block *s,
++	struct squashfs_cache *cache, long long block, int length)
 +{
-+	struct squashfs_sb_info *msblk = s->s_fs_info;
-+	int n, i, bytes, return_length = length;
-+	long long next_index;
++	int i, n;
++	struct squashfs_cache_entry *entry;
 +
-+	TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
++	spin_lock(&cache->lock);
 +
 +	while (1) {
-+		for (i = 0; i < squashfs_cached_blks; i++) 
-+			if (msblk->block_cache[i].block == block)
-+				break; 
-+		
-+		mutex_lock(&msblk->block_cache_mutex);
++		for (i = 0; i < cache->entries && cache->entry[i].block != block; i++);
 +
-+		if (i == squashfs_cached_blks) {
-+			/* read inode header block */
-+			if (msblk->unused_cache_blks == 0) {
-+				mutex_unlock(&msblk->block_cache_mutex);
-+				wait_event(msblk->waitq, msblk->unused_cache_blks);
++		if (i == cache->entries) {
++			if (cache->unused_blks == 0) {
++				cache->waiting ++;
++				spin_unlock(&cache->lock);
++				wait_event(cache->wait_queue, cache->unused_blks);
++				spin_lock(&cache->lock);
++				cache->waiting --;
 +				continue;
 +			}
 +
-+			i = msblk->next_cache;
-+			for (n = 0; n < squashfs_cached_blks; n++) {
-+				if (msblk->block_cache[i].block != SQUASHFS_USED_BLK)
++			i = cache->next_blk;
++			for (n = 0; n < cache->entries; n++) {
++				if (cache->entry[i].locked == 0)
 +					break;
-+				i = (i + 1) % squashfs_cached_blks;
++				i = (i + 1) % cache->entries;
 +			}
 +
-+			msblk->next_cache = (i + 1) % squashfs_cached_blks;
++			cache->next_blk = (i + 1) % cache->entries;
++			entry = &cache->entry[i];
 +
-+			if (msblk->block_cache[i].block == SQUASHFS_INVALID_BLK) {
-+				msblk->block_cache[i].data = vmalloc(SQUASHFS_METADATA_SIZE);
-+				if (msblk->block_cache[i].data == NULL) {
-+					ERROR("Failed to allocate cache block\n");
-+					mutex_unlock(&msblk->block_cache_mutex);
-+					goto out;
-+				}
-+			}
-+	
-+			msblk->block_cache[i].block = SQUASHFS_USED_BLK;
-+			msblk->unused_cache_blks --;
-+			mutex_unlock(&msblk->block_cache_mutex);
-+
-+			msblk->block_cache[i].length = squashfs_read_data(s,
-+				msblk->block_cache[i].data, block, 0, &next_index,
-+				SQUASHFS_METADATA_SIZE);
-+
-+			if (msblk->block_cache[i].length == 0) {
-+				ERROR("Unable to read cache block [%llx:%x]\n", block, offset);
-+				mutex_lock(&msblk->block_cache_mutex);
-+				msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+				msblk->unused_cache_blks ++;
-+				smp_mb();
-+				vfree(msblk->block_cache[i].data);
-+				wake_up(&msblk->waitq);
-+				mutex_unlock(&msblk->block_cache_mutex);
-+				goto out;
-+			}
++			cache->unused_blks --;
++			entry->block = block;
++			entry->locked = 1;
++			entry->pending = 1;
++			entry->waiting = 0;
++			entry->error = 0;
++			spin_unlock(&cache->lock);
++
++			entry->length = squashfs_read_data(s, entry->data,
++				block, length, &entry->next_index, cache->block_size);
++
++			spin_lock(&cache->lock);
++
++			if (entry->length == 0)
++				entry->error = 1;
++
++			entry->pending = 0;
++			spin_unlock(&cache->lock);
++			if (entry->waiting)
++				wake_up_all(&entry->wait_queue);
++			goto out;
++		}
 +
-+			mutex_lock(&msblk->block_cache_mutex);
-+			msblk->block_cache[i].block = block;
-+			msblk->block_cache[i].next_index = next_index;
-+			msblk->unused_cache_blks ++;
-+			smp_mb();
-+			wake_up(&msblk->waitq);
-+			TRACE("Read cache block [%llx:%x]\n", block, offset);
++		entry = &cache->entry[i];
++		if (entry->locked == 0)
++			cache->unused_blks --;
++		entry->locked++;
++
++		if (entry->pending) {
++			entry->waiting ++;
++			spin_unlock(&cache->lock);
++			wait_event(entry->wait_queue, !entry->pending);
++			goto out;
 +		}
 +
-+		if (msblk->block_cache[i].block != block) {
-+			mutex_unlock(&msblk->block_cache_mutex);
-+			continue;
++		spin_unlock(&cache->lock);
++		goto out;
++	}
++
++out:
++	TRACE("Got %s %d, start block %lld, locked %d, error %d\n", i,
++		cache->name, entry->block, entry->locked, entry->error);
++	if (entry->error)
++		ERROR("Unable to read %s cache entry [%llx]\n", cache->name, block);
++	return entry;
++}
++
++
++static void squashfs_cache_put(struct squashfs_cache *cache,
++				struct squashfs_cache_entry *entry)
++{
++	spin_lock(&cache->lock);
++	entry->locked --;
++	if (entry->locked == 0) {
++		cache->unused_blks ++;
++		spin_unlock(&cache->lock);
++		if (cache->waiting)
++			wake_up(&cache->wait_queue);
++	} else
++		spin_unlock(&cache->lock);
++}
++
++
++static void squashfs_cache_delete(struct squashfs_cache *cache)
++{
++	int i;
++
++	if (cache == NULL)
++		return;
++
++	for (i = 0; i < cache->entries; i++)
++		if (cache->entry[i].data) {
++			if (cache->use_vmalloc)
++				vfree(cache->entry[i].data);
++			else
++				kfree(cache->entry[i].data);
++		}
++
++	kfree(cache);
++}
++
++
++static struct squashfs_cache *squashfs_cache_init(char *name, int entries,
++	int block_size, int use_vmalloc)
++{
++	int i;
++	struct squashfs_cache *cache = kzalloc(sizeof(struct squashfs_cache) +
++			entries * sizeof(struct squashfs_cache_entry), GFP_KERNEL);
++	if (cache == NULL) {
++		ERROR("Failed to allocate %s cache\n", name);
++		goto failed;
++	}
++
++	cache->next_blk = 0;
++	cache->unused_blks = entries;
++	cache->entries = entries;
++	cache->block_size = block_size;
++	cache->use_vmalloc = use_vmalloc;
++	cache->name = name;
++	cache->waiting = 0;
++	spin_lock_init(&cache->lock);
++	init_waitqueue_head(&cache->wait_queue);
++
++	for (i = 0; i < entries; i++) {
++		init_waitqueue_head(&cache->entry[i].wait_queue);
++		cache->entry[i].block = SQUASHFS_INVALID_BLK;
++		cache->entry[i].data = use_vmalloc ? vmalloc(block_size) :
++				kmalloc(block_size, GFP_KERNEL);
++		if (cache->entry[i].data == NULL) {
++			ERROR("Failed to allocate %s cache entry\n", name);
++			goto cleanup;
 +		}
++	}
 +
-+		bytes = msblk->block_cache[i].length - offset;
++	return cache;
 +
-+		if (bytes < 1) {
-+			mutex_unlock(&msblk->block_cache_mutex);
-+			goto out;
++cleanup:
++	squashfs_cache_delete(cache);
++failed:
++	return NULL;
++}
++
++
++SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, void *buffer,
++				long long block, unsigned int offset,
++				int length, long long *next_block,
++				unsigned int *next_offset)
++{
++	struct squashfs_sb_info *msblk = s->s_fs_info;
++	int bytes, return_length = length;
++	struct squashfs_cache_entry *entry;
++
++	TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
++
++	while (1) {
++		entry = squashfs_cache_get(s, msblk->block_cache, block, 0);
++		bytes = entry->length - offset;
++
++		if (entry->error || bytes < 1) {
++			return_length = 0;
++			goto finish;
 +		} else if (bytes >= length) {
 +			if (buffer)
-+				memcpy(buffer, msblk->block_cache[i].data + offset, length);
-+			if (msblk->block_cache[i].length - offset == length) {
-+				*next_block = msblk->block_cache[i].next_index;
++				memcpy(buffer, entry->data + offset, length);
++			if (entry->length - offset == length) {
++				*next_block = entry->next_index;
 +				*next_offset = 0;
 +			} else {
 +				*next_block = block;
 +				*next_offset = offset + length;
 +			}
-+			mutex_unlock(&msblk->block_cache_mutex);
 +			goto finish;
 +		} else {
 +			if (buffer) {
-+				memcpy(buffer, msblk->block_cache[i].data + offset, bytes);
++				memcpy(buffer, entry->data + offset, bytes);
 +				buffer = (char *) buffer + bytes;
 +			}
-+			block = msblk->block_cache[i].next_index;
-+			mutex_unlock(&msblk->block_cache_mutex);
++			block = entry->next_index;
++			squashfs_cache_put(msblk->block_cache, entry);
 +			length -= bytes;
 +			offset = 0;
 +		}
 +	}
 +
 +finish:
++	squashfs_cache_put(msblk->block_cache, entry);
 +	return return_length;
-+out:
-+	return 0;
 +}
 +
 +
@@ -580,98 +645,19 @@
 +
 +
 +SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk,
-+				struct squashfs_fragment_cache *fragment)
++				struct squashfs_cache_entry *fragment)
 +{
-+	mutex_lock(&msblk->fragment_mutex);
-+	fragment->locked --;
-+	if (fragment->locked == 0) {
-+		msblk->unused_frag_blks ++;
-+		smp_mb();
-+		wake_up(&msblk->fragment_wait_queue);
-+	}
-+	mutex_unlock(&msblk->fragment_mutex);
++	squashfs_cache_put(msblk->fragment_cache, fragment);
 +}
 +
 +
 +SQSH_EXTERN
-+struct squashfs_fragment_cache *get_cached_fragment(struct super_block *s,
++struct squashfs_cache_entry *get_cached_fragment(struct super_block *s,
 +				long long start_block, int length)
 +{
-+	int i, n;
 +	struct squashfs_sb_info *msblk = s->s_fs_info;
-+	struct squashfs_super_block *sblk = &msblk->sblk;
 +
-+	while (1) {
-+		mutex_lock(&msblk->fragment_mutex);
-+
-+		for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
-+				msblk->fragment[i].block != start_block; i++);
-+
-+		if (i == SQUASHFS_CACHED_FRAGMENTS) {
-+			if (msblk->unused_frag_blks == 0) {
-+				mutex_unlock(&msblk->fragment_mutex);
-+				wait_event(msblk->fragment_wait_queue, msblk->unused_frag_blks);
-+				continue;
-+			}
-+
-+			i = msblk->next_fragment;
-+			for (n = 0; n < SQUASHFS_CACHED_FRAGMENTS; n++) {
-+				if (msblk->fragment[i].locked == 0)
-+					break;
-+				i = (i + 1) % SQUASHFS_CACHED_FRAGMENTS;
-+			}
-+
-+			msblk->next_fragment = (msblk->next_fragment + 1) %
-+				SQUASHFS_CACHED_FRAGMENTS;
-+			
-+			if (msblk->fragment[i].data == NULL) {
-+				msblk->fragment[i].data = vmalloc(sblk->block_size);
-+				if (msblk->fragment[i].data == NULL) {
-+					ERROR("Failed to allocate fragment cache block\n");
-+					mutex_unlock(&msblk->fragment_mutex);
-+					goto out;
-+				}
-+			}
-+
-+			msblk->unused_frag_blks --;
-+			msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+			msblk->fragment[i].locked = 1;
-+			mutex_unlock(&msblk->fragment_mutex);
-+
-+			msblk->fragment[i].length = squashfs_read_data(s,
-+				msblk->fragment[i].data, start_block, length, NULL,
-+				sblk->block_size);
-+
-+			if (msblk->fragment[i].length == 0) {
-+				ERROR("Unable to read fragment cache block [%llx]\n", start_block);
-+				msblk->fragment[i].locked = 0;
-+				msblk->unused_frag_blks ++;
-+				smp_mb();
-+				wake_up(&msblk->fragment_wait_queue);
-+				goto out;
-+			}
-+
-+			mutex_lock(&msblk->fragment_mutex);
-+			msblk->fragment[i].block = start_block;
-+			TRACE("New fragment %d, start block %lld, locked %d\n",
-+				i, msblk->fragment[i].block, msblk->fragment[i].locked);
-+			mutex_unlock(&msblk->fragment_mutex);
-+			break;
-+		}
-+
-+		if (msblk->fragment[i].locked == 0)
-+			msblk->unused_frag_blks --;
-+		msblk->fragment[i].locked++;
-+		mutex_unlock(&msblk->fragment_mutex);
-+		TRACE("Got fragment %d, start block %lld, locked %d\n", i,
-+			msblk->fragment[i].block, msblk->fragment[i].locked);
-+		break;
-+	}
-+
-+	return &msblk->fragment[i];
-+
-+out:
-+	return NULL;
++	return squashfs_cache_get(s, msblk->fragment_cache, start_block, length);
 +}
 +
 +
@@ -720,30 +706,72 @@
 +out:
 +	return SQUASHFS_INVALID_BLK;
 +}
-+	
 +
-+static struct dentry *squashfs_get_parent(struct dentry *child)
++
++
++static struct dentry *squashfs_export_iget(struct super_block *s,
++	unsigned int inode_number)
 +{
-+	struct inode *i = child->d_inode;
-+	struct inode *parent = iget_locked(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode);
-+	struct dentry *rv;
++	squashfs_inode_t inode;
++	struct inode *i;
++	struct dentry *dentry;
 +
-+	TRACE("Entered squashfs_get_parent\n");
++	TRACE("Entered squashfs_export_iget\n");
 +
-+	if(parent == NULL) {
-+		rv = ERR_PTR(-EACCES);
-+		goto out;
++	inode = squashfs_inode_lookup(s, inode_number);
++	if(inode == SQUASHFS_INVALID_BLK) {
++		dentry = ERR_PTR(-ENOENT);
++		goto failure;
 +	}
 +
-+	rv = d_alloc_anon(parent);
-+	if(rv == NULL)
-+		rv = ERR_PTR(-ENOMEM);
++	i = squashfs_iget(s, inode, inode_number);
++	if(i == NULL) {
++		dentry = ERR_PTR(-EACCES);
++		goto failure;
++	}
 +
-+out:
-+	return rv;
++	dentry = d_alloc_anon(i);
++	if (dentry == NULL) {
++		iput(i);
++		dentry = ERR_PTR(-ENOMEM);
++	}
++
++failure:
++	return dentry;
 +}
 +
-+	
++
++static struct dentry *squashfs_fh_to_dentry(struct super_block *s,
++		struct fid *fid, int fh_len, int fh_type)
++{
++	if((fh_type != FILEID_INO32_GEN && fh_type != FILEID_INO32_GEN_PARENT) ||
++			fh_len < 2)
++		return NULL;
++
++	return squashfs_export_iget(s, fid->i32.ino);
++}
++
++
++static struct dentry *squashfs_fh_to_parent(struct super_block *s,
++		struct fid *fid, int fh_len, int fh_type)
++{
++	if(fh_type != FILEID_INO32_GEN_PARENT || fh_len < 4)
++		return NULL;
++
++	return squashfs_export_iget(s, fid->i32.parent_ino);
++}
++
++
++static struct dentry *squashfs_get_parent(struct dentry *child)
++{
++	struct inode *i = child->d_inode;
++
++	TRACE("Entered squashfs_get_parent\n");
++
++	return squashfs_export_iget(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode);
++}
++
++
 +SQSH_EXTERN struct inode *squashfs_iget(struct super_block *s,
 +				squashfs_inode_t inode, unsigned int inode_number)
 +{
@@ -1101,34 +1129,6 @@
 +}
 +
 +
-+static int readahead_metadata(struct super_block *s)
-+{
-+	struct squashfs_sb_info *msblk = s->s_fs_info;
-+	int i;
-+
-+	squashfs_cached_blks = SQUASHFS_CACHED_BLKS;
-+
-+	/* Init inode_table block pointer array */
-+	msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
-+					squashfs_cached_blks, GFP_KERNEL);
-+	if (msblk->block_cache == NULL) {
-+		ERROR("Failed to allocate block cache\n");
-+		goto failed;
-+	}
-+
-+	for (i = 0; i < squashfs_cached_blks; i++)
-+		msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+
-+	msblk->next_cache = 0;
-+	msblk->unused_cache_blks = squashfs_cached_blks;
-+
-+	return 1;
-+
-+failed:
-+	return 0;
-+}
-+
-+
 +static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
 +{
 +	struct squashfs_super_block *sblk = &msblk->sblk;
@@ -1167,7 +1167,6 @@
 +{
 +	struct squashfs_sb_info *msblk;
 +	struct squashfs_super_block *sblk;
-+	int i;
 +	char b[BDEVNAME_SIZE];
 +	struct inode *root;
 +
@@ -1192,13 +1191,8 @@
 +
 +	mutex_init(&msblk->read_data_mutex);
 +	mutex_init(&msblk->read_page_mutex);
-+	mutex_init(&msblk->block_cache_mutex);
-+	mutex_init(&msblk->fragment_mutex);
 +	mutex_init(&msblk->meta_index_mutex);
 +	
-+	init_waitqueue_head(&msblk->waitq);
-+	init_waitqueue_head(&msblk->fragment_wait_queue);
-+
 +	/* sblk->bytes_used is checked in squashfs_read_data to ensure reads are not
 + 	 * beyond filesystem end.  As we're using squashfs_read_data to read sblk here,
 + 	 * first set sblk->bytes_used to a useful value */
@@ -1265,7 +1259,9 @@
 +	s->s_flags |= MS_RDONLY;
 +	s->s_op = &squashfs_super_ops;
 +
-+	if (readahead_metadata(s) == 0)
++	msblk->block_cache = squashfs_cache_init("metadata", SQUASHFS_CACHED_BLKS,
++		SQUASHFS_METADATA_SIZE, 0);
++	if (msblk->block_cache == NULL)
 +		goto failed_mount;
 +
 +	/* Allocate read_page block */
@@ -1310,19 +1306,10 @@
 +	if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
 +		goto allocate_root;
 +
-+	msblk->fragment = kzalloc(sizeof(struct squashfs_fragment_cache) *
-+				SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL);
-+	if (msblk->fragment == NULL) {
-+		ERROR("Failed to allocate fragment block cache\n");
++	msblk->fragment_cache = squashfs_cache_init("fragment",
++		SQUASHFS_CACHED_FRAGMENTS, sblk->block_size, 1);
++	if (msblk->fragment_cache == NULL)
 +		goto failed_mount;
-+	}
-+
-+	for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
-+		msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+	}
-+
-+	msblk->next_fragment = 0;
-+	msblk->unused_frag_blks = SQUASHFS_CACHED_FRAGMENTS;
 +
 +	/* Allocate and read fragment index table */
 +	if (msblk->read_fragment_index_table(s) == 0)
@@ -1335,7 +1322,6 @@
 +	if (read_inode_lookup_table(s) == 0)
 +		goto failed_mount;
 +
-+	s->s_op = &squashfs_export_super_ops;
 +	s->s_export_op = &squashfs_export_ops;
 +
 +allocate_root:
@@ -1357,10 +1343,10 @@
 +failed_mount:
 +	kfree(msblk->inode_lookup_table);
 +	kfree(msblk->fragment_index);
-+	kfree(msblk->fragment);
++	squashfs_cache_delete(msblk->fragment_cache);
 +	kfree(msblk->uid);
 +	vfree(msblk->read_page);
-+	kfree(msblk->block_cache);
++	squashfs_cache_delete(msblk->block_cache);
 +	kfree(msblk->fragment_index_2);
 +	vfree(msblk->stream.workspace);
 +	kfree(s->s_fs_info);
@@ -1437,7 +1423,7 @@
 +}
 +
 +
-+struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
++static struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
 +{
 +	struct meta_index *meta = NULL;
 +	struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
@@ -1472,7 +1458,7 @@
 +}
 +
 +
-+struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
++static struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
 +{
 +	struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
 +	struct meta_index *meta = NULL;
@@ -1526,7 +1512,7 @@
 +}
 +
 +
-+void release_meta_index(struct inode *inode, struct meta_index *meta)
++static void release_meta_index(struct inode *inode, struct meta_index *meta)
 +{
 +	meta->locked = 0;
 +	smp_mb();
@@ -1712,7 +1698,7 @@
 +	int bytes;
 +	int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);
 + 	void *pageaddr;
-+	struct squashfs_fragment_cache *fragment = NULL;
++	struct squashfs_cache_entry *fragment = NULL;
 +	char *data_ptr = msblk->read_page;
 +	
 +	int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;
@@ -1761,10 +1747,11 @@
 +					SQUASHFS_I(inode)-> u.s1.fragment_start_block,
 +					SQUASHFS_I(inode)->u.s1.fragment_size);
 +
-+		if (fragment == NULL) {
++		if (fragment->error) {
 +			ERROR("Unable to read page, block %llx, size %x\n",
 +					SQUASHFS_I(inode)->u.s1.fragment_start_block,
 +					(int) SQUASHFS_I(inode)->u.s1.fragment_size);
++			release_cached_fragment(msblk, fragment);
 +			goto error_out;
 +		}
 +		bytes = i_size_read(inode) & (sblk->block_size - 1);
@@ -1838,7 +1825,7 @@
 +	TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
 +					i_count, (unsigned int) f_pos);
 +
-+	f_pos =- 3;
++	f_pos -= 3;
 +	if (f_pos == 0)
 +		goto finish;
 +
@@ -2163,19 +2150,10 @@
 +
 +static void squashfs_put_super(struct super_block *s)
 +{
-+	int i;
-+
 +	if (s->s_fs_info) {
 +		struct squashfs_sb_info *sbi = s->s_fs_info;
-+		if (sbi->block_cache)
-+			for (i = 0; i < squashfs_cached_blks; i++)
-+				if (sbi->block_cache[i].block != SQUASHFS_INVALID_BLK)
-+					vfree(sbi->block_cache[i].data);
-+		if (sbi->fragment)
-+			for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) 
-+				vfree(sbi->fragment[i].data);
-+		kfree(sbi->fragment);
-+		kfree(sbi->block_cache);
++		squashfs_cache_delete(sbi->block_cache);
++		squashfs_cache_delete(sbi->fragment_cache);
 +		vfree(sbi->read_page);
 +		kfree(sbi->uid);
 +		kfree(sbi->fragment_index);
@@ -2202,7 +2180,7 @@
 +	if (err)
 +		goto out;
 +
-+	printk(KERN_INFO "squashfs: version 3.3 (2007/10/31) "
++	printk(KERN_INFO "squashfs: version 3.4 (2008/08/26) "
 +		"Phillip Lougher\n");
 +
 +	err = register_filesystem(&squashfs_fs_type);
@@ -2238,7 +2216,7 @@
 +}
 +
 +
-+static void init_once(struct kmem_cache *cachep, void *foo)
++static void init_once(void *foo)
 +{
 +	struct squashfs_inode_info *ei = foo;
 +
@@ -2265,111 +2243,28 @@
 +
 +module_init(init_squashfs_fs);
 +module_exit(exit_squashfs_fs);
-+MODULE_DESCRIPTION("squashfs 3.2-r2-CVS, a compressed read-only filesystem");
++MODULE_DESCRIPTION("squashfs 3.4, a compressed read-only filesystem");
 +MODULE_AUTHOR("Phillip Lougher <phillip at lougher.demon.co.uk>");
 +MODULE_LICENSE("GPL");
-diff --git a/fs/squashfs/squashfs.h b/fs/squashfs/squashfs.h
-new file mode 100644
-index 0000000..ea7b6c3
---- /dev/null
-+++ b/fs/squashfs/squashfs.h
-@@ -0,0 +1,86 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip at lougher.demon.co.uk>
-+ *
-+ * 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs.h
-+ */
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#endif
-+
-+#ifdef SQUASHFS_TRACE
-+#define TRACE(s, args...)	printk(KERN_NOTICE "SQUASHFS: "s, ## args)
-+#else
-+#define TRACE(s, args...)	{}
-+#endif
-+
-+#define ERROR(s, args...)	printk(KERN_ERR "SQUASHFS error: "s, ## args)
-+
-+#define SERROR(s, args...)	do { \
-+				if (!silent) \
-+				printk(KERN_ERR "SQUASHFS error: "s, ## args);\
-+				} while(0)
-+
-+#define WARNING(s, args...)	printk(KERN_WARNING "SQUASHFS: "s, ## args)
-+
-+static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
-+{
-+	return list_entry(inode, struct squashfs_inode_info, vfs_inode);
-+}
-+
-+#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
-+#define SQSH_EXTERN
-+extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+				long long index, unsigned int length,
-+				long long *next_index, int srclength);
-+extern int squashfs_get_cached_block(struct super_block *s, void *buffer,
-+				long long block, unsigned int offset,
-+				int length, long long *next_block,
-+				unsigned int *next_offset);
-+extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+					squashfs_fragment_cache *fragment);
-+extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+					*s, long long start_block,
-+					int length);
-+extern struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number);
-+extern const struct address_space_operations squashfs_symlink_aops;
-+extern const struct address_space_operations squashfs_aops;
-+extern struct inode_operations squashfs_dir_inode_ops;
-+#else
-+#define SQSH_EXTERN static
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
-+{
-+	return 0;
-+}
-+#endif
+diff -x .gitignore -Nurp linux-2.6.27-rc4/fs/squashfs/Makefile linux-2.6.27-rc4-squashfs3.4/fs/squashfs/Makefile
+--- linux-2.6.27-rc4/fs/squashfs/Makefile	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.27-rc4-squashfs3.4/fs/squashfs/Makefile	2008-08-19 18:31:56.000000000 +0100
+@@ -0,0 +1,7 @@
++#
++# Makefile for the linux squashfs routines.
++#
 +
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+	return 0;
-+}
-+#endif
-diff --git a/fs/squashfs/squashfs2_0.c b/fs/squashfs/squashfs2_0.c
-new file mode 100644
-index 0000000..fa909c8
---- /dev/null
-+++ b/fs/squashfs/squashfs2_0.c
++obj-$(CONFIG_SQUASHFS) += squashfs.o
++squashfs-y += inode.o
++squashfs-y += squashfs2_0.o
+diff -x .gitignore -Nurp linux-2.6.27-rc4/fs/squashfs/squashfs2_0.c linux-2.6.27-rc4-squashfs3.4/fs/squashfs/squashfs2_0.c
+--- linux-2.6.27-rc4/fs/squashfs/squashfs2_0.c	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.27-rc4-squashfs3.4/fs/squashfs/squashfs2_0.c	2008-08-19 18:31:56.000000000 +0100
 @@ -0,0 +1,740 @@
 +/*
 + * Squashfs - a compressed read only filesystem for Linux
 + *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008
 + * Phillip Lougher <phillip at lougher.demon.co.uk>
 + *
 + * This program is free software; you can redistribute it and/or
@@ -3106,11 +3001,99 @@
 +
 +	return 1;
 +}
-diff --git a/include/linux/squashfs_fs.h b/include/linux/squashfs_fs.h
-new file mode 100644
-index 0000000..e60308e
---- /dev/null
-+++ b/include/linux/squashfs_fs.h
+diff -x .gitignore -Nurp linux-2.6.27-rc4/fs/squashfs/squashfs.h linux-2.6.27-rc4-squashfs3.4/fs/squashfs/squashfs.h
+--- linux-2.6.27-rc4/fs/squashfs/squashfs.h	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.27-rc4-squashfs3.4/fs/squashfs/squashfs.h	2008-08-19 18:31:56.000000000 +0100
+@@ -0,0 +1,86 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008
++ * Phillip Lougher <phillip at lougher.demon.co.uk>
++ *
++ * 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs.h
++ */
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++#endif
++
++#ifdef SQUASHFS_TRACE
++#define TRACE(s, args...)	printk(KERN_NOTICE "SQUASHFS: "s, ## args)
++#else
++#define TRACE(s, args...)	{}
++#endif
++
++#define ERROR(s, args...)	printk(KERN_ERR "SQUASHFS error: "s, ## args)
++
++#define SERROR(s, args...)	do { \
++				if (!silent) \
++				printk(KERN_ERR "SQUASHFS error: "s, ## args);\
++				} while(0)
++
++#define WARNING(s, args...)	printk(KERN_WARNING "SQUASHFS: "s, ## args)
++
++static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
++{
++	return list_entry(inode, struct squashfs_inode_info, vfs_inode);
++}
++
++#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
++#define SQSH_EXTERN
++extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
++				long long index, unsigned int length,
++				long long *next_index, int srclength);
++extern int squashfs_get_cached_block(struct super_block *s, void *buffer,
++				long long block, unsigned int offset,
++				int length, long long *next_block,
++				unsigned int *next_offset);
++extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
++					squashfs_cache_entry *fragment);
++extern struct squashfs_cache_entry *get_cached_fragment(struct super_block
++					*s, long long start_block,
++					int length);
++extern struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number);
++extern const struct address_space_operations squashfs_symlink_aops;
++extern const struct address_space_operations squashfs_aops;
++extern struct inode_operations squashfs_dir_inode_ops;
++#else
++#define SQSH_EXTERN static
++#endif
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
++#else
++static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
++{
++	return 0;
++}
++#endif
++
++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
++#else
++static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
++{
++	return 0;
++}
++#endif
+diff -x .gitignore -Nurp linux-2.6.27-rc4/include/linux/squashfs_fs.h linux-2.6.27-rc4-squashfs3.4/include/linux/squashfs_fs.h
+--- linux-2.6.27-rc4/include/linux/squashfs_fs.h	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.27-rc4-squashfs3.4/include/linux/squashfs_fs.h	2008-08-19 18:31:56.000000000 +0100
 @@ -0,0 +1,935 @@
 +#ifndef SQUASHFS_FS
 +#define SQUASHFS_FS
@@ -3118,7 +3101,7 @@
 +/*
 + * Squashfs
 + *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008
 + * Phillip Lougher <phillip at lougher.demon.co.uk>
 + *
 + * This program is free software; you can redistribute it and/or
@@ -3208,7 +3191,7 @@
 +						SQUASHFS_CHECK)
 +
 +#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
-+		duplicate_checking, exortable)	(noi | (nod << 1) | (check_data << 2) \
++		duplicate_checking, exportable)	(noi | (nod << 1) | (check_data << 2) \
 +		| (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
 +		(duplicate_checking << 6) | (exportable << 7))
 +
@@ -3468,7 +3451,7 @@
 +struct squashfs_fragment_entry {
 +	long long		start_block;
 +	unsigned int		size;
-+	unsigned int		pending;
++	unsigned int		unused;
 +} __attribute__ ((packed));
 +
 +extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
@@ -4047,18 +4030,16 @@
 +
 +#endif
 +#endif
-diff --git a/include/linux/squashfs_fs_i.h b/include/linux/squashfs_fs_i.h
-new file mode 100644
-index 0000000..76a3a5a
---- /dev/null
-+++ b/include/linux/squashfs_fs_i.h
+diff -x .gitignore -Nurp linux-2.6.27-rc4/include/linux/squashfs_fs_i.h linux-2.6.27-rc4-squashfs3.4/include/linux/squashfs_fs_i.h
+--- linux-2.6.27-rc4/include/linux/squashfs_fs_i.h	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.27-rc4-squashfs3.4/include/linux/squashfs_fs_i.h	2008-08-19 18:31:56.000000000 +0100
 @@ -0,0 +1,45 @@
 +#ifndef SQUASHFS_FS_I
 +#define SQUASHFS_FS_I
 +/*
 + * Squashfs
 + *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008
 + * Phillip Lougher <phillip at lougher.demon.co.uk>
 + *
 + * This program is free software; you can redistribute it and/or
@@ -4098,18 +4079,16 @@
 +	struct inode	vfs_inode;
 +};
 +#endif
-diff --git a/include/linux/squashfs_fs_sb.h b/include/linux/squashfs_fs_sb.h
-new file mode 100644
-index 0000000..e5fa802
---- /dev/null
-+++ b/include/linux/squashfs_fs_sb.h
-@@ -0,0 +1,76 @@
+diff -x .gitignore -Nurp linux-2.6.27-rc4/include/linux/squashfs_fs_sb.h linux-2.6.27-rc4-squashfs3.4/include/linux/squashfs_fs_sb.h
+--- linux-2.6.27-rc4/include/linux/squashfs_fs_sb.h	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.27-rc4-squashfs3.4/include/linux/squashfs_fs_sb.h	2008-08-19 18:31:56.000000000 +0100
+@@ -0,0 +1,79 @@
 +#ifndef SQUASHFS_FS_SB
 +#define SQUASHFS_FS_SB
 +/*
 + * Squashfs
 + *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008
 + * Phillip Lougher <phillip at lougher.demon.co.uk>
 + *
 + * This program is free software; you can redistribute it and/or
@@ -4131,18 +4110,29 @@
 +
 +#include <linux/squashfs_fs.h>
 +
-+struct squashfs_cache {
++struct squashfs_cache_entry {
 +	long long	block;
 +	int		length;
++	int		locked;
 +	long long	next_index;
++	char		pending;
++	char		error;
++	int		waiting;
++	wait_queue_head_t	wait_queue;
 +	char		*data;
 +};
 +
-+struct squashfs_fragment_cache {
-+	long long	block;
-+	int		length;
-+	unsigned int	locked;
-+	char		*data;
++struct squashfs_cache {
++	char *name;
++	int entries;
++	int block_size;
++	int next_blk;
++	int waiting;
++	int unused_blks;
++	int use_vmalloc;
++	spinlock_t lock;
++	wait_queue_head_t wait_queue;
++	struct squashfs_cache_entry entry[0];
 +};
 +
 +struct squashfs_sb_info {
@@ -4151,9 +4141,7 @@
 +	int			devblksize_log2;
 +	int			swap;
 +	struct squashfs_cache	*block_cache;
-+	struct squashfs_fragment_cache	*fragment;
-+	int			next_cache;
-+	int			next_fragment;
++	struct squashfs_cache	*fragment_cache;
 +	int			next_meta_index;
 +	unsigned int		*uid;
 +	unsigned int		*guid;
@@ -4162,16 +4150,10 @@
 +	char			*read_page;
 +	struct mutex		read_data_mutex;
 +	struct mutex		read_page_mutex;
-+	struct mutex		block_cache_mutex;
-+	struct mutex		fragment_mutex;
 +	struct mutex		meta_index_mutex;
-+	wait_queue_head_t	waitq;
-+	wait_queue_head_t	fragment_wait_queue;
 +	struct meta_index	*meta_index;
 +	z_stream		stream;
 +	long long		*inode_lookup_table;
-+	int			unused_cache_blks;
-+	int			unused_frag_blks;
 +	int			(*read_inode)(struct inode *i,  squashfs_inode_t \
 +				inode);
 +	long long		(*read_blocklist)(struct inode *inode, int \
@@ -4180,10 +4162,9 @@
 +	int			(*read_fragment_index_table)(struct super_block *s);
 +};
 +#endif
-diff --git a/init/do_mounts_rd.c b/init/do_mounts_rd.c
-index 3ac5904..0ddd43c 100644
---- a/init/do_mounts_rd.c
-+++ b/init/do_mounts_rd.c
+diff -x .gitignore -Nurp linux-2.6.27-rc4/init/do_mounts_rd.c linux-2.6.27-rc4-squashfs3.4/init/do_mounts_rd.c
+--- linux-2.6.27-rc4/init/do_mounts_rd.c	2008-08-11 15:20:55.000000000 +0100
++++ linux-2.6.27-rc4-squashfs3.4/init/do_mounts_rd.c	2008-08-19 18:31:56.000000000 +0100
 @@ -5,6 +5,7 @@
  #include <linux/ext2_fs.h>
  #include <linux/romfs_fs.h>
@@ -4192,7 +4173,7 @@
  #include <linux/initrd.h>
  #include <linux/string.h>
  
-@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, int out_fd);
+@@ -37,6 +38,7 @@ static int __init crd_load(int in_fd, in
   * numbers could not be found.
   *
   * We currently check for the following magic numbers:
@@ -4200,7 +4181,7 @@
   * 	minix
   * 	ext2
   *	romfs
-@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start_block)
+@@ -51,6 +53,7 @@ identify_ramdisk_image(int fd, int start
  	struct ext2_super_block *ext2sb;
  	struct romfs_super_block *romfsb;
  	struct cramfs_super *cramfsb;
@@ -4208,7 +4189,7 @@
  	int nblocks = -1;
  	unsigned char *buf;
  
-@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start_block)
+@@ -62,6 +65,7 @@ identify_ramdisk_image(int fd, int start
  	ext2sb = (struct ext2_super_block *) buf;
  	romfsb = (struct romfs_super_block *) buf;
  	cramfsb = (struct cramfs_super *) buf;
@@ -4216,7 +4197,7 @@
  	memset(buf, 0xe5, size);
  
  	/*
-@@ -101,6 +105,18 @@ identify_ramdisk_image(int fd, int start_block)
+@@ -99,6 +103,18 @@ identify_ramdisk_image(int fd, int start
  		goto done;
  	}
  

linux-2.6-upstream-reverts.patch:

Index: linux-2.6-upstream-reverts.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/linux-2.6-upstream-reverts.patch,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- linux-2.6-upstream-reverts.patch	21 Oct 2008 17:01:52 -0000	1.12
+++ linux-2.6-upstream-reverts.patch	30 Oct 2008 04:41:12 -0000	1.13
@@ -1,300 +1,3 @@
-# place patches here that we get from other places (mainly wireless)
-# patches will be applied with 'patch -R'
-From jejb at kernel.org  Wed Jul 30 14:15:36 2008
-From: Pavel Roskin <proski at gnu.org>
-Date: Wed, 30 Jul 2008 18:20:14 GMT
-Subject: ath5k: don't enable MSI, we cannot handle it yet
-To: jejb at kernel.org, stable at kernel.org
-Message-ID: <200807301820.m6UIKELK025900 at hera.kernel.org>
-
-From: Pavel Roskin <proski at gnu.org>
-
-commit 256b152b005e319f985f50f2a910a75ba0def74f upstream
-
-MSI is a nice thing, but we cannot enable it without changing the
-interrupt handler.  If we do it, we break MSI capable hardware,
-specifically AR5006 chipset.
-
-Signed-off-by: Pavel Roskin <proski at gnu.org>
-Acked-by: Nick Kossifidis <mickflemm at gmail.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
-
----
- drivers/net/wireless/ath5k/base.c |    5 -----
- 1 file changed, 5 deletions(-)
-
---- a/drivers/net/wireless/ath5k/base.c
-+++ b/drivers/net/wireless/ath5k/base.c
-@@ -487,9 +487,6 @@ ath5k_pci_probe(struct pci_dev *pdev,
- 	/* Set private data */
- 	pci_set_drvdata(pdev, hw);
- 
--	/* Enable msi for devices that support it */
--	pci_enable_msi(pdev);
--
- 	/* Setup interrupt handler */
- 	ret = request_irq(pdev->irq, ath5k_intr, IRQF_SHARED, "ath", sc);
- 	if (ret) {
-@@ -567,7 +564,6 @@ err_ah:
- err_irq:
- 	free_irq(pdev->irq, sc);
- err_free:
--	pci_disable_msi(pdev);
- 	ieee80211_free_hw(hw);
- err_map:
- 	pci_iounmap(pdev, mem);
-@@ -589,7 +585,6 @@ ath5k_pci_remove(struct pci_dev *pdev)
- 	ath5k_detach(pdev, hw);
- 	ath5k_hw_detach(sc->ah);
- 	free_irq(pdev->irq, sc);
--	pci_disable_msi(pdev);
- 	pci_iounmap(pdev, sc->iobase);
- 	pci_release_region(pdev, 0);
- 	pci_disable_device(pdev);
-From jejb at kernel.org  Wed Jul 30 14:15:03 2008
-From: Julia Lawall <julia at diku.dk>
-Date: Wed, 30 Jul 2008 18:20:12 GMT
-Subject: b43legacy: Release mutex in error handling code
-To: jejb at kernel.org, stable at kernel.org
-Message-ID: <200807301820.m6UIKCFB025870 at hera.kernel.org>
-
-From: Julia Lawall <julia at diku.dk>
-
-commit 4104863fb4a724723d1d5f3cba9d3c5084087e45 upstream
-
-The mutex is released on a successful return, so it would seem that it
-should be released on an error return as well.
-
-The semantic patch finds this problem is as follows:
-(http://www.emn.fr/x-info/coccinelle/)
-
-// <smpl>
-@@
-expression l;
-@@
-
-mutex_lock(l);
-.. when != mutex_unlock(l)
-    when any
-    when strict
-(
-if (...) { ... when != mutex_unlock(l)
-+   mutex_unlock(l);
-    return ...;
-}
-|
-mutex_unlock(l);
-)
-// </smpl>
-
-Signed-off-by: Julia Lawall <julia at diku.dk>
-Signed-off-by: Michael Buesch <mb at bu3sch.de>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
-
----
- drivers/net/wireless/b43legacy/main.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/wireless/b43legacy/main.c
-+++ b/drivers/net/wireless/b43legacy/main.c
-@@ -3862,10 +3862,10 @@ static int b43legacy_resume(struct ssb_d
- 			goto out;
- 		}
- 	}
--	mutex_unlock(&wl->mutex);
- 
- 	b43legacydbg(wl, "Device resumed.\n");
- out:
-+	mutex_unlock(&wl->mutex);
- 	return err;
- }
- 
-From stable-bounces at linux.kernel.org Tue Aug  5 21:22:47 2008
-From: Larry Finger <Larry.Finger at lwfinger.net>
-Date: Tue, 05 Aug 2008 23:20:56 -0500
-Subject: [stable] [PATCH] rtl8187: Fix lockups due to concurrent access to config routine
-To: stable at kernel.org
-Message-ID: <489926a8.Tmk8qWQZeTkY9DVD%Larry.Finger at lwfinger.net>
-
-From: Larry Finger <Larry.Finger at lwfinger.net>
-
-With the rtl8187 driver, the config routine is not protected against
-access before a previous call has completed. When this happens, the
-TX loopback that is needed to change channels may cause the chip to
-be locked with a reset needed to restore communications. This patch
-entered mainline as commit 7dcdd073bf78bb6958bbc12a1a47754a0f3c4721.
-
-The problem was found by Herton Ronaldo Krzesinski <herton at mandriva.com.br>,
-who also suggested this type of fix.
-
-Signed-off-by: Larry Finger <Larry.Finger at lwfinger.net>
-Acked-by: Herton Ronaldo Krzesinski <herton at mandriva.com.br>
-Acked-by: Hin-Tak Leung <htl10 at users.sourceforge.net>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
-
-
----
- drivers/net/wireless/rtl8187.h     |    4 ++++
- drivers/net/wireless/rtl8187_dev.c |    3 +++
- 2 files changed, 7 insertions(+)
-
---- a/drivers/net/wireless/rtl8187_dev.c
-+++ b/drivers/net/wireless/rtl8187_dev.c
-@@ -580,6 +580,7 @@ static int rtl8187_config(struct ieee802
- 	struct rtl8187_priv *priv = dev->priv;
- 	u32 reg;
- 
-+	mutex_lock(&priv->conf_mutex);
- 	reg = rtl818x_ioread32(priv, &priv->map->TX_CONF);
- 	/* Enable TX loopback on MAC level to avoid TX during channel
- 	 * changes, as this has be seen to causes problems and the
-@@ -610,6 +611,7 @@ static int rtl8187_config(struct ieee802
- 	rtl818x_iowrite16(priv, &priv->map->ATIMTR_INTERVAL, 100);
- 	rtl818x_iowrite16(priv, &priv->map->BEACON_INTERVAL, 100);
- 	rtl818x_iowrite16(priv, &priv->map->BEACON_INTERVAL_TIME, 100);
-+	mutex_unlock(&priv->conf_mutex);
- 	return 0;
- }
- 
-@@ -814,6 +816,7 @@ static int __devinit rtl8187_probe(struc
- 		printk(KERN_ERR "rtl8187: Cannot register device\n");
- 		goto err_free_dev;
- 	}
-+	mutex_init(&priv->conf_mutex);
- 
- 	printk(KERN_INFO "%s: hwaddr %s, rtl8187 V%d + %s\n",
- 	       wiphy_name(dev->wiphy), print_mac(mac, dev->wiphy->perm_addr),
---- a/drivers/net/wireless/rtl8187.h
-+++ b/drivers/net/wireless/rtl8187.h
-@@ -67,6 +67,10 @@ struct rtl8187_priv {
- 	const struct rtl818x_rf_ops *rf;
- 	struct ieee80211_vif *vif;
- 	int mode;
-+	/* The mutex protects the TX loopback state.
-+	 * Any attempt to set channels concurrently locks the device.
-+	 */
-+	struct mutex conf_mutex;
- 
- 	/* rtl8187 specific */
- 	struct ieee80211_channel channels[14];
-From 8e260c22238dd8b57aefb1f5e4bd114486a9c17d Mon Sep 17 00:00:00 2001
-From: Ivo van Doorn <ivdoorn at gmail.com>
-Date: Fri, 4 Jul 2008 13:41:31 +0200
-Subject: rt2x00: Use ieee80211_hw->workqueue again
-
-From: Ivo van Doorn <ivdoorn at gmail.com>
-
-commit 8e260c22238dd8b57aefb1f5e4bd114486a9c17d upstream
-
-Remove the rt2x00 singlethreaded workqueue and move
-the link tuner and packet filter scheduled work to
-the ieee80211_hw->workqueue again.
-The only exception is the interface scheduled work
-handler which uses the mac80211 interface iterator
-under the RTNL lock. This work needs to be handled
-on the kernel workqueue to prevent lockdep issues.
-
-Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
-
----
- drivers/net/wireless/rt2x00/rt2x00.h    |    4 +++-
- drivers/net/wireless/rt2x00/rt2x00dev.c |   17 +++--------------
- drivers/net/wireless/rt2x00/rt2x00mac.c |    4 ++--
- 3 files changed, 8 insertions(+), 17 deletions(-)
-
---- a/drivers/net/wireless/rt2x00/rt2x00dev.c
-+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
-@@ -75,7 +75,7 @@ static void rt2x00lib_start_link_tuner(s
- 
- 	rt2x00lib_reset_link_tuner(rt2x00dev);
- 
--	queue_delayed_work(rt2x00dev->workqueue,
-+	queue_delayed_work(rt2x00dev->hw->workqueue,
- 			   &rt2x00dev->link.work, LINK_TUNE_INTERVAL);
- }
- 
-@@ -390,7 +390,7 @@ static void rt2x00lib_link_tuner(struct 
- 	 * Increase tuner counter, and reschedule the next link tuner run.
- 	 */
- 	rt2x00dev->link.count++;
--	queue_delayed_work(rt2x00dev->workqueue,
-+	queue_delayed_work(rt2x00dev->hw->workqueue,
- 			   &rt2x00dev->link.work, LINK_TUNE_INTERVAL);
- }
- 
-@@ -488,7 +488,7 @@ void rt2x00lib_beacondone(struct rt2x00_
- 						   rt2x00lib_beacondone_iter,
- 						   rt2x00dev);
- 
--	queue_work(rt2x00dev->workqueue, &rt2x00dev->intf_work);
-+	schedule_work(&rt2x00dev->intf_work);
- }
- EXPORT_SYMBOL_GPL(rt2x00lib_beacondone);
- 
-@@ -1131,10 +1131,6 @@ int rt2x00lib_probe_dev(struct rt2x00_de
- 	/*
- 	 * Initialize configuration work.
- 	 */
--	rt2x00dev->workqueue = create_singlethread_workqueue("rt2x00lib");
--	if (!rt2x00dev->workqueue)
--		goto exit;
--
- 	INIT_WORK(&rt2x00dev->intf_work, rt2x00lib_intf_scheduled);
- 	INIT_WORK(&rt2x00dev->filter_work, rt2x00lib_packetfilter_scheduled);
- 	INIT_DELAYED_WORK(&rt2x00dev->link.work, rt2x00lib_link_tuner);
-@@ -1195,13 +1191,6 @@ void rt2x00lib_remove_dev(struct rt2x00_
- 	rt2x00leds_unregister(rt2x00dev);
- 
- 	/*
--	 * Stop all queued work. Note that most tasks will already be halted
--	 * during rt2x00lib_disable_radio() and rt2x00lib_uninitialize().
--	 */
--	flush_workqueue(rt2x00dev->workqueue);
--	destroy_workqueue(rt2x00dev->workqueue);
--
--	/*
- 	 * Free ieee80211_hw memory.
- 	 */
- 	rt2x00lib_remove_hw(rt2x00dev);
---- a/drivers/net/wireless/rt2x00/rt2x00.h
-+++ b/drivers/net/wireless/rt2x00/rt2x00.h
-@@ -820,8 +820,10 @@ struct rt2x00_dev {
- 
- 	/*
- 	 * Scheduled work.
-+	 * NOTE: intf_work will use ieee80211_iterate_active_interfaces()
-+	 * which means it cannot be placed on the hw->workqueue
-+	 * due to RTNL locking requirements.
- 	 */
--	struct workqueue_struct *workqueue;
- 	struct work_struct intf_work;
- 	struct work_struct filter_work;
- 
---- a/drivers/net/wireless/rt2x00/rt2x00mac.c
-+++ b/drivers/net/wireless/rt2x00/rt2x00mac.c
-@@ -428,7 +428,7 @@ void rt2x00mac_configure_filter(struct i
- 	if (!test_bit(DRIVER_REQUIRE_SCHEDULED, &rt2x00dev->flags))
- 		rt2x00dev->ops->lib->config_filter(rt2x00dev, *total_flags);
- 	else
--		queue_work(rt2x00dev->workqueue, &rt2x00dev->filter_work);
-+		queue_work(rt2x00dev->hw->workqueue, &rt2x00dev->filter_work);
- }
- EXPORT_SYMBOL_GPL(rt2x00mac_configure_filter);
- 
-@@ -509,7 +509,7 @@ void rt2x00mac_bss_info_changed(struct i
- 	memcpy(&intf->conf, bss_conf, sizeof(*bss_conf));
- 	if (delayed) {
- 		intf->delayed_flags |= delayed;
--		queue_work(rt2x00dev->workqueue, &rt2x00dev->intf_work);
-+		schedule_work(&rt2x00dev->intf_work);
- 	}
- 	spin_unlock(&intf->lock);
- }
 From 4b40893918203ee1a1f6a114316c2a19c072e9bd Mon Sep 17 00:00:00 2001
 From: Matthias Hopf <mhopf at suse.de>
 Date: Sat, 18 Oct 2008 07:18:05 +1000
@@ -317,11 +20,11 @@
 Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
 
 ---
- drivers/char/drm/i915_dma.c |    2 +-
+ drivers/gpu/drm/i915/i915_dma.c |    2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
---- a/drivers/char/drm/i915_dma.c
-+++ b/drivers/char/drm/i915_dma.c
+--- a/drivers/gpu/drm/i915/i915_dma.c
++++ b/drivers/gpu/drm/i915/i915_dma.c
 @@ -836,7 +836,7 @@ struct drm_ioctl_desc i915_ioctls[] = {
  	DRM_IOCTL_DEF(DRM_I915_SET_VBLANK_PIPE,  i915_vblank_pipe_set, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY ),
  	DRM_IOCTL_DEF(DRM_I915_GET_VBLANK_PIPE,  i915_vblank_pipe_get, DRM_AUTH ),
@@ -331,3 +34,250 @@
  };
  
  int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls);
+From sandeen at redhat.com  Thu Oct 23 13:13:44 2008
+From: Eric Sandeen <sandeen at redhat.com>
+Date: Wed, 22 Oct 2008 10:11:52 -0500
+Subject: ext[234]: Avoid printk floods in the face of directory corruption (CVE-2008-3528)
+To: stable at kernel.org
+Cc: ext4 development <linux-ext4 at vger.kernel.org>
+Message-ID: <48FF42B8.3030606 at redhat.com>
+
+From: Eric Sandeen <sandeen at redhat.com>
+
+This is a trivial backport of the following upstream commits:
+
+- bd39597cbd42a784105a04010100e27267481c67 (ext2)
+- cdbf6dba28e8e6268c8420857696309470009fd9 (ext3)
+- 9d9f177572d9e4eba0f2e18523b44f90dd51fe74 (ext4)
+
+This addresses CVE-2008-3528
+
+ext[234]: Avoid printk floods in the face of directory corruption
+
+Note: some people thinks this represents a security bug, since it
+might make the system go away while it is printing a large number of
+console messages, especially if a serial console is involved.  Hence,
+it has been assigned CVE-2008-3528, but it requires that the attacker
+either has physical access to your machine to insert a USB disk with a
+corrupted filesystem image (at which point why not just hit the power
+button), or is otherwise able to convince the system administrator to
+mount an arbitrary filesystem image (at which point why not just
+include a setuid shell or world-writable hard disk device file or some
+such).  Me, I think they're just being silly. --tytso
+
+Signed-off-by: Eric Sandeen <sandeen at redhat.com>
+Signed-off-by: "Theodore Ts'o" <tytso at mit.edu>
+Cc: linux-ext4 at vger.kernel.org
+Cc: Eugene Teo <eugeneteo at kernel.sg>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+
+---
+ fs/ext2/dir.c |   60 +++++++++++++++++++++++++++++++++-------------------------
+ fs/ext3/dir.c |   10 ++++++---
+ fs/ext4/dir.c |   11 +++++++---
+ 3 files changed, 50 insertions(+), 31 deletions(-)
+
+--- a/fs/ext2/dir.c
++++ b/fs/ext2/dir.c
+@@ -103,7 +103,7 @@ static int ext2_commit_chunk(struct page
+ 	return err;
+ }
+ 
+-static void ext2_check_page(struct page *page)
++static void ext2_check_page(struct page *page, int quiet)
+ {
+ 	struct inode *dir = page->mapping->host;
+ 	struct super_block *sb = dir->i_sb;
+@@ -146,10 +146,10 @@ out:
+ 	/* Too bad, we had an error */
+ 
+ Ebadsize:
+-	ext2_error(sb, "ext2_check_page",
+-		"size of directory #%lu is not a multiple of chunk size",
+-		dir->i_ino
+-	);
++	if (!quiet)
++		ext2_error(sb, __func__,
++			"size of directory #%lu is not a multiple "
++			"of chunk size", dir->i_ino);
+ 	goto fail;
+ Eshort:
+ 	error = "rec_len is smaller than minimal";
+@@ -166,32 +166,36 @@ Espan:
+ Einumber:
+ 	error = "inode out of bounds";
+ bad_entry:
+-	ext2_error (sb, "ext2_check_page", "bad entry in directory #%lu: %s - "
+-		"offset=%lu, inode=%lu, rec_len=%d, name_len=%d",
+-		dir->i_ino, error, (page->index<<PAGE_CACHE_SHIFT)+offs,
+-		(unsigned long) le32_to_cpu(p->inode),
+-		rec_len, p->name_len);
++	if (!quiet)
++		ext2_error(sb, __func__, "bad entry in directory #%lu: : %s - "
++			"offset=%lu, inode=%lu, rec_len=%d, name_len=%d",
++			dir->i_ino, error, (page->index<<PAGE_CACHE_SHIFT)+offs,
++			(unsigned long) le32_to_cpu(p->inode),
++			rec_len, p->name_len);
+ 	goto fail;
+ Eend:
+-	p = (ext2_dirent *)(kaddr + offs);
+-	ext2_error (sb, "ext2_check_page",
+-		"entry in directory #%lu spans the page boundary"
+-		"offset=%lu, inode=%lu",
+-		dir->i_ino, (page->index<<PAGE_CACHE_SHIFT)+offs,
+-		(unsigned long) le32_to_cpu(p->inode));
++	if (!quiet) {
++		p = (ext2_dirent *)(kaddr + offs);
++		ext2_error(sb, "ext2_check_page",
++			"entry in directory #%lu spans the page boundary"
++			"offset=%lu, inode=%lu",
++			dir->i_ino, (page->index<<PAGE_CACHE_SHIFT)+offs,
++			(unsigned long) le32_to_cpu(p->inode));
++	}
+ fail:
+ 	SetPageChecked(page);
+ 	SetPageError(page);
+ }
+ 
+-static struct page * ext2_get_page(struct inode *dir, unsigned long n)
++static struct page * ext2_get_page(struct inode *dir, unsigned long n,
++				   int quiet)
+ {
+ 	struct address_space *mapping = dir->i_mapping;
+ 	struct page *page = read_mapping_page(mapping, n, NULL);
+ 	if (!IS_ERR(page)) {
+ 		kmap(page);
+ 		if (!PageChecked(page))
+-			ext2_check_page(page);
++			ext2_check_page(page, quiet);
+ 		if (PageError(page))
+ 			goto fail;
+ 	}
+@@ -292,7 +296,7 @@ ext2_readdir (struct file * filp, void *
+ 	for ( ; n < npages; n++, offset = 0) {
+ 		char *kaddr, *limit;
+ 		ext2_dirent *de;
+-		struct page *page = ext2_get_page(inode, n);
++		struct page *page = ext2_get_page(inode, n, 0);
+ 
+ 		if (IS_ERR(page)) {
+ 			ext2_error(sb, __func__,
+@@ -361,6 +365,7 @@ struct ext2_dir_entry_2 * ext2_find_entr
+ 	struct page *page = NULL;
+ 	struct ext2_inode_info *ei = EXT2_I(dir);
+ 	ext2_dirent * de;
++	int dir_has_error = 0;
+ 
+ 	if (npages == 0)
+ 		goto out;
+@@ -374,7 +379,7 @@ struct ext2_dir_entry_2 * ext2_find_entr
+ 	n = start;
+ 	do {
+ 		char *kaddr;
+-		page = ext2_get_page(dir, n);
++		page = ext2_get_page(dir, n, dir_has_error);
+ 		if (!IS_ERR(page)) {
+ 			kaddr = page_address(page);
+ 			de = (ext2_dirent *) kaddr;
+@@ -391,7 +396,9 @@ struct ext2_dir_entry_2 * ext2_find_entr
+ 				de = ext2_next_entry(de);
+ 			}
+ 			ext2_put_page(page);
+-		}
++		} else
++			dir_has_error = 1;
++
+ 		if (++n >= npages)
+ 			n = 0;
+ 		/* next page is past the blocks we've got */
+@@ -414,7 +421,7 @@ found:
+ 
+ struct ext2_dir_entry_2 * ext2_dotdot (struct inode *dir, struct page **p)
+ {
+-	struct page *page = ext2_get_page(dir, 0);
++	struct page *page = ext2_get_page(dir, 0, 0);
+ 	ext2_dirent *de = NULL;
+ 
+ 	if (!IS_ERR(page)) {
+@@ -487,7 +494,7 @@ int ext2_add_link (struct dentry *dentry
+ 	for (n = 0; n <= npages; n++) {
+ 		char *dir_end;
+ 
+-		page = ext2_get_page(dir, n);
++		page = ext2_get_page(dir, n, 0);
+ 		err = PTR_ERR(page);
+ 		if (IS_ERR(page))
+ 			goto out;
+@@ -655,14 +662,17 @@ int ext2_empty_dir (struct inode * inode
+ {
+ 	struct page *page = NULL;
+ 	unsigned long i, npages = dir_pages(inode);
++	int dir_has_error = 0;
+ 
+ 	for (i = 0; i < npages; i++) {
+ 		char *kaddr;
+ 		ext2_dirent * de;
+-		page = ext2_get_page(inode, i);
++		page = ext2_get_page(inode, i, dir_has_error);
+ 
+-		if (IS_ERR(page))
++		if (IS_ERR(page)) {
++			dir_has_error = 1;
+ 			continue;
++		}
+ 
+ 		kaddr = page_address(page);
+ 		de = (ext2_dirent *)kaddr;
+--- a/fs/ext3/dir.c
++++ b/fs/ext3/dir.c
+@@ -102,6 +102,7 @@ static int ext3_readdir(struct file * fi
+ 	int err;
+ 	struct inode *inode = filp->f_path.dentry->d_inode;
+ 	int ret = 0;
++	int dir_has_error = 0;
+ 
+ 	sb = inode->i_sb;
+ 
+@@ -148,9 +149,12 @@ static int ext3_readdir(struct file * fi
+ 		 * of recovering data when there's a bad sector
+ 		 */
+ 		if (!bh) {
+-			ext3_error (sb, "ext3_readdir",
+-				"directory #%lu contains a hole at offset %lu",
+-				inode->i_ino, (unsigned long)filp->f_pos);
++			if (!dir_has_error) {
++				ext3_error(sb, __func__, "directory #%lu "
++					"contains a hole at offset %lld",
++					inode->i_ino, filp->f_pos);
++				dir_has_error = 1;
++			}
+ 			/* corrupt size?  Maybe no more blocks to read */
+ 			if (filp->f_pos > inode->i_blocks << 9)
+ 				break;
+--- a/fs/ext4/dir.c
++++ b/fs/ext4/dir.c
+@@ -102,6 +102,7 @@ static int ext4_readdir(struct file * fi
+ 	int err;
+ 	struct inode *inode = filp->f_path.dentry->d_inode;
+ 	int ret = 0;
++	int dir_has_error = 0;
+ 
+ 	sb = inode->i_sb;
+ 
+@@ -148,9 +149,13 @@ static int ext4_readdir(struct file * fi
+ 		 * of recovering data when there's a bad sector
+ 		 */
+ 		if (!bh) {
+-			ext4_error (sb, "ext4_readdir",
+-				"directory #%lu contains a hole at offset %lu",
+-				inode->i_ino, (unsigned long)filp->f_pos);
++			if (!dir_has_error) {
++				ext4_error(sb, __func__, "directory #%lu "
++					   "contains a hole at offset %Lu",
++					   inode->i_ino,
++					   (unsigned long long) filp->f_pos);
++				dir_has_error = 1;
++			}
+ 			/* corrupt size?  Maybe no more blocks to read */
+ 			if (filp->f_pos > inode->i_blocks << 9)
+ 				break;

linux-2.6-usb-ehci-hcd-respect-nousb.patch:

Index: linux-2.6-usb-ehci-hcd-respect-nousb.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/linux-2.6-usb-ehci-hcd-respect-nousb.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-usb-ehci-hcd-respect-nousb.patch	23 Jan 2008 19:26:34 -0000	1.1
+++ linux-2.6-usb-ehci-hcd-respect-nousb.patch	30 Oct 2008 04:41:12 -0000	1.2
@@ -15,6 +15,6 @@
 +	if (usb_disabled())
 +		return -ENODEV;
 +
- 	pr_debug("%s: block sizes: qh %Zd qtd %Zd itd %Zd sitd %Zd\n",
- 		 hcd_name,
- 		 sizeof(struct ehci_qh), sizeof(struct ehci_qtd),
+ 	set_bit(USB_EHCI_LOADED, &usb_hcds_loaded);
+ 	if (test_bit(USB_UHCI_LOADED, &usb_hcds_loaded) ||
+ 			test_bit(USB_OHCI_LOADED, &usb_hcds_loaded))

linux-2.6-utrace.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.80 -r 1.81 linux-2.6-utrace.patch
Index: linux-2.6-utrace.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/linux-2.6-utrace.patch,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -r1.80 -r1.81
--- linux-2.6-utrace.patch	15 Oct 2008 05:20:02 -0000	1.80
+++ linux-2.6-utrace.patch	30 Oct 2008 04:41:12 -0000	1.81
@@ -1,20 +1,19 @@
----
- Documentation/DocBook/Makefile    |    2 
+ Documentation/DocBook/Makefile    |    2 +-
  Documentation/DocBook/utrace.tmpl |  566 ++++++++
- fs/proc/array.c                   |    3 
- include/linux/ptrace.h            |   21 
- include/linux/sched.h             |    6 
- include/linux/tracehook.h         |   68 
+ fs/proc/array.c                   |    3 +
+ include/linux/ptrace.h            |   21 +
+ include/linux/sched.h             |    6 +
+ include/linux/tracehook.h         |   68 +-
  include/linux/utrace.h            |  707 ++++++++++
- init/Kconfig                      |   26 
- kernel/Makefile                   |    1 
- kernel/ptrace.c                   |  612 ++++++++
- kernel/signal.c                   |   14 
- kernel/utrace.c                   | 2609 ++++++++++++++++++++++++++++++++++++++
- 12 files changed, 4627 insertions(+), 8 deletions(-)
+ init/Kconfig                      |   26 +
+ kernel/Makefile                   |    1 +
+ kernel/ptrace.c                   |  612 +++++++++-
+ kernel/signal.c                   |   14 +-
+ kernel/utrace.c                   | 2586 +++++++++++++++++++++++++++++++++++++
+ 12 files changed, 4604 insertions(+), 8 deletions(-)
 
-Index: b/Documentation/DocBook/Makefile
-===================================================================
+diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile
+index 1615350..92ca631 100644  
 --- a/Documentation/DocBook/Makefile
 +++ b/Documentation/DocBook/Makefile
 @@ -7,7 +7,7 @@
@@ -26,8 +25,9 @@
  	    procfs-guide.xml writing_usb_driver.xml networking.xml \
  	    kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \
  	    gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
-Index: b/Documentation/DocBook/utrace.tmpl
-===================================================================
+diff --git a/Documentation/DocBook/utrace.tmpl b/Documentation/DocBook/utrace.tmpl
+new file mode 100644
+index ...1c37104 100644  
 --- /dev/null
 +++ b/Documentation/DocBook/utrace.tmpl
 @@ -0,0 +1,566 @@
@@ -597,8 +597,8 @@
 +</chapter>
 +
 +</book>
-Index: b/fs/proc/array.c
-===================================================================
+diff --git a/fs/proc/array.c b/fs/proc/array.c
+index f4bc0e7..469903f 100644  
 --- a/fs/proc/array.c
 +++ b/fs/proc/array.c
 @@ -81,6 +81,7 @@
@@ -609,7 +609,7 @@
  
  #include <asm/pgtable.h>
  #include <asm/processor.h>
-@@ -190,6 +191,8 @@ static inline void task_state(struct seq
+@@ -185,6 +186,8 @@ static inline void task_state(struct seq
  		p->uid, p->euid, p->suid, p->fsuid,
  		p->gid, p->egid, p->sgid, p->fsgid);
  
@@ -618,11 +618,11 @@
  	task_lock(p);
  	if (p->files)
  		fdt = files_fdtable(p->files);
-Index: b/include/linux/ptrace.h
-===================================================================
+diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
+index ea7416c..06eaace 100644  
 --- a/include/linux/ptrace.h
 +++ b/include/linux/ptrace.h
-@@ -117,6 +117,7 @@ static inline void ptrace_unlink(struct 
+@@ -121,6 +121,7 @@ static inline void ptrace_unlink(struct 
  int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data);
  int generic_ptrace_pokedata(struct task_struct *tsk, long addr, long data);
  
@@ -630,7 +630,7 @@
  /**
   * task_ptrace - return %PT_* flags that apply to a task
   * @task:	pointer to &task_struct in question
-@@ -150,6 +151,26 @@ static inline int ptrace_event(int mask,
+@@ -154,6 +155,26 @@ static inline int ptrace_event(int mask,
  	return 1;
  }
  
@@ -657,11 +657,11 @@
  /**
   * ptrace_init_task - initialize ptrace state for a new child
   * @child:		new child task
-Index: b/include/linux/sched.h
-===================================================================
+diff --git a/include/linux/sched.h b/include/linux/sched.h
+index c226c7b..97e3606 100644  
 --- a/include/linux/sched.h
 +++ b/include/linux/sched.h
-@@ -1195,6 +1195,11 @@ struct task_struct {
+@@ -1199,6 +1199,11 @@ struct task_struct {
  #endif
  	seccomp_t seccomp;
  
@@ -673,7 +673,7 @@
  /* Thread group tracking */
     	u32 parent_exec_id;
     	u32 self_exec_id;
-@@ -1784,6 +1789,7 @@ extern int kill_pgrp(struct pid *pid, in
+@@ -1775,6 +1780,7 @@ extern int kill_pgrp(struct pid *pid, in
  extern int kill_pid(struct pid *pid, int sig, int priv);
  extern int kill_proc_info(int, struct siginfo *, pid_t);
  extern int do_notify_parent(struct task_struct *, int);
@@ -681,8 +681,8 @@
  extern void force_sig(int, struct task_struct *);
  extern void force_sig_specific(int, struct task_struct *);
  extern int send_sig(int, struct task_struct *, int);
-Index: b/include/linux/tracehook.h
-===================================================================
+diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h
+index 6186a78..03a4555 100644  
 --- a/include/linux/tracehook.h
 +++ b/include/linux/tracehook.h
 @@ -49,6 +49,7 @@
@@ -914,8 +914,9 @@
  }
  #endif	/* TIF_NOTIFY_RESUME */
  
-Index: b/include/linux/utrace.h
-===================================================================
+diff --git a/include/linux/utrace.h b/include/linux/utrace.h
+new file mode 100644
+index ...76cdb73 100644  
 --- /dev/null
 +++ b/include/linux/utrace.h
 @@ -0,0 +1,707 @@
@@ -1626,11 +1627,11 @@
 +#endif	/* CONFIG_UTRACE */
 +
 +#endif	/* linux/utrace.h */
-Index: b/init/Kconfig
-===================================================================
+diff --git a/init/Kconfig b/init/Kconfig
+index 8a8e2d0..e52678f 100644  
 --- a/init/Kconfig
 +++ b/init/Kconfig
-@@ -911,6 +911,32 @@ config STOP_MACHINE
+@@ -888,6 +888,32 @@ config STOP_MACHINE
  	help
  	  Need stop_machine() primitive.
  
@@ -1663,11 +1664,11 @@
  source "block/Kconfig"
  
  config PREEMPT_NOTIFIERS
-Index: b/kernel/Makefile
-===================================================================
+diff --git a/kernel/Makefile b/kernel/Makefile
+index 4e1d7df..eca21ef 100644  
 --- a/kernel/Makefile
 +++ b/kernel/Makefile
-@@ -49,6 +49,7 @@ obj-$(CONFIG_IKCONFIG) += configs.o
+@@ -64,6 +64,7 @@ obj-$(CONFIG_IKCONFIG) += configs.o
  obj-$(CONFIG_RESOURCE_COUNTERS) += res_counter.o
  obj-$(CONFIG_STOP_MACHINE) += stop_machine.o
  obj-$(CONFIG_KPROBES_SANITY_TEST) += test_kprobes.o
@@ -1675,3386 +1676,3364 @@
  obj-$(CONFIG_AUDIT) += audit.o auditfilter.o
  obj-$(CONFIG_AUDITSYSCALL) += auditsc.o
  obj-$(CONFIG_AUDIT_TREE) += audit_tree.o
-Index: b/kernel/signal.c
-===================================================================
---- a/kernel/signal.c
-+++ b/kernel/signal.c
-@@ -1435,7 +1435,7 @@ int do_notify_parent(struct task_struct 
- 	return sig;
- }
- 
--static void do_notify_parent_cldstop(struct task_struct *tsk, int why)
-+void do_notify_parent_cldstop(struct task_struct *tsk, int why)
- {
- 	struct siginfo info;
- 	unsigned long flags;
-@@ -1491,6 +1491,8 @@ static void do_notify_parent_cldstop(str
- 	spin_unlock_irqrestore(&sighand->siglock, flags);
+diff --git a/kernel/ptrace.c b/kernel/ptrace.c
+index 356699a..29c60d1 100644  
+--- a/kernel/ptrace.c
++++ b/kernel/ptrace.c
+@@ -16,6 +16,7 @@
+ #include <linux/pagemap.h>
[...5934 lines suppressed...]
++ * utrace_finish_examine - complete an examination of thread state
++ * @target:		thread of interest, a &struct task_struct pointer
++ * @engine:		engine pointer returned by utrace_attach_task()
++ * @exam:		pointer passed to utrace_prepare_examine() call
++ *
++ * This call completes an examination on the thread @target begun by a
++ * paired utrace_prepare_examine() call with the same arguments that
++ * returned success (zero).
++ *
++ * When @target is current, this call is superfluous.  When @target is
++ * another thread, this returns zero if @target has remained unscheduled
++ * since the paired utrace_prepare_examine() call returned zero.
++ *
++ * When this returns an error, any examination done since the paired
++ * utrace_prepare_examine() call is unreliable and the data extracted
++ * should be discarded.  The error is -%EINVAL if @engine is not
++ * keeping @target stopped, or -%EAGAIN if @target woke up unexpectedly.
++ */
++int utrace_finish_examine(struct task_struct *target,
++			  struct utrace_attached_engine *engine,
++			  struct utrace_examiner *exam)
 +{
-+	struct utrace_attached_engine *engine;
-+	enum utrace_resume_action action;
-+	enum utrace_syscall_action syscall;
 +	int ret = 0;
 +
-+	if (!valid_signal(data))
-+		return -EIO;
-+
-+	engine = utrace_attach_task(child, UTRACE_ATTACH_MATCH_OPS,
-+				    &ptrace_utrace_ops, NULL);
-+	if (IS_ERR(engine))
-+		return -ESRCH;
++	if (unlikely(target == current))
++		return 0;
 +
-+	syscall = UTRACE_SYSCALL_RUN;
-+#ifdef PTRACE_SYSEMU
-+	if (request == PTRACE_SYSEMU || request == PTRACE_SYSEMU_SINGLESTEP)
-+		syscall = UTRACE_SYSCALL_ABORT;
-+#endif
++	rcu_read_lock();
++	if (unlikely(!engine_wants_stop(engine)))
++		ret = -EINVAL;
++	else if (unlikely(target->state != exam->state))
++		ret = -EAGAIN;
++	else
++		get_task_struct(target);
++	rcu_read_unlock();
 +
-+	if (syscall != UTRACE_SYSCALL_RUN || request == PTRACE_SYSCALL) {
-+		if (!(engine->flags & UTRACE_EVENT_SYSCALL) &&
-+		    utrace_set_events(child, engine,
-+				      engine->flags | UTRACE_EVENT_SYSCALL))
-+			ret = -ESRCH;
-+	} else if (engine->flags & UTRACE_EVENT(SYSCALL_ENTRY)) {
-+		if (utrace_set_events(child, engine,
-+				      engine->flags & ~UTRACE_EVENT_SYSCALL))
-+			ret = -ESRCH;
++	if (likely(!ret)) {
++		unsigned long ncsw = wait_task_inactive(target, exam->state);
++		if (unlikely(ncsw != exam->ncsw))
++			ret = -EAGAIN;
++		put_task_struct(target);
 +	}
 +
-+	action = UTRACE_RESUME;
-+	if (is_singleblock(request)) {
-+		if (unlikely(!arch_has_block_step()))
-+			ret = -EIO;
-+		action = UTRACE_BLOCKSTEP;
-+	} else if (is_singlestep(request) || is_sysemu_singlestep(request)) {
-+		if (unlikely(!arch_has_single_step()))
-+			ret = -EIO;
-+		action = UTRACE_SINGLESTEP;
-+	}
++	return ret;
++}
++EXPORT_SYMBOL_GPL(utrace_finish_examine);
 +
-+	if (!ret) {
-+		child->exit_code = data;
++/*
++ * This is declared in linux/regset.h and defined in machine-dependent
++ * code.  We put the export here to ensure no machine forgets it.
++ */
++EXPORT_SYMBOL_GPL(task_user_regset_view);
 +
-+		ptrace_set_action(child, action, syscall);
++/*
++ * Return the &struct task_struct for the task using ptrace on this one,
++ * or %NULL.  Must be called with rcu_read_lock() held to keep the returned
++ * struct alive.
++ *
++ * At exec time, this may be called with task_lock() still held from when
++ * tracehook_unsafe_exec() was just called.  In that case it must give
++ * results consistent with those unsafe_exec() results, i.e. non-%NULL if
++ * any %LSM_UNSAFE_PTRACE_* bits were set.
++ *
++ * The value is also used to display after "TracerPid:" in /proc/PID/status,
++ * where it is called with only rcu_read_lock() held.
++ */
++struct task_struct *utrace_tracer_task(struct task_struct *target)
++{
++	struct utrace *utrace;
++	struct task_struct *tracer = NULL;
 +
-+		if (task_is_stopped(child)) {
-+			spin_lock_irq(&child->sighand->siglock);
-+			child->signal->flags &= ~SIGNAL_STOP_STOPPED;
-+			spin_unlock_irq(&child->sighand->siglock);
++	utrace = rcu_dereference(target->utrace);
++	if (utrace != NULL) {
++		struct list_head *pos, *next;
++		struct utrace_attached_engine *engine;
++		const struct utrace_engine_ops *ops;
++		list_for_each_safe(pos, next, &utrace->attached) {
++			engine = list_entry(pos, struct utrace_attached_engine,
++					    entry);
++			ops = rcu_dereference(engine->ops);
++			if (ops->tracer_task) {
++				tracer = (*ops->tracer_task)(engine, target);
++				if (tracer != NULL)
++					break;
++			}
 +		}
++	}
 +
-+		/*
-+		 * To resume with a signal we must hit ptrace_report_signal.
-+		 */
-+		if (data)
-+			action = UTRACE_INTERRUPT;
++	return tracer;
++}
 +
-+		if (utrace_control(child, engine, action))
-+			ret = -ESRCH;
-+	}
++/*
++ * Called on the current task to return LSM_UNSAFE_* bits implied by tracing.
++ * Called with task_lock() held.
++ */
++int utrace_unsafe_exec(struct task_struct *task)
++{
++	struct utrace *utrace = task->utrace;
++	struct utrace_attached_engine *engine, *next;
++	const struct utrace_engine_ops *ops;
++	int unsafe = 0;
 +
-+	utrace_engine_put(engine);
++	list_for_each_entry_safe(engine, next, &utrace->attached, entry) {
++		ops = rcu_dereference(engine->ops);
++		if (ops->unsafe_exec)
++			unsafe |= (*ops->unsafe_exec)(engine, task);
++	}
 +
-+	return ret;
++	return unsafe;
 +}
-+#endif	/* !CONFIG_UTRACE_PTRACE */
- 
- int ptrace_request(struct task_struct *child, long request,
- 		   long addr, long data)
-@@ -480,6 +1074,11 @@ int ptrace_request(struct task_struct *c
- int ptrace_traceme(void)
- {
- 	int ret = -EPERM;
-+	struct utrace_attached_engine *engine;
 +
-+	engine = ptrace_attach_utrace(current);
-+	if (unlikely(IS_ERR(engine)))
-+		return ret;
- 
- 	/*
- 	 * Are we already being traced?
-@@ -513,6 +1112,9 @@ repeat:
- 		write_unlock_irqrestore(&tasklist_lock, flags);
- 	}
- 	task_unlock(current);
-+	if (ret)
-+		ptrace_detach_utrace(current, engine);
-+	utrace_engine_put(engine);
- 	return ret;
- }
- 
++/*
++ * Called with rcu_read_lock() held.
++ */
++void task_utrace_proc_status(struct seq_file *m, struct task_struct *p)
++{
++	struct utrace *utrace = rcu_dereference(p->utrace);
++	if (unlikely(utrace))
++		seq_printf(m, "Utrace: %lx%s%s%s\n",
++			   p->utrace_flags,
++			   utrace->stopped ? " (stopped)" : "",
++			   utrace->report ? " (report)" : "",
++			   utrace->interrupt ? " (interrupt)" : "");
++}


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/sources,v
retrieving revision 1.791
retrieving revision 1.792
diff -u -r1.791 -r1.792
--- sources	22 Oct 2008 22:47:00 -0000	1.791
+++ sources	30 Oct 2008 04:41:21 -0000	1.792
@@ -1,2 +1,2 @@
-5169d01c405bc3f866c59338e217968c  linux-2.6.26.tar.bz2
-70e7706e289f759925f6474f26c74b89  patch-2.6.26.7.bz2
+b3e78977aa79d3754cb7f8143d7ddabd  linux-2.6.27.tar.bz2
+fa7cb6cf1ee5e796e89905806ffc6f01  patch-2.6.27.4.bz2


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/upstream,v
retrieving revision 1.710
retrieving revision 1.711
diff -u -r1.710 -r1.711
--- upstream	22 Oct 2008 22:47:00 -0000	1.710
+++ upstream	30 Oct 2008 04:41:21 -0000	1.711
@@ -1,2 +1,2 @@
-linux-2.6.26.tar.bz2
-patch-2.6.26.7.bz2
+linux-2.6.27.tar.bz2
+patch-2.6.27.4.bz2


--- config-ia64 DELETED ---


--- config-rhel-x86-generic DELETED ---


--- config-sparc DELETED ---


--- config-sparc-generic DELETED ---


--- config-sparc-smp DELETED ---


--- config-sparc64 DELETED ---


--- config-xen-generic DELETED ---


--- config-xen-ia64 DELETED ---


--- config-xen-x86 DELETED ---


--- config-xen-x86_64 DELETED ---


--- linux-2.6-cpuidle-1-do-not-use-poll_idle-unless-user-asks-for-it.patch DELETED ---


--- linux-2.6-cpuidle-2-menu-governor-fix-wrong-usage-of-measured_us.patch DELETED ---


--- linux-2.6-cpuidle-3-make-ladder-governor-honor-latency-requirements.patch DELETED ---


--- linux-2.6-drm-i915-fix-ioctl-security.patch DELETED ---


--- linux-2.6-e1000e-write-protect-nvm.patch DELETED ---


--- linux-2.6-fbdev-teach-offb-about-palette-on-radeon-r500-r600.patch DELETED ---


--- linux-2.6-fs-cifs-fix-plaintext-authentication.patch DELETED ---


--- linux-2.6-fs-cifs-turn-off-unicode-during-session-establishment.patch DELETED ---


--- linux-2.6-hwmon-applesmc-remove-debugging-messages.patch DELETED ---


--- linux-2.6-input-fix_fn_key_on_macbookpro_4_1_and_mb_air.patch DELETED ---


--- linux-2.6-intel-msr-backport.patch DELETED ---


--- linux-2.6-kernel-doc-structs-private.patch DELETED ---


--- linux-2.6-libata-fix-a-large-collection-of-DMA-mode-mismatches.patch DELETED ---


--- linux-2.6-libata-pata_it821x-driver-updates-and-reworking.patch DELETED ---


--- linux-2.6-libata-pata_marvell-play-nice-with-ahci.patch DELETED ---


--- linux-2.6-libata-sff-kill-spurious-WARN_ON-in-ata_hsm_move.patch DELETED ---


--- linux-2.6-lirc.patch DELETED ---


--- linux-2.6-net-print-module-name-as-part-of-the-message.patch DELETED ---


--- linux-2.6-netdev-atl1e.patch DELETED ---


--- linux-2.6-netdev-e1000e-fix-drv-load-issues-amt.patch DELETED ---


--- linux-2.6-powerpc-fix-OF-parsing-of-64-bits-pci-addresses.patch DELETED ---


--- linux-2.6-powerpc-zImage-32MiB.patch DELETED ---


--- linux-2.6-ppc-use-libgcc.patch DELETED ---


--- linux-2.6-ptrace-cleanup.patch DELETED ---


--- linux-2.6-rt2500usb-fix.patch DELETED ---


--- linux-2.6-sched-clock-fix-nohz-interaction.patch DELETED ---


--- linux-2.6-tracehook.patch DELETED ---


--- linux-2.6-wan-missing-capability-checks-in-sbni_ioctl.patch DELETED ---


--- linux-2.6-warn-Turn-the-netdev-timeout-WARN_ON-into-WARN.patch DELETED ---


--- linux-2.6-warn-add-WARN-macro.patch DELETED ---


--- linux-2.6-warn-rename-WARN-to-WARNING.patch DELETED ---


--- linux-2.6-wireless-p54-fix-regression-due-to-delete-NETDEVICES_MULTIQUEUE-option.patch DELETED ---


--- linux-2.6-wireless-pending.patch DELETED ---


--- linux-2.6-wireless-revert-b43-add-RFKILL_STATE_HARD_BLOCKED-support.patch DELETED ---


--- linux-2.6-wireless-rt2500pci-restoring-missing-line.patch DELETED ---


--- linux-2.6-wireless-stable-backports.patch DELETED ---


--- linux-2.6-wireless.patch DELETED ---


--- linux-2.6-x86-apic-dump-all-regs-v3.patch DELETED ---


--- linux-2.6-x86-hpet-04-workaround-sb700-bios.patch DELETED ---


--- linux-2.6-x86-pci-detect-end_bus_number.patch DELETED ---


--- linux-2.6-x86-sb450-skip-irq0-override-if-not-routed-to-INT2.patch DELETED ---


--- linux-2.6.26-ext-dir-corruption-fix.patch DELETED ---


--- linux-2.6.26.tar.bz2.sign DELETED ---


--- linux-sparc-tracehook-syscall.patch DELETED ---


--- patch-2.6.26.7.bz2.sign DELETED ---




More information about the fedora-extras-commits mailing list