rpms/kernel/F-8 linux-2.6-ptrace-cleanup.patch, NONE, 1.1 linux-2.6-tracehook.patch, NONE, 1.1 linux-2.6.26.tar.bz2.sign, NONE, 1.1 patch-2.6.26.2.bz2.sign, NONE, 1.1 .cvsignore, 1.733, 1.734 config-debug, 1.8, 1.9 config-generic, 1.76, 1.77 config-i686, 1.4, 1.5 config-ia64, 1.1, 1.2 config-ia64-generic, 1.7, 1.8 config-nodebug, 1.11, 1.12 config-powerpc-generic, 1.14, 1.15 config-powerpc32-generic, 1.5, 1.6 config-powerpc64, 1.9, 1.10 config-s390x, 1.4, 1.5 config-sparc64-generic, 1.10, 1.11 config-x86-generic, 1.23, 1.24 config-x86_64-generic, 1.24, 1.25 config-xen-generic, 1.2, 1.3 kernel.spec, 1.510, 1.511 linux-2.6-at76.patch, 1.11, 1.12 linux-2.6-compile-fix-gcc-43.patch, 1.1, 1.2 linux-2.6-e1000-ich9.patch, 1.3, 1.4 linux-2.6-execshield.patch, 1.77, 1.78 linux-2.6-firewire-git-update.patch, 1.8, 1.9 linux-2.6-lirc.patch, 1.6, 1.7 linux-2.6-netdev-atl1e.patch, 1.1, 1.2 linux-2.6-netdev-atl2.patch, 1.1, 1.2 linux-2.6-ps3-legacy-bootloader-hack.patch, 1.1, 1.2 linux-2.6-silence-noise.patch, 1.13, 1.14 linux-2.6-smarter-relatime.patch, 1.4, 1.5 linux-2.6-upstream-reverts.patch, 1.13, 1.14 linux-2.6-utrace.patch, 1.68, 1.69 linux-2.6-wireless-pending.patch, 1.54, 1.55 linux-2.6-wireless.patch, 1.48, 1.49 linux-2.6-x86-apic-dump-all-regs-v3.patch, 1.2, 1.3 sources, 1.694, 1.695 upstream, 1.614, 1.615 linux-2.6-acpi-eeepc-hotkey.patch, 1.3, NONE linux-2.6-acpi-fix-error-with-external-methods.patch, 1.1, NONE linux-2.6-acpi-fix-sizeof.patch, 1.2, NONE linux-2.6-alsa-hda-codec-add-AD1884A-mobile.patch, 1.1, NONE linux-2.6-alsa-hda-codec-add-AD1884A-x300.patch, 1.1, NONE linux-2.6-alsa-hda-codec-add-AD1884A.patch, 1.1, NONE linux-2.6-alsa-kill-annoying-messages.patch, 1.1, NONE linux-2.6-bluetooth-signal-userspace-for-socket-errors.patch, 1.1, NONE linux-2.6-devmem.patch, 1.20, NONE linux-2.6-efika-not-chrp.patch, 1.1, NONE linux-2.6-fs-fat-cleanup-code.patch, 1.1, NONE linux-2.6-fs-fat-fix-setattr.patch, 1.1, NONE linux-2.6-fs-fat-relax-permission-check-of-fat_setattr.patch, 1.1, NONE linux-2.6-libata-acpi-fix-invalid-context-acpi.patch, 1.1, NONE linux-2.6-libata-acpi-handle-bay-devices-in-dock-stations.patch, 1.1, NONE linux-2.6-libata-acpi-hotplug-fixups.patch, 1.1, NONE linux-2.6-libata-ata_piix-dont-attach-to-ich6m-in-ahci-mode.patch, 1.1, NONE linux-2.6-libata-be-a-bit-more-slack-about-early-devices.patch, 1.1, NONE linux-2.6-ppc-rtc.patch, 1.1, NONE linux-2.6-stable-queue.patch, 1.2, NONE linux-2.6-sysrq-add-show-backtrace-on-all-cpus-function.patch, 1.1, NONE linux-2.6-uvcvideo.patch, 1.2, NONE linux-2.6-windfarm-pm121-fix.patch, 1.1, NONE linux-2.6-windfarm-pm121.patch, 1.1, NONE linux-2.6-wireless-fixups.patch, 1.8, NONE linux-2.6-x86-dont-map-vdso-when-disabled.patch, 1.1, NONE linux-2.6-x86-dont-use-disabled-vdso-for-signals.patch, 1.1, NONE linux-2.6-x86-mm-ioremap-64-bit-resource-on-32-bit-kernel.patch, 1.1, NONE linux-2.6.25-utrace-bugon.patch, 1.1, NONE linux-2.6.25-utrace-i386-syscall-trace.patch, 1.1, NONE linux-2.6.25.tar.bz2.sign, 1.1, NONE patch-2.6.25.14.bz2.sign, 1.1, NONE

Chuck Ebbert (cebbert) fedora-extras-commits at redhat.com
Fri Aug 8 18:56:33 UTC 2008


Author: cebbert

Update of /cvs/pkgs/rpms/kernel/F-8
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv28475

Modified Files:
	.cvsignore config-debug config-generic config-i686 config-ia64 
	config-ia64-generic config-nodebug config-powerpc-generic 
	config-powerpc32-generic config-powerpc64 config-s390x 
	config-sparc64-generic config-x86-generic 
	config-x86_64-generic config-xen-generic kernel.spec 
	linux-2.6-at76.patch linux-2.6-compile-fix-gcc-43.patch 
	linux-2.6-e1000-ich9.patch linux-2.6-execshield.patch 
	linux-2.6-firewire-git-update.patch linux-2.6-lirc.patch 
	linux-2.6-netdev-atl1e.patch linux-2.6-netdev-atl2.patch 
	linux-2.6-ps3-legacy-bootloader-hack.patch 
	linux-2.6-silence-noise.patch linux-2.6-smarter-relatime.patch 
	linux-2.6-upstream-reverts.patch linux-2.6-utrace.patch 
	linux-2.6-wireless-pending.patch linux-2.6-wireless.patch 
	linux-2.6-x86-apic-dump-all-regs-v3.patch sources upstream 
Added Files:
	linux-2.6-ptrace-cleanup.patch linux-2.6-tracehook.patch 
	linux-2.6.26.tar.bz2.sign patch-2.6.26.2.bz2.sign 
Removed Files:
	linux-2.6-acpi-eeepc-hotkey.patch 
	linux-2.6-acpi-fix-error-with-external-methods.patch 
	linux-2.6-acpi-fix-sizeof.patch 
	linux-2.6-alsa-hda-codec-add-AD1884A-mobile.patch 
	linux-2.6-alsa-hda-codec-add-AD1884A-x300.patch 
	linux-2.6-alsa-hda-codec-add-AD1884A.patch 
	linux-2.6-alsa-kill-annoying-messages.patch 
	linux-2.6-bluetooth-signal-userspace-for-socket-errors.patch 
	linux-2.6-devmem.patch linux-2.6-efika-not-chrp.patch 
	linux-2.6-fs-fat-cleanup-code.patch 
	linux-2.6-fs-fat-fix-setattr.patch 
	linux-2.6-fs-fat-relax-permission-check-of-fat_setattr.patch 
	linux-2.6-libata-acpi-fix-invalid-context-acpi.patch 
	linux-2.6-libata-acpi-handle-bay-devices-in-dock-stations.patch 
	linux-2.6-libata-acpi-hotplug-fixups.patch 
	linux-2.6-libata-ata_piix-dont-attach-to-ich6m-in-ahci-mode.patch 
	linux-2.6-libata-be-a-bit-more-slack-about-early-devices.patch 
	linux-2.6-ppc-rtc.patch linux-2.6-stable-queue.patch 
	linux-2.6-sysrq-add-show-backtrace-on-all-cpus-function.patch 
	linux-2.6-uvcvideo.patch linux-2.6-windfarm-pm121-fix.patch 
	linux-2.6-windfarm-pm121.patch linux-2.6-wireless-fixups.patch 
	linux-2.6-x86-dont-map-vdso-when-disabled.patch 
	linux-2.6-x86-dont-use-disabled-vdso-for-signals.patch 
	linux-2.6-x86-mm-ioremap-64-bit-resource-on-32-bit-kernel.patch 
	linux-2.6.25-utrace-bugon.patch 
	linux-2.6.25-utrace-i386-syscall-trace.patch 
	linux-2.6.25.tar.bz2.sign patch-2.6.25.14.bz2.sign 
Log Message:
Linux 2.6.26.2

linux-2.6-ptrace-cleanup.patch:

--- NEW FILE linux-2.6-ptrace-cleanup.patch ---
 arch/powerpc/kernel/entry_32.S    |    4 +-
 arch/powerpc/kernel/ptrace.c      |   19 ++-
 arch/powerpc/kernel/signal.c      |   12 +-
 arch/powerpc/kernel/signal_32.c   |    2 +-
 arch/ppc/kernel/entry.S           |    4 +-
 arch/x86/ia32/ia32entry.S         |   14 +-
 arch/x86/kernel/entry_32.S        |   23 +--
 arch/x86/kernel/entry_64.S        |   20 +-
 arch/x86/kernel/ptrace.c          |  151 +++++--------
 arch/x86/kernel/signal_32.c       |    6 -
 arch/x86/kernel/signal_64.c       |    6 -
 arch/x86/kernel/step.c            |   35 +++-
 include/asm-powerpc/processor.h   |    2 +
 include/asm-powerpc/ptrace.h      |    4 +
 include/asm-powerpc/thread_info.h |   17 +-
 include/asm-x86/calling.h         |    6 +-
 include/asm-x86/ptrace-abi.h      |    6 +-
 include/asm-x86/thread_info_32.h  |   12 +-
 include/asm-x86/thread_info_64.h  |   17 ++-
 include/linux/init_task.h         |    4 +-
 include/linux/sched.h             |   26 +--
 kernel/exit.c                     |  451 +++++++++++++++++++++++--------------
 kernel/fork.c                     |    6 +-
 kernel/ptrace.c                   |   37 ++-
 24 files changed, 511 insertions(+), 373 deletions(-)

diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
index 0c8614d..3a05e9f 100644  
--- a/arch/powerpc/kernel/entry_32.S
+++ b/arch/powerpc/kernel/entry_32.S
@@ -668,7 +668,7 @@ user_exc_return:		/* r10 contains MSR_KE
 	/* Check current_thread_info()->flags */
 	rlwinm	r9,r1,0,0,(31-THREAD_SHIFT)
 	lwz	r9,TI_FLAGS(r9)
-	andi.	r0,r9,(_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK|_TIF_NEED_RESCHED)
+	andi.	r0,r9,_TIF_USER_WORK_MASK
 	bne	do_work
 
 restore_user:
@@ -925,7 +925,7 @@ recheck:
 	lwz	r9,TI_FLAGS(r9)
 	andi.	r0,r9,_TIF_NEED_RESCHED
 	bne-	do_resched
-	andi.	r0,r9,_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK
+	andi.	r0,r9,_TIF_USER_WORK_MASK
 	beq	restore_user
 do_user_signal:			/* r10 contains MSR_KERNEL here */
 	ori	r10,r10,MSR_EE
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
index 2a9fe97..91ee077 100644  
--- a/arch/powerpc/kernel/ptrace.c
+++ b/arch/powerpc/kernel/ptrace.c
@@ -619,12 +619,29 @@ void user_enable_single_step(struct task
 		task->thread.dbcr0 = DBCR0_IDM | DBCR0_IC;
 		regs->msr |= MSR_DE;
 #else
+		regs->msr &= ~MSR_BE;
 		regs->msr |= MSR_SE;
 #endif
 	}
 	set_tsk_thread_flag(task, TIF_SINGLESTEP);
 }
 
+void user_enable_block_step(struct task_struct *task)
+{
+	struct pt_regs *regs = task->thread.regs;
+
+	if (regs != NULL) {
+#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
+		task->thread.dbcr0 = DBCR0_IDM | DBCR0_BT;
+		regs->msr |= MSR_DE;
+#else
+		regs->msr &= ~MSR_SE;
+		regs->msr |= MSR_BE;
+#endif
+	}
+	set_tsk_thread_flag(task, TIF_SINGLESTEP);
+}
+
 void user_disable_single_step(struct task_struct *task)
 {
 	struct pt_regs *regs = task->thread.regs;
@@ -634,7 +651,7 @@ void user_disable_single_step(struct tas
 		task->thread.dbcr0 = 0;
 		regs->msr &= ~MSR_DE;
 #else
-		regs->msr &= ~MSR_SE;
+		regs->msr &= ~(MSR_SE | MSR_BE);
 #endif
 	}
 	clear_tsk_thread_flag(task, TIF_SINGLESTEP);
diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c
index a65a44f..ad55488 100644  
--- a/arch/powerpc/kernel/signal.c
+++ b/arch/powerpc/kernel/signal.c
@@ -120,7 +120,7 @@ int do_signal(sigset_t *oldset, struct p
 	int ret;
 	int is32 = is_32bit_task();
 
-	if (test_thread_flag(TIF_RESTORE_SIGMASK))
+	if (current_thread_info()->local_flags & _TLF_RESTORE_SIGMASK)
 		oldset = &current->saved_sigmask;
 	else if (!oldset)
 		oldset = &current->blocked;
@@ -131,9 +131,10 @@ int do_signal(sigset_t *oldset, struct p
 	check_syscall_restart(regs, &ka, signr > 0);
 
 	if (signr <= 0) {
+		struct thread_info *ti = current_thread_info();
 		/* No signal to deliver -- put the saved sigmask back */
-		if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-			clear_thread_flag(TIF_RESTORE_SIGMASK);
+		if (ti->local_flags & _TLF_RESTORE_SIGMASK) {
+			ti->local_flags &= ~_TLF_RESTORE_SIGMASK;
 			sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
 		}
 		return 0;               /* no signals delivered */
@@ -169,10 +170,9 @@ int do_signal(sigset_t *oldset, struct p
 
 		/*
 		 * A signal was successfully delivered; the saved sigmask is in
-		 * its frame, and we can clear the TIF_RESTORE_SIGMASK flag.
+		 * its frame, and we can clear the TLF_RESTORE_SIGMASK flag.
 		 */
-		if (test_thread_flag(TIF_RESTORE_SIGMASK))
-			clear_thread_flag(TIF_RESTORE_SIGMASK);
+		current_thread_info()->local_flags &= ~_TLF_RESTORE_SIGMASK;
 	}
 
 	return ret;
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
index ad69434..4ae16d1 100644  
--- a/arch/powerpc/kernel/signal_32.c
+++ b/arch/powerpc/kernel/signal_32.c
@@ -243,7 +243,7 @@ long sys_sigsuspend(old_sigset_t mask)
 
  	current->state = TASK_INTERRUPTIBLE;
  	schedule();
- 	set_thread_flag(TIF_RESTORE_SIGMASK);
+	set_restore_sigmask();
  	return -ERESTARTNOHAND;
 }
 
diff --git a/arch/ppc/kernel/entry.S b/arch/ppc/kernel/entry.S
index 5f3a5d0..fcd830a 100644  
--- a/arch/ppc/kernel/entry.S
+++ b/arch/ppc/kernel/entry.S
@@ -647,7 +647,7 @@ user_exc_return:		/* r10 contains MSR_KE
 	/* Check current_thread_info()->flags */
 	rlwinm	r9,r1,0,0,18
 	lwz	r9,TI_FLAGS(r9)
-	andi.	r0,r9,(_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK|_TIF_NEED_RESCHED)
+	andi.	r0,r9,_TIF_USER_WORK_MASK
 	bne	do_work
 
 restore_user:
@@ -898,7 +898,7 @@ recheck:
 	lwz	r9,TI_FLAGS(r9)
 	andi.	r0,r9,_TIF_NEED_RESCHED
 	bne-	do_resched
-	andi.	r0,r9,_TIF_SIGPENDING
+	andi.	r0,r9,_TIF_USER_WORK_MASK
 	beq	restore_user
 do_user_signal:			/* r10 contains MSR_KERNEL here */
 	ori	r10,r10,MSR_EE
diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S
index b5e329d..0b2ab50 100644  
--- a/arch/x86/ia32/ia32entry.S
+++ b/arch/x86/ia32/ia32entry.S
@@ -37,6 +37,11 @@
 	movq	%rax,R8(%rsp)
 	.endm
 
+	/*
+	 * Reload arg registers from stack in case ptrace changed them.
+	 * We don't reload %eax because syscall_trace_enter() returned
+	 * the value it wants us to use in the table lookup.
+	 */
 	.macro LOAD_ARGS32 offset
 	movl \offset(%rsp),%r11d
 	movl \offset+8(%rsp),%r10d
@@ -46,7 +51,6 @@
 	movl \offset+48(%rsp),%edx
 	movl \offset+56(%rsp),%esi
 	movl \offset+64(%rsp),%edi
-	movl \offset+72(%rsp),%eax
 	.endm
 	
 	.macro CFI_STARTPROC32 simple
@@ -124,12 +128,12 @@ ENTRY(ia32_sysenter_target)
  	.previous	
 	GET_THREAD_INFO(%r10)
 	orl    $TS_COMPAT,threadinfo_status(%r10)
-	testl  $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
+	testl  $_TIF_WORK_SYSCALL_ENTRY,threadinfo_flags(%r10)
 	CFI_REMEMBER_STATE
 	jnz  sysenter_tracesys
-sysenter_do_call:	
 	cmpl	$(IA32_NR_syscalls-1),%eax
 	ja	ia32_badsys
+sysenter_do_call:
 	IA32_ARG_FIXUP 1
 	call	*ia32_sys_call_table(,%rax,8)
 	movq	%rax,RAX-ARGOFFSET(%rsp)
@@ -231,7 +235,7 @@ ENTRY(ia32_cstar_target)
 	.previous	
 	GET_THREAD_INFO(%r10)
 	orl   $TS_COMPAT,threadinfo_status(%r10)
-	testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
+	testl $_TIF_WORK_SYSCALL_ENTRY,threadinfo_flags(%r10)
 	CFI_REMEMBER_STATE
 	jnz   cstar_tracesys
 cstar_do_call:	
@@ -325,7 +329,7 @@ ENTRY(ia32_syscall)
 	SAVE_ARGS 0,0,1
 	GET_THREAD_INFO(%r10)
 	orl   $TS_COMPAT,threadinfo_status(%r10)
-	testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
+	testl $_TIF_WORK_SYSCALL_ENTRY,threadinfo_flags(%r10)
 	jnz ia32_tracesys
 ia32_do_syscall:	
 	cmpl $(IA32_NR_syscalls-1),%eax
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
index c778e4f..f5d312c 100644  
--- a/arch/x86/kernel/entry_32.S
+++ b/arch/x86/kernel/entry_32.S
@@ -331,7 +331,7 @@ sysenter_past_esp:
 	GET_THREAD_INFO(%ebp)
 
 	/* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */
-	testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
+	testw $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp)
 	jnz syscall_trace_entry
 	cmpl $(nr_syscalls), %eax
 	jae syscall_badsys
@@ -369,7 +369,7 @@ ENTRY(system_call)
 	GET_THREAD_INFO(%ebp)
 					# system call tracing in operation / emulation
 	/* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */
-	testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
+	testw $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp)
 	jnz syscall_trace_entry
 	cmpl $(nr_syscalls), %eax
 	jae syscall_badsys
@@ -382,10 +382,6 @@ syscall_exit:
 					# setting need_resched or sigpending
 					# between sampling and the iret
 	TRACE_IRQS_OFF
-	testl $X86_EFLAGS_TF,PT_EFLAGS(%esp)	# If tracing set singlestep flag on exit
-	jz no_singlestep
-	orl $_TIF_SINGLESTEP,TI_flags(%ebp)
-no_singlestep:
 	movl TI_flags(%ebp), %ecx
 	testw $_TIF_ALLWORK_MASK, %cx	# current->work
 	jne syscall_exit_work
@@ -513,12 +509,8 @@ END(work_pending)
 syscall_trace_entry:
 	movl $-ENOSYS,PT_EAX(%esp)
 	movl %esp, %eax
-	xorl %edx,%edx
-	call do_syscall_trace
-	cmpl $0, %eax
-	jne resume_userspace		# ret != 0 -> running under PTRACE_SYSEMU,
-					# so must skip actual syscall
-	movl PT_ORIG_EAX(%esp), %eax
+	call syscall_trace_enter
+	/* What it returned is what we'll actually use.  */
 	cmpl $(nr_syscalls), %eax
 	jnae syscall_call
 	jmp syscall_exit
@@ -527,14 +519,13 @@ END(syscall_trace_entry)
 	# perform syscall exit tracing
 	ALIGN
 syscall_exit_work:
-	testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP), %cl
+	testb $_TIF_WORK_SYSCALL_EXIT, %cl
 	jz work_pending
 	TRACE_IRQS_ON
-	ENABLE_INTERRUPTS(CLBR_ANY)	# could let do_syscall_trace() call
+	ENABLE_INTERRUPTS(CLBR_ANY)	# could let syscall_trace_leave() call
 					# schedule() instead
 	movl %esp, %eax
-	movl $1, %edx
-	call do_syscall_trace
+	call syscall_trace_leave
 	jmp resume_userspace
 END(syscall_exit_work)
 	CFI_ENDPROC
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 556a8df..21c72a9 100644  
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -244,7 +244,7 @@ ENTRY(system_call_after_swapgs)
 	movq  %rcx,RIP-ARGOFFSET(%rsp)
 	CFI_REL_OFFSET rip,RIP-ARGOFFSET
 	GET_THREAD_INFO(%rcx)
-	testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%rcx)
+	testl $_TIF_WORK_SYSCALL_ENTRY,threadinfo_flags(%rcx)
 	jnz tracesys
 	cmpq $__NR_syscall_max,%rax
 	ja badsys
@@ -305,7 +305,7 @@ sysret_signal:
 	leaq -ARGOFFSET(%rsp),%rdi # &pt_regs -> arg1
 	xorl %esi,%esi # oldset -> arg2
 	call ptregscall_common
-1:	movl $_TIF_NEED_RESCHED,%edi
+1:	movl $_TIF_WORK_MASK,%edi
 	/* Use IRET because user could have changed frame. This
 	   works because ptregscall_common has called FIXUP_TOP_OF_STACK. */
 	DISABLE_INTERRUPTS(CLBR_NONE)
@@ -323,7 +323,12 @@ tracesys:			 
 	FIXUP_TOP_OF_STACK %rdi
 	movq %rsp,%rdi
 	call syscall_trace_enter
-	LOAD_ARGS ARGOFFSET  /* reload args from stack in case ptrace changed it */
+	/*
+	 * Reload arg registers from stack in case ptrace changed them.
+	 * We don't reload %rax because syscall_trace_enter() returned
+	 * the value it wants us to use in the table lookup.
+	 */
+	LOAD_ARGS ARGOFFSET, 1
 	RESTORE_REST
 	cmpq $__NR_syscall_max,%rax
 	ja   int_ret_from_sys_call	/* RAX(%rsp) set to -ENOSYS above */
@@ -376,7 +381,7 @@ int_very_careful:
 	ENABLE_INTERRUPTS(CLBR_NONE)
 	SAVE_REST
 	/* Check for syscall exit trace */	
-	testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP),%edx
+	testl $_TIF_WORK_SYSCALL_EXIT,%edx
 	jz int_signal
 	pushq %rdi
 	CFI_ADJUST_CFA_OFFSET 8
@@ -384,7 +389,7 @@ int_very_careful:
 	call syscall_trace_leave
 	popq %rdi
 	CFI_ADJUST_CFA_OFFSET -8
-	andl $~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP),%edi
+	andl $~(_TIF_WORK_SYSCALL_EXIT|_TIF_SYSCALL_EMU),%edi
 	jmp int_restore_rest
 	
 int_signal:
@@ -393,7 +398,7 @@ int_signal:
 	movq %rsp,%rdi		# &ptregs -> arg1
 	xorl %esi,%esi		# oldset -> arg2
 	call do_notify_resume
-1:	movl $_TIF_NEED_RESCHED,%edi	
+1:	movl $_TIF_WORK_MASK,%edi
 int_restore_rest:
 	RESTORE_REST
 	DISABLE_INTERRUPTS(CLBR_NONE)
@@ -647,9 +652,8 @@ retint_signal:
 	RESTORE_REST
 	DISABLE_INTERRUPTS(CLBR_NONE)
 	TRACE_IRQS_OFF
-	movl $_TIF_NEED_RESCHED,%edi
 	GET_THREAD_INFO(%rcx)
-	jmp retint_check
+	jmp retint_with_reschedule
 
 #ifdef CONFIG_PREEMPT
 	/* Returning to kernel space. Check if we need preemption */
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
index a7835f2..652f550 100644  
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -1357,8 +1357,6 @@ const struct user_regset_view *task_user
 #endif
 }
 
-#ifdef CONFIG_X86_32
-
 void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code)
 {
 	struct siginfo info;
@@ -1377,89 +1375,10 @@ void send_sigtrap(struct task_struct *ts
 	force_sig_info(SIGTRAP, &info, tsk);
 }
 
-/* notification of system call entry/exit
- * - triggered by current->work.syscall_trace
- */
-int do_syscall_trace(struct pt_regs *regs, int entryexit)
-{
-	int is_sysemu = test_thread_flag(TIF_SYSCALL_EMU);
-	/*
-	 * With TIF_SYSCALL_EMU set we want to ignore TIF_SINGLESTEP for syscall
-	 * interception
-	 */
-	int is_singlestep = !is_sysemu && test_thread_flag(TIF_SINGLESTEP);
-	int ret = 0;
-
-	/* do the secure computing check first */
-	if (!entryexit)
-		secure_computing(regs->orig_ax);
-
-	if (unlikely(current->audit_context)) {
-		if (entryexit)
-			audit_syscall_exit(AUDITSC_RESULT(regs->ax),
-						regs->ax);
-		/* Debug traps, when using PTRACE_SINGLESTEP, must be sent only
-		 * on the syscall exit path. Normally, when TIF_SYSCALL_AUDIT is
-		 * not used, entry.S will call us only on syscall exit, not
-		 * entry; so when TIF_SYSCALL_AUDIT is used we must avoid
-		 * calling send_sigtrap() on syscall entry.
-		 *
-		 * Note that when PTRACE_SYSEMU_SINGLESTEP is used,
-		 * is_singlestep is false, despite his name, so we will still do
-		 * the correct thing.
-		 */
-		else if (is_singlestep)
-			goto out;
-	}
-
-	if (!(current->ptrace & PT_PTRACED))
-		goto out;
-
-	/* If a process stops on the 1st tracepoint with SYSCALL_TRACE
-	 * and then is resumed with SYSEMU_SINGLESTEP, it will come in
-	 * here. We have to check this and return */
-	if (is_sysemu && entryexit)
-		return 0;
-
-	/* Fake a debug trap */
-	if (is_singlestep)
-		send_sigtrap(current, regs, 0);
-
- 	if (!test_thread_flag(TIF_SYSCALL_TRACE) && !is_sysemu)
-		goto out;
-
-	/* the 0x80 provides a way for the tracing parent to distinguish
-	   between a syscall stop and SIGTRAP delivery */
-	/* Note that the debugger could change the result of test_thread_flag!*/
-	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;
-	}
-	ret = is_sysemu;
-out:
-	if (unlikely(current->audit_context) && !entryexit)
-		audit_syscall_entry(AUDIT_ARCH_I386, regs->orig_ax,
-				    regs->bx, regs->cx, regs->dx, regs->si);
-	if (ret == 0)
-		return 0;
-
-	regs->orig_ax = -1; /* force skip of syscall restarting */
-	if (unlikely(current->audit_context))
-		audit_syscall_exit(AUDITSC_RESULT(regs->ax), regs->ax);
-	return 1;
-}
-
-#else  /* CONFIG_X86_64 */
-
 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",
@@ -1481,39 +1400,81 @@ static void syscall_trace(struct pt_regs
 	}
 }
 
-asmlinkage void syscall_trace_enter(struct pt_regs *regs)
+#ifdef CONFIG_X86_32
+# define IS_IA32	1
+#elif defined CONFIG_IA32_EMULATION
+# define IS_IA32	test_thread_flag(TIF_IA32)
+#else
+# define IS_IA32	0
+#endif
+
+/*
+ * We must return the syscall number to actually look up in the table.
+ * This can be -1L to skip running any syscall at all.
+ */
+asmregparm long syscall_trace_enter(struct pt_regs *regs)
 {
+	long ret = 0;
+
+	/*
+	 * If we stepped into a sysenter/syscall insn, it trapped in
+	 * kernel mode; do_debug() cleared TF and set TIF_SINGLESTEP.
+	 * If user-mode had set TF itself, then it's still clear from
+	 * do_debug() and we need to set it again to restore the user
+	 * state.  If we entered on the slow path, TF was already set.
+	 */
+	if (test_thread_flag(TIF_SINGLESTEP))
+		regs->flags |= X86_EFLAGS_TF;
+
 	/* do the secure computing check first */
 	secure_computing(regs->orig_ax);
 
-	if (test_thread_flag(TIF_SYSCALL_TRACE)
-	    && (current->ptrace & PT_PTRACED))
+	if (unlikely(test_thread_flag(TIF_SYSCALL_EMU)))
+		ret = -1L;
+
+	if (ret || test_thread_flag(TIF_SYSCALL_TRACE))
 		syscall_trace(regs);
 
 	if (unlikely(current->audit_context)) {
-		if (test_thread_flag(TIF_IA32)) {
+		if (IS_IA32)
 			audit_syscall_entry(AUDIT_ARCH_I386,
 					    regs->orig_ax,
 					    regs->bx, regs->cx,
 					    regs->dx, regs->si);
-		} else {
+#ifdef CONFIG_X86_64
+		else
 			audit_syscall_entry(AUDIT_ARCH_X86_64,
 					    regs->orig_ax,
 					    regs->di, regs->si,
 					    regs->dx, regs->r10);
-		}
+#endif
 	}
+
+	return ret ?: regs->orig_ax;
 }
 
-asmlinkage void syscall_trace_leave(struct pt_regs *regs)
+asmregparm void syscall_trace_leave(struct pt_regs *regs)
 {
 	if (unlikely(current->audit_context))
 		audit_syscall_exit(AUDITSC_RESULT(regs->ax), regs->ax);
 
-	if ((test_thread_flag(TIF_SYSCALL_TRACE)
-	     || test_thread_flag(TIF_SINGLESTEP))
-	    && (current->ptrace & PT_PTRACED))
+	if (test_thread_flag(TIF_SYSCALL_TRACE))
 		syscall_trace(regs);
-}
 
-#endif	/* CONFIG_X86_32 */
+	/*
+	 * If TIF_SYSCALL_EMU is set, we only get here because of
+	 * TIF_SINGLESTEP (i.e. this is PTRACE_SYSEMU_SINGLESTEP).
+	 * We already reported this syscall instruction in
+	 * syscall_trace_enter(), so don't do any more now.
+	 */
+	if (unlikely(test_thread_flag(TIF_SYSCALL_EMU)))
+		return;
+
+	/*
+	 * If we are single-stepping, synthesize a trap to follow the
+	 * system call instruction.
+	 */
+	if (test_thread_flag(TIF_SINGLESTEP) &&
+	    (current->ptrace & PT_PTRACED))
+		send_sigtrap(current, regs, 0);
+}
diff --git a/arch/x86/kernel/signal_32.c b/arch/x86/kernel/signal_32.c
index d923736..295b5f5 100644  
--- a/arch/x86/kernel/signal_32.c
+++ b/arch/x86/kernel/signal_32.c
@@ -657,12 +657,6 @@ static void do_signal(struct pt_regs *re
 void
 do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags)
 {
-	/* Pending single-step? */
-	if (thread_info_flags & _TIF_SINGLESTEP) {
-		regs->flags |= X86_EFLAGS_TF;
-		clear_thread_flag(TIF_SINGLESTEP);
-	}
-
 	/* deal with pending signal delivery */
 	if (thread_info_flags & _TIF_SIGPENDING)
 		do_signal(regs);
diff --git a/arch/x86/kernel/signal_64.c b/arch/x86/kernel/signal_64.c
index e53b267..bf87684 100644  
--- a/arch/x86/kernel/signal_64.c
+++ b/arch/x86/kernel/signal_64.c
@@ -487,12 +487,6 @@ static void do_signal(struct pt_regs *re
 void do_notify_resume(struct pt_regs *regs, void *unused,
 		      __u32 thread_info_flags)
 {
-	/* Pending single-step? */
-	if (thread_info_flags & _TIF_SINGLESTEP) {
-		regs->flags |= X86_EFLAGS_TF;
-		clear_thread_flag(TIF_SINGLESTEP);
-	}
-
 #ifdef CONFIG_X86_MCE
 	/* notify userspace of pending MCEs */
 	if (thread_info_flags & _TIF_MCE_NOTIFY)
diff --git a/arch/x86/kernel/step.c b/arch/x86/kernel/step.c
index 92c20fe..e8b9863 100644  
--- a/arch/x86/kernel/step.c
+++ b/arch/x86/kernel/step.c
@@ -105,6 +105,20 @@ static int is_setting_trap_flag(struct t
 static int enable_single_step(struct task_struct *child)
 {
 	struct pt_regs *regs = task_pt_regs(child);
+	unsigned long oflags;
+
+	/*
+	 * If we stepped into a sysenter/syscall insn, it trapped in
+	 * kernel mode; do_debug() cleared TF and set TIF_SINGLESTEP.
+	 * If user-mode had set TF itself, then it's still clear from
+	 * do_debug() and we need to set it again to restore the user
+	 * state so we don't wrongly set TIF_FORCED_TF below.
+	 * If enable_single_step() was used last and that is what
+	 * set TIF_SINGLESTEP, then both TF and TIF_FORCED_TF are
+	 * already set and our bookkeeping is fine.
+	 */
+	if (unlikely(test_tsk_thread_flag(child, TIF_SINGLESTEP)))
+		regs->flags |= X86_EFLAGS_TF;
 
 	/*
 	 * Always set TIF_SINGLESTEP - this guarantees that
@@ -113,11 +127,7 @@ static int enable_single_step(struct tas
 	 */
 	set_tsk_thread_flag(child, TIF_SINGLESTEP);
 
-	/*
-	 * If TF was already set, don't do anything else
-	 */
-	if (regs->flags & X86_EFLAGS_TF)
-		return 0;
+	oflags = regs->flags;
 
 	/* Set TF on the kernel stack.. */
 	regs->flags |= X86_EFLAGS_TF;
@@ -126,9 +136,22 @@ static int enable_single_step(struct tas
 	 * ..but if TF is changed by the instruction we will trace,
 	 * don't mark it as being "us" that set it, so that we
 	 * won't clear it by hand later.
+	 *
+	 * Note that if we don't actually execute the popf because
+	 * of a signal arriving right now or suchlike, we will lose
+	 * track of the fact that it really was "us" that set it.
 	 */
-	if (is_setting_trap_flag(child, regs))
+	if (is_setting_trap_flag(child, regs)) {
+		clear_tsk_thread_flag(child, TIF_FORCED_TF);
 		return 0;
+	}
+
+	/*
+	 * If TF was already set, check whether it was us who set it.
+	 * If not, we should never attempt a block step.
+	 */
+	if (oflags & X86_EFLAGS_TF)
+		return test_tsk_thread_flag(child, TIF_FORCED_TF);
 
 	set_tsk_thread_flag(child, TIF_FORCED_TF);
 
diff --git a/include/asm-powerpc/processor.h b/include/asm-powerpc/processor.h
index cf83f2d..865db56 100644  
--- a/include/asm-powerpc/processor.h
+++ b/include/asm-powerpc/processor.h
@@ -214,6 +214,8 @@ struct thread_struct {
 #define thread_saved_pc(tsk)    \
         ((tsk)->thread.regs? (tsk)->thread.regs->nip: 0)
 
+#define task_pt_regs(tsk)	((struct pt_regs *)(tsk)->thread.regs)
+
 unsigned long get_wchan(struct task_struct *p);
 
 #define KSTK_EIP(tsk)  ((tsk)->thread.regs? (tsk)->thread.regs->nip: 0)
diff --git a/include/asm-powerpc/ptrace.h b/include/asm-powerpc/ptrace.h
index 39023dd..6a3892d 100644  
--- a/include/asm-powerpc/ptrace.h
+++ b/include/asm-powerpc/ptrace.h
@@ -135,7 +135,9 @@ do {									      \
  * These are defined as per linux/ptrace.h, which see.
  */
 #define arch_has_single_step()	(1)
+#define arch_has_block_step()	(1)
 extern void user_enable_single_step(struct task_struct *);
+extern void user_enable_block_step(struct task_struct *);
 extern void user_disable_single_step(struct task_struct *);
 
 #endif /* __ASSEMBLY__ */
@@ -276,4 +278,6 @@ extern void user_disable_single_step(str
 #define PPC_PTRACE_PEEKUSR_3264  0x91
 #define PPC_PTRACE_POKEUSR_3264  0x90
 
+#define PTRACE_SINGLEBLOCK	0x100	/* resume execution until next branch */
+
 #endif /* _ASM_POWERPC_PTRACE_H */
diff --git a/include/asm-powerpc/thread_info.h b/include/asm-powerpc/thread_info.h
index d030f5c..e079e81 100644  
--- a/include/asm-powerpc/thread_info.h
+++ b/include/asm-powerpc/thread_info.h
@@ -116,7 +116,6 @@ static inline struct thread_info *curren
 #define TIF_SECCOMP		10	/* secure computing */
 #define TIF_RESTOREALL		11	/* Restore all regs (implies NOERROR) */
 #define TIF_NOERROR		12	/* Force successful syscall return */
-#define TIF_RESTORE_SIGMASK	13	/* Restore signal mask in do_signal */
 #define TIF_FREEZE		14	/* Freezing for suspend */
 #define TIF_RUNLATCH		15	/* Is the runlatch enabled? */
 #define TIF_ABI_PENDING		16	/* 32/64 bit switch needed */
@@ -134,21 +133,31 @@ static inline struct thread_info *curren
 #define _TIF_SECCOMP		(1<<TIF_SECCOMP)
 #define _TIF_RESTOREALL		(1<<TIF_RESTOREALL)
 #define _TIF_NOERROR		(1<<TIF_NOERROR)
-#define _TIF_RESTORE_SIGMASK	(1<<TIF_RESTORE_SIGMASK)
 #define _TIF_FREEZE		(1<<TIF_FREEZE)
 #define _TIF_RUNLATCH		(1<<TIF_RUNLATCH)
 #define _TIF_ABI_PENDING	(1<<TIF_ABI_PENDING)
 #define _TIF_SYSCALL_T_OR_A	(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP)
 
-#define _TIF_USER_WORK_MASK	( _TIF_SIGPENDING | \
-				 _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK)
+#define _TIF_USER_WORK_MASK	(_TIF_SIGPENDING | _TIF_NEED_RESCHED)
 #define _TIF_PERSYSCALL_MASK	(_TIF_RESTOREALL|_TIF_NOERROR)
 
 /* Bits in local_flags */
 /* Don't move TLF_NAPPING without adjusting the code in entry_32.S */
 #define TLF_NAPPING		0	/* idle thread enabled NAP mode */
+#define TLF_RESTORE_SIGMASK	1	/* Restore signal mask in do_signal */
 
 #define _TLF_NAPPING		(1 << TLF_NAPPING)
+#define _TLF_RESTORE_SIGMASK	(1 << TLF_RESTORE_SIGMASK)
+
+#ifndef __ASSEMBLY__
+#define HAVE_SET_RESTORE_SIGMASK	1
+static inline void set_restore_sigmask(void)
+{
+	struct thread_info *ti = current_thread_info();
+	ti->local_flags |= _TLF_RESTORE_SIGMASK;
+	set_bit(TIF_SIGPENDING, &ti->flags);
+}
+#endif	/* !__ASSEMBLY__ */
 
 #endif /* __KERNEL__ */
 
diff --git a/include/asm-x86/calling.h b/include/asm-x86/calling.h
index f13e62e..2bc162e 100644  
--- a/include/asm-x86/calling.h
+++ b/include/asm-x86/calling.h
@@ -104,7 +104,7 @@
 	.endif
 	.endm
 
-	.macro LOAD_ARGS offset
+	.macro LOAD_ARGS offset, skiprax=0
 	movq \offset(%rsp),    %r11
 	movq \offset+8(%rsp),  %r10
 	movq \offset+16(%rsp), %r9
@@ -113,7 +113,10 @@
 	movq \offset+48(%rsp), %rdx
 	movq \offset+56(%rsp), %rsi
 	movq \offset+64(%rsp), %rdi
+	.if \skiprax
+	.else
 	movq \offset+72(%rsp), %rax
+	.endif
 	.endm
 
 #define REST_SKIP	6*8
diff --git a/include/asm-x86/ptrace-abi.h b/include/asm-x86/ptrace-abi.h
index f224eb3..72e7b9d 100644  
--- a/include/asm-x86/ptrace-abi.h
+++ b/include/asm-x86/ptrace-abi.h
@@ -73,11 +73,11 @@
 
 #ifdef __x86_64__
 # define PTRACE_ARCH_PRCTL	  30
-#else
-# define PTRACE_SYSEMU		  31
-# define PTRACE_SYSEMU_SINGLESTEP 32
 #endif
 
+#define PTRACE_SYSEMU		  31
+#define PTRACE_SYSEMU_SINGLESTEP  32
+
 #define PTRACE_SINGLEBLOCK	33	/* resume execution until next branch */
 
 #ifndef __ASSEMBLY__
diff --git a/include/asm-x86/thread_info_32.h b/include/asm-x86/thread_info_32.h
index b633882..3267d9c 100644  
--- a/include/asm-x86/thread_info_32.h
+++ b/include/asm-x86/thread_info_32.h
@@ -160,10 +160,19 @@ static inline struct thread_info *curren
 #define _TIF_DS_AREA_MSR	(1 << TIF_DS_AREA_MSR)
 #define _TIF_BTS_TRACE_TS	(1 << TIF_BTS_TRACE_TS)
 
+/* work to do in syscall_trace_enter() */
+#define _TIF_WORK_SYSCALL_ENTRY	\
+	(_TIF_SYSCALL_TRACE | _TIF_SYSCALL_EMU | \
+	 _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | _TIF_SINGLESTEP)
+
+/* work to do in syscall_trace_leave() */
+#define _TIF_WORK_SYSCALL_EXIT	\
+	(_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP)
+
 /* work to do on interrupt/exception return */
 #define _TIF_WORK_MASK							\
 	(0x0000FFFF & ~(_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT |	\
-			_TIF_SECCOMP | _TIF_SYSCALL_EMU))
+			_TIF_SINGLESTEP | _TIF_SECCOMP | _TIF_SYSCALL_EMU))
 /* work to do on any return to u-space */
 #define _TIF_ALLWORK_MASK	(0x0000FFFF & ~_TIF_SECCOMP)
 
diff --git a/include/asm-x86/thread_info_64.h b/include/asm-x86/thread_info_64.h
index cb69f70..a531e79 100644  
--- a/include/asm-x86/thread_info_64.h
+++ b/include/asm-x86/thread_info_64.h
@@ -107,6 +107,7 @@ static inline struct thread_info *stack_
 #define TIF_NEED_RESCHED	3	/* rescheduling necessary */
 #define TIF_SINGLESTEP		4	/* reenable singlestep on user return*/
 #define TIF_IRET		5	/* force IRET */
+#define TIF_SYSCALL_EMU		6	/* syscall emulation active */
 #define TIF_SYSCALL_AUDIT	7	/* syscall auditing active */
 #define TIF_SECCOMP		8	/* secure computing */
 #define TIF_MCE_NOTIFY		10	/* notify userspace of an MCE */
@@ -130,6 +131,7 @@ static inline struct thread_info *stack_
 #define _TIF_SINGLESTEP		(1 << TIF_SINGLESTEP)
 #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
 #define _TIF_IRET		(1 << TIF_IRET)
+#define _TIF_SYSCALL_EMU	(1 << TIF_SYSCALL_EMU)
 #define _TIF_SYSCALL_AUDIT	(1 << TIF_SYSCALL_AUDIT)
 #define _TIF_SECCOMP		(1 << TIF_SECCOMP)
 #define _TIF_MCE_NOTIFY		(1 << TIF_MCE_NOTIFY)
@@ -146,15 +148,24 @@ static inline struct thread_info *stack_
 #define _TIF_BTS_TRACE_TS	(1 << TIF_BTS_TRACE_TS)
 #define _TIF_NOTSC		(1 << TIF_NOTSC)
 
+/* work to do in syscall_trace_enter() */
+#define _TIF_WORK_SYSCALL_ENTRY	\
+	(_TIF_SYSCALL_TRACE | _TIF_SYSCALL_EMU | \
+	 _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | _TIF_SINGLESTEP)
+
+/* work to do in syscall_trace_leave() */
+#define _TIF_WORK_SYSCALL_EXIT	\
+	(_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP)
+
 /* work to do on interrupt/exception return */
 #define _TIF_WORK_MASK							\
-	(0x0000FFFF &							\
-	 ~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP|_TIF_SECCOMP))
+	(0x0000FFFF & ~(_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT |	\
+			_TIF_SINGLESTEP | _TIF_SECCOMP | _TIF_SYSCALL_EMU))
 /* work to do on any return to user space */
 #define _TIF_ALLWORK_MASK (0x0000FFFF & ~_TIF_SECCOMP)
 
 #define _TIF_DO_NOTIFY_MASK						\
-	(_TIF_SIGPENDING|_TIF_SINGLESTEP|_TIF_MCE_NOTIFY|_TIF_HRTICK_RESCHED)
+	(_TIF_SIGPENDING|_TIF_MCE_NOTIFY|_TIF_HRTICK_RESCHED)
 
 /* flags to check in __switch_to() */
 #define _TIF_WORK_CTXSW							\
diff --git a/include/linux/init_task.h b/include/linux/init_task.h
index 9927a88..93c45ac 100644  
--- a/include/linux/init_task.h
+++ b/include/linux/init_task.h
@@ -140,8 +140,8 @@ extern struct group_info init_groups;
 		.nr_cpus_allowed = NR_CPUS,				\
 	},								\
 	.tasks		= LIST_HEAD_INIT(tsk.tasks),			\
-	.ptrace_children= LIST_HEAD_INIT(tsk.ptrace_children),		\
-	.ptrace_list	= LIST_HEAD_INIT(tsk.ptrace_list),		\
+	.ptraced	= LIST_HEAD_INIT(tsk.ptraced),			\
+	.ptrace_entry	= LIST_HEAD_INIT(tsk.ptrace_entry),		\
 	.real_parent	= &tsk,						\
 	.parent		= &tsk,						\
 	.children	= LIST_HEAD_INIT(tsk.children),			\
diff --git a/include/linux/sched.h b/include/linux/sched.h
index c5d3f84..75145b7 100644  
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1075,12 +1075,6 @@ struct task_struct {
 #endif
 
 	struct list_head tasks;
-	/*
-	 * ptrace_list/ptrace_children forms the list of my children
-	 * that were stolen by a ptracer.
-	 */
-	struct list_head ptrace_children;
-	struct list_head ptrace_list;
 
 	struct mm_struct *mm, *active_mm;
 
@@ -1102,18 +1096,25 @@ struct task_struct {
 	/* 
 	 * pointers to (original) parent process, youngest child, younger sibling,
 	 * older sibling, respectively.  (p->father can be replaced with 
-	 * p->parent->pid)
+	 * p->real_parent->pid)
 	 */
-	struct task_struct *real_parent; /* real parent process (when being debugged) */
-	struct task_struct *parent;	/* parent process */
+	struct task_struct *real_parent; /* real parent process */
+	struct task_struct *parent; /* recipient of SIGCHLD, wait4() reports */
 	/*
-	 * children/sibling forms the list of my children plus the
-	 * tasks I'm ptracing.
+	 * children/sibling forms the list of my natural children
 	 */
 	struct list_head children;	/* list of my children */
 	struct list_head sibling;	/* linkage in my parent's children list */
 	struct task_struct *group_leader;	/* threadgroup leader */
 
+	/*
+	 * ptraced is the list of tasks this task is using ptrace on.
+	 * This includes both natural children and PTRACE_ATTACH targets.
+	 * p->ptrace_entry is p's link on the p->parent->ptraced list.
+	 */
+	struct list_head ptraced;
+	struct list_head ptrace_entry;
+
 	/* PID/PID hash table linkage. */
 	struct pid_link pids[PIDTYPE_MAX];
 	struct list_head thread_group;
@@ -1870,9 +1871,6 @@ extern void wait_task_inactive(struct ta
 #define wait_task_inactive(p)	do { } while (0)
 #endif
 
-#define remove_parent(p)	list_del_init(&(p)->sibling)
-#define add_parent(p)		list_add_tail(&(p)->sibling,&(p)->parent->children)
-
 #define next_task(p)	list_entry(rcu_dereference((p)->tasks.next), struct task_struct, tasks)
 
 #define for_each_process(p) \
diff --git a/kernel/exit.c b/kernel/exit.c
index 8f6185e..fa7b700 100644  
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -70,7 +70,7 @@ static void __unhash_process(struct task
 		__get_cpu_var(process_counts)--;
 	}
 	list_del_rcu(&p->thread_group);
-	remove_parent(p);
+	list_del_init(&p->sibling);
 }
 
 /*
@@ -151,6 +151,18 @@ static void delayed_put_task_struct(stru
 	put_task_struct(container_of(rhp, struct task_struct, rcu));
 }
 
+/*
+ * Do final ptrace-related cleanup of a zombie being reaped.
+ *
+ * Called with write_lock(&tasklist_lock) held.
+ */
+static void ptrace_release_task(struct task_struct *p)
+{
+	BUG_ON(!list_empty(&p->ptraced));
+	ptrace_unlink(p);
+	BUG_ON(!list_empty(&p->ptrace_entry));
+}
+
 void release_task(struct task_struct * p)
 {
 	struct task_struct *leader;
@@ -159,8 +171,7 @@ repeat:
 	atomic_dec(&p->user->processes);
 	proc_flush_task(p);
 	write_lock_irq(&tasklist_lock);
-	ptrace_unlink(p);
-	BUG_ON(!list_empty(&p->ptrace_list) || !list_empty(&p->ptrace_children));
+	ptrace_release_task(p);
 	__exit_signal(p);
 
 	/*
@@ -314,9 +325,8 @@ static void reparent_to_kthreadd(void)
 
 	ptrace_unlink(current);
 	/* Reparent to init */
-	remove_parent(current);
 	current->real_parent = current->parent = kthreadd_task;
-	add_parent(current);
+	list_move_tail(&current->sibling, &current->real_parent->children);
 
 	/* Set the exit signal to SIGCHLD so we signal init on exit */
 	current->exit_signal = SIGCHLD;
@@ -691,37 +701,97 @@ static void exit_mm(struct task_struct *
 	mmput(mm);
 }
 
-static void
-reparent_thread(struct task_struct *p, struct task_struct *father, int traced)
+/*
+ * Return nonzero if @parent's children should reap themselves.
+ *
+ * Called with write_lock_irq(&tasklist_lock) held.
+ */
+static int ignoring_children(struct task_struct *parent)
 {
-	if (p->pdeath_signal)
-		/* We already hold the tasklist_lock here.  */
-		group_send_sig_info(p->pdeath_signal, SEND_SIG_NOINFO, p);
+	int ret;
+	struct sighand_struct *psig = parent->sighand;
+	unsigned long flags;
+	spin_lock_irqsave(&psig->siglock, flags);
+	ret = (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN ||
+	       (psig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT));
+	spin_unlock_irqrestore(&psig->siglock, flags);
+	return ret;
+}
 
-	/* Move the child from its dying parent to the new one.  */
-	if (unlikely(traced)) {
-		/* Preserve ptrace links if someone else is tracing this child.  */
-		list_del_init(&p->ptrace_list);
-		if (ptrace_reparented(p))
-			list_add(&p->ptrace_list, &p->real_parent->ptrace_children);
-	} else {
-		/* If this child is being traced, then we're the one tracing it
-		 * anyway, so let go of it.
+/*
+ * Detach all tasks we were using ptrace on.
+ * Any that need to be release_task'd are put on the @dead list.
+ *
+ * Called with write_lock(&tasklist_lock) held.
+ */
+static void ptrace_exit(struct task_struct *parent, struct list_head *dead)
+{
+	struct task_struct *p, *n;
+	int ign = -1;
+
+	list_for_each_entry_safe(p, n, &parent->ptraced, ptrace_entry) {
+		__ptrace_unlink(p);
+
+		if (p->exit_state != EXIT_ZOMBIE)
+			continue;
+
+		/*
+		 * If it's a zombie, our attachedness prevented normal
+		 * parent notification or self-reaping.  Do notification
+		 * now if it would have happened earlier.  If it should
+		 * reap itself, add it to the @dead list.  We can't call
+		 * release_task() here because we already hold tasklist_lock.
+		 *
+		 * If it's our own child, there is no notification to do.
+		 * But if our normal children self-reap, then this child
+		 * was prevented by ptrace and we must reap it now.
 		 */
-		p->ptrace = 0;
-		remove_parent(p);
-		p->parent = p->real_parent;
-		add_parent(p);
+		if (!task_detached(p) && thread_group_empty(p)) {
+			if (!same_thread_group(p->real_parent, parent))
+				do_notify_parent(p, p->exit_signal);
+			else {
+				if (ign < 0)
+					ign = ignoring_children(parent);
+				if (ign)
+					p->exit_signal = -1;
+			}
+		}
 
-		if (task_is_traced(p)) {
+		if (task_detached(p)) {
 			/*
-			 * If it was at a trace stop, turn it into
-			 * a normal stop since it's no longer being
-			 * traced.
+			 * Mark it as in the process of being reaped.
 			 */
-			ptrace_untrace(p);
+			p->exit_state = EXIT_DEAD;
+			list_add(&p->ptrace_entry, dead);
 		}
 	}
+}
+
+/*
+ * Finish up exit-time ptrace cleanup.
+ *
+ * Called without locks.
+ */
+static void ptrace_exit_finish(struct task_struct *parent,
+			       struct list_head *dead)
+{
+	struct task_struct *p, *n;
+
+	BUG_ON(!list_empty(&parent->ptraced));
+
+	list_for_each_entry_safe(p, n, dead, ptrace_entry) {
+		list_del_init(&p->ptrace_entry);
+		release_task(p);
+	}
+}
+
+static void reparent_thread(struct task_struct *p, struct task_struct *father)
+{
+	if (p->pdeath_signal)
+		/* We already hold the tasklist_lock here.  */
+		group_send_sig_info(p->pdeath_signal, SEND_SIG_NOINFO, p);
+
+	list_move_tail(&p->sibling, &p->real_parent->children);
 
 	/* If this is a threaded reparent there is no need to
 	 * notify anyone anything has happened.
@@ -736,7 +806,8 @@ reparent_thread(struct task_struct *p, s
 	/* If we'd notified the old parent about this child's death,
 	 * also notify the new parent.
 	 */
-	if (!traced && p->exit_state == EXIT_ZOMBIE &&
+	if (!ptrace_reparented(p) &&
+	    p->exit_state == EXIT_ZOMBIE &&
 	    !task_detached(p) && thread_group_empty(p))
 		do_notify_parent(p, p->exit_signal);
 
@@ -753,12 +824,15 @@ reparent_thread(struct task_struct *p, s
 static void forget_original_parent(struct task_struct *father)
 {
 	struct task_struct *p, *n, *reaper = father;
-	struct list_head ptrace_dead;
-
-	INIT_LIST_HEAD(&ptrace_dead);
+	LIST_HEAD(ptrace_dead);
 
 	write_lock_irq(&tasklist_lock);
 
+	/*
+	 * First clean up ptrace if we were using it.
+	 */
+	ptrace_exit(father, &ptrace_dead);
+
 	do {
 		reaper = next_thread(reaper);
 		if (reaper == father) {
@@ -767,58 +841,19 @@ static void forget_original_parent(struc
 		}
 	} while (reaper->flags & PF_EXITING);
 
-	/*
-	 * There are only two places where our children can be:
-	 *
-	 * - in our child list
-	 * - in our ptraced child list
-	 *
-	 * Search them and reparent children.
-	 */
 	list_for_each_entry_safe(p, n, &father->children, sibling) {
-		int ptrace;
-
-		ptrace = p->ptrace;
-
-		/* if father isn't the real parent, then ptrace must be enabled */
-		BUG_ON(father != p->real_parent && !ptrace);
-
-		if (father == p->real_parent) {
-			/* reparent with a reaper, real father it's us */
-			p->real_parent = reaper;
-			reparent_thread(p, father, 0);
-		} else {
-			/* reparent ptraced task to its real parent */
-			__ptrace_unlink (p);
-			if (p->exit_state == EXIT_ZOMBIE && !task_detached(p) &&
-			    thread_group_empty(p))
-				do_notify_parent(p, p->exit_signal);
-		}
-
-		/*
-		 * if the ptraced child is a detached zombie we must collect
-		 * it before we exit, or it will remain zombie forever since
-		 * we prevented it from self-reap itself while it was being
-		 * traced by us, to be able to see it in wait4.
-		 */
-		if (unlikely(ptrace && p->exit_state == EXIT_ZOMBIE && task_detached(p)))
-			list_add(&p->ptrace_list, &ptrace_dead);
-	}
-
-	list_for_each_entry_safe(p, n, &father->ptrace_children, ptrace_list) {
 		p->real_parent = reaper;
-		reparent_thread(p, father, 1);
+		if (p->parent == father) {
+			BUG_ON(p->ptrace);
+			p->parent = p->real_parent;
+		}
+		reparent_thread(p, father);
 	}
 
 	write_unlock_irq(&tasklist_lock);
 	BUG_ON(!list_empty(&father->children));
-	BUG_ON(!list_empty(&father->ptrace_children));
-
-	list_for_each_entry_safe(p, n, &ptrace_dead, ptrace_list) {
-		list_del_init(&p->ptrace_list);
-		release_task(p);
-	}
 
+	ptrace_exit_finish(father, &ptrace_dead);
 }
 
 /*
@@ -1179,13 +1214,6 @@ static int eligible_child(enum pid_type 
 			return 0;
 	}
 
-	/*
-	 * Do not consider detached threads that are
-	 * not ptraced:
-	 */
-	if (task_detached(p) && !p->ptrace)
-		return 0;
-
 	/* Wait for all children (clone and not) if __WALL is set;
 	 * otherwise, wait for clone children *only* if __WCLONE is
 	 * set; otherwise, wait for non-clone children *only*.  (Note:
@@ -1196,14 +1224,10 @@ static int eligible_child(enum pid_type 
 		return 0;
 
 	err = security_task_wait(p);
-	if (likely(!err))
-		return 1;
+	if (err)
+		return err;
 
-	if (type != PIDTYPE_PID)
-		return 0;
-	/* This child was explicitly requested, abort */
-	read_unlock(&tasklist_lock);
-	return err;
+	return 1;
 }
 
 static int wait_noreap_copyout(struct task_struct *p, pid_t pid, uid_t uid,
@@ -1237,7 +1261,7 @@ static int wait_noreap_copyout(struct ta
  * the lock and this task is uninteresting.  If we return nonzero, we have
  * released the lock and the system call should return.
  */
-static int wait_task_zombie(struct task_struct *p, int noreap,
+static int wait_task_zombie(struct task_struct *p, int options,
 			    struct siginfo __user *infop,
 			    int __user *stat_addr, struct rusage __user *ru)
 {
@@ -1245,7 +1269,10 @@ static int wait_task_zombie(struct task_
 	int retval, status, traced;
 	pid_t pid = task_pid_vnr(p);
 
-	if (unlikely(noreap)) {
+	if (!likely(options & WEXITED))
+		return 0;
+
+	if (unlikely(options & WNOWAIT)) {
 		uid_t uid = p->uid;
 		int exit_code = p->exit_code;
 		int why, status;
@@ -1395,21 +1422,24 @@ static int wait_task_zombie(struct task_
  * the lock and this task is uninteresting.  If we return nonzero, we have
  * released the lock and the system call should return.
  */
-static int wait_task_stopped(struct task_struct *p,
-			     int noreap, struct siginfo __user *infop,
+static int wait_task_stopped(int ptrace, struct task_struct *p,
+			     int options, struct siginfo __user *infop,
 			     int __user *stat_addr, struct rusage __user *ru)
 {
 	int retval, exit_code, why;
 	uid_t uid = 0; /* unneeded, required by compiler */
 	pid_t pid;
 
+	if (!(options & WUNTRACED))
+		return 0;
+
 	exit_code = 0;
 	spin_lock_irq(&p->sighand->siglock);
 
 	if (unlikely(!task_is_stopped_or_traced(p)))
 		goto unlock_sig;
 
-	if (!(p->ptrace & PT_PTRACED) && p->signal->group_stop_count > 0)
+	if (!ptrace && p->signal->group_stop_count > 0)
 		/*
 		 * A group stop is in progress and this is the group leader.
 		 * We won't report until all threads have stopped.
@@ -1420,7 +1450,7 @@ static int wait_task_stopped(struct task
 	if (!exit_code)
 		goto unlock_sig;
 
-	if (!noreap)
+	if (!unlikely(options & WNOWAIT))
 		p->exit_code = 0;
 
 	uid = p->uid;
@@ -1438,10 +1468,10 @@ unlock_sig:
 	 */
 	get_task_struct(p);
 	pid = task_pid_vnr(p);
-	why = (p->ptrace & PT_PTRACED) ? CLD_TRAPPED : CLD_STOPPED;
+	why = ptrace ? CLD_TRAPPED : CLD_STOPPED;
 	read_unlock(&tasklist_lock);
 
-	if (unlikely(noreap))
+	if (unlikely(options & WNOWAIT))
 		return wait_noreap_copyout(p, pid, uid,
 					   why, exit_code,
 					   infop, ru);
@@ -1475,7 +1505,7 @@ unlock_sig:
  * the lock and this task is uninteresting.  If we return nonzero, we have
  * released the lock and the system call should return.
  */
-static int wait_task_continued(struct task_struct *p, int noreap,
+static int wait_task_continued(struct task_struct *p, int options,
 			       struct siginfo __user *infop,
 			       int __user *stat_addr, struct rusage __user *ru)
 {
@@ -1483,6 +1513,9 @@ static int wait_task_continued(struct ta
 	pid_t pid;
 	uid_t uid;
 
+	if (!unlikely(options & WCONTINUED))
+		return 0;
+
 	if (!(p->signal->flags & SIGNAL_STOP_CONTINUED))
 		return 0;
 
@@ -1492,7 +1525,7 @@ static int wait_task_continued(struct ta
 		spin_unlock_irq(&p->sighand->siglock);
 		return 0;
 	}
-	if (!noreap)
+	if (!unlikely(options & WNOWAIT))
 		p->signal->flags &= ~SIGNAL_STOP_CONTINUED;
 	spin_unlock_irq(&p->sighand->siglock);
 
@@ -1518,89 +1551,161 @@ static int wait_task_continued(struct ta
 	return retval;
 }
 
+/*
+ * Consider @p for a wait by @parent.
+ *
+ * -ECHILD should be in *@notask_error before the first call.
+ * Returns nonzero for a final return, when we have unlocked tasklist_lock.
+ * Returns zero if the search for a child should continue;
+ * then *@notask_error is 0 if @p is an eligible child,
+ * or another error from security_task_wait(), or still -ECHILD.
+ */
+static int wait_consider_task(struct task_struct *parent, int ptrace,
+			      struct task_struct *p, int *notask_error,
+			      enum pid_type type, struct pid *pid, int options,
+			      struct siginfo __user *infop,
+			      int __user *stat_addr, struct rusage __user *ru)
+{
+	int ret = eligible_child(type, pid, options, p);
+	if (!ret)
+		return ret;
+
+	if (unlikely(ret < 0)) {
+		/*
+		 * If we have not yet seen any eligible child,
+		 * then let this error code replace -ECHILD.
+		 * A permission error will give the user a clue
+		 * to look for security policy problems, rather
+		 * than for mysterious wait bugs.
+		 */
+		if (*notask_error)
+			*notask_error = ret;
+	}
+
+	if (likely(!ptrace) && unlikely(p->ptrace)) {
+		/*
+		 * This child is hidden by ptrace.
+		 * We aren't allowed to see it now, but eventually we will.
+		 */
+		*notask_error = 0;
+		return 0;
+	}
+
+	if (p->exit_state == EXIT_DEAD)
+		return 0;
+
+	/*
+	 * We don't reap group leaders with subthreads.
+	 */
+	if (p->exit_state == EXIT_ZOMBIE && !delay_group_leader(p))
+		return wait_task_zombie(p, options, infop, stat_addr, ru);
+
+	/*
+	 * It's stopped or running now, so it might
+	 * later continue, exit, or stop again.
+	 */
+	*notask_error = 0;
+
+	if (task_is_stopped_or_traced(p))
+		return wait_task_stopped(ptrace, p, options,
+					 infop, stat_addr, ru);
+
+	return wait_task_continued(p, options, infop, stat_addr, ru);
+}
+
+/*
+ * Do the work of do_wait() for one thread in the group, @tsk.
+ *
+ * -ECHILD should be in *@notask_error before the first call.
+ * Returns nonzero for a final return, when we have unlocked tasklist_lock.
+ * Returns zero if the search for a child should continue; then
+ * *@notask_error is 0 if there were any eligible children,
+ * or another error from security_task_wait(), or still -ECHILD.
+ */
+static int do_wait_thread(struct task_struct *tsk, int *notask_error,
+			  enum pid_type type, struct pid *pid, int options,
+			  struct siginfo __user *infop, int __user *stat_addr,
+			  struct rusage __user *ru)
+{
+	struct task_struct *p;
+
+	list_for_each_entry(p, &tsk->children, sibling) {
+		/*
+		 * Do not consider detached threads.
+		 */
+		if (!task_detached(p)) {
+			int ret = wait_consider_task(tsk, 0, p, notask_error,
+						     type, pid, options,
+						     infop, stat_addr, ru);
+			if (ret)
+				return ret;
+		}
+	}
+
+	return 0;
+}
+
+static int ptrace_do_wait(struct task_struct *tsk, int *notask_error,
+			  enum pid_type type, struct pid *pid, int options,
+			  struct siginfo __user *infop, int __user *stat_addr,
+			  struct rusage __user *ru)
+{
+	struct task_struct *p;
+
+	/*
+	 * Traditionally we see ptrace'd stopped tasks regardless of options.
+	 */
+	options |= WUNTRACED;
+
+	list_for_each_entry(p, &tsk->ptraced, ptrace_entry) {
+		int ret = wait_consider_task(tsk, 1, p, notask_error,
+					     type, pid, options,
+					     infop, stat_addr, ru);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
 static long do_wait(enum pid_type type, struct pid *pid, int options,
 		    struct siginfo __user *infop, int __user *stat_addr,
 		    struct rusage __user *ru)
 {
 	DECLARE_WAITQUEUE(wait, current);
 	struct task_struct *tsk;
-	int flag, retval;
+	int retval;
 
 	add_wait_queue(&current->signal->wait_chldexit,&wait);
 repeat:
-	/* If there is nothing that can match our critier just get out */
+	/*
+	 * If there is nothing that can match our critiera just get out.
+	 * We will clear @retval to zero if we see any child that might later
+	 * match our criteria, even if we are not able to reap it yet.
+	 */
 	retval = -ECHILD;
 	if ((type < PIDTYPE_MAX) && (!pid || hlist_empty(&pid->tasks[type])))
 		goto end;
 
-	/*
-	 * We will set this flag if we see any child that might later
-	 * match our criteria, even if we are not able to reap it yet.
-	 */
-	flag = retval = 0;
 	current->state = TASK_INTERRUPTIBLE;
 	read_lock(&tasklist_lock);
 	tsk = current;
 	do {
-		struct task_struct *p;
-
-		list_for_each_entry(p, &tsk->children, sibling) {
-			int ret = eligible_child(type, pid, options, p);
-			if (!ret)
-				continue;
-
-			if (unlikely(ret < 0)) {
-				retval = ret;
-			} else if (task_is_stopped_or_traced(p)) {
-				/*
-				 * It's stopped now, so it might later
-				 * continue, exit, or stop again.
-				 */
-				flag = 1;
-				if (!(p->ptrace & PT_PTRACED) &&
-				    !(options & WUNTRACED))
-					continue;
-
-				retval = wait_task_stopped(p,
-						(options & WNOWAIT), infop,
-						stat_addr, ru);
-			} else if (p->exit_state == EXIT_ZOMBIE &&
-					!delay_group_leader(p)) {
-				/*
-				 * We don't reap group leaders with subthreads.
-				 */
-				if (!likely(options & WEXITED))
-					continue;
-				retval = wait_task_zombie(p,
-						(options & WNOWAIT), infop,
-						stat_addr, ru);
-			} else if (p->exit_state != EXIT_DEAD) {
-				/*
-				 * It's running now, so it might later
-				 * exit, stop, or stop and then continue.
-				 */
-				flag = 1;
-				if (!unlikely(options & WCONTINUED))
-					continue;
-				retval = wait_task_continued(p,
-						(options & WNOWAIT), infop,
-						stat_addr, ru);
-			}
-			if (retval != 0) /* tasklist_lock released */
-				goto end;
-		}
-		if (!flag) {
-			list_for_each_entry(p, &tsk->ptrace_children,
-								ptrace_list) {
-				flag = eligible_child(type, pid, options, p);
-				if (!flag)
-					continue;
-				if (likely(flag > 0))
-					break;
-				retval = flag;
-				goto end;
-			}
+		int tsk_result = do_wait_thread(tsk, &retval,
+						type, pid, options,
+						infop, stat_addr, ru);
+		if (!tsk_result)
+			tsk_result = ptrace_do_wait(tsk, &retval,
+						    type, pid, options,
+						    infop, stat_addr, ru);
+		if (tsk_result) {
+			/*
+			 * tasklist_lock is unlocked and we have a final result.
+			 */
+			retval = tsk_result;
+			goto end;
 		}
+
 		if (options & __WNOTHREAD)
 			break;
 		tsk = next_thread(tsk);
@@ -1608,16 +1713,14 @@ repeat:
 	} while (tsk != current);
 	read_unlock(&tasklist_lock);
 
-	if (flag) {
-		if (options & WNOHANG)
-			goto end;
+	if (!retval && !(options & WNOHANG)) {
 		retval = -ERESTARTSYS;
-		if (signal_pending(current))
-			goto end;
-		schedule();
-		goto repeat;
+		if (!signal_pending(current)) {
+			schedule();
+			goto repeat;
+		}
 	}
-	retval = -ECHILD;
+
 end:
 	current->state = TASK_RUNNING;
 	remove_wait_queue(&current->signal->wait_chldexit,&wait);
diff --git a/kernel/fork.c b/kernel/fork.c
index 19908b2..df8fe06 100644  
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1124,8 +1124,8 @@ static struct task_struct *copy_process(
 	 */
 	p->group_leader = p;
 	INIT_LIST_HEAD(&p->thread_group);
-	INIT_LIST_HEAD(&p->ptrace_children);
-	INIT_LIST_HEAD(&p->ptrace_list);
+	INIT_LIST_HEAD(&p->ptrace_entry);
+	INIT_LIST_HEAD(&p->ptraced);
 
 	/* Now that the task is set up, run cgroup callbacks if
 	 * necessary. We need to run them before the task is visible
@@ -1197,7 +1197,7 @@ static struct task_struct *copy_process(
 	}
 
 	if (likely(p->pid)) {
-		add_parent(p);
+		list_add_tail(&p->sibling, &p->real_parent->children);
 		if (unlikely(p->ptrace & PT_PTRACED))
 			__ptrace_link(p, current->parent);
 
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
index 6c19e94..acf80a4 100644  
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -33,13 +33,9 @@
  */
 void __ptrace_link(struct task_struct *child, struct task_struct *new_parent)
 {
-	BUG_ON(!list_empty(&child->ptrace_list));
-	if (child->parent == new_parent)
-		return;
-	list_add(&child->ptrace_list, &child->parent->ptrace_children);
-	remove_parent(child);
+	BUG_ON(!list_empty(&child->ptrace_entry));
+	list_add(&child->ptrace_entry, &new_parent->ptraced);
 	child->parent = new_parent;
-	add_parent(child);
 }
  
 /*
@@ -73,12 +69,8 @@ void __ptrace_unlink(struct task_struct 
 	BUG_ON(!child->ptrace);
 
 	child->ptrace = 0;
-	if (ptrace_reparented(child)) {
-		list_del_init(&child->ptrace_list);
-		remove_parent(child);
-		child->parent = child->real_parent;
-		add_parent(child);
-	}
+	child->parent = child->real_parent;
+	list_del_init(&child->ptrace_entry);
 
 	if (task_is_traced(child))
 		ptrace_untrace(child);
@@ -492,14 +484,33 @@ int ptrace_traceme(void)
 	/*
 	 * Are we already being traced?
 	 */
+repeat:
 	task_lock(current);
 	if (!(current->ptrace & PT_PTRACED)) {
+		/*
+		 * See ptrace_attach() comments about the locking here.
+		 */
+		unsigned long flags;
+		if (!write_trylock_irqsave(&tasklist_lock, flags)) {
+			task_unlock(current);
+			do {
+				cpu_relax();
+			} while (!write_can_lock(&tasklist_lock));
+			goto repeat;
+		}
+
 		ret = security_ptrace(current->parent, current);
+
 		/*
 		 * Set the ptrace bit in the process ptrace flags.
+		 * Then link us on our parent's ptraced list.
 		 */
-		if (!ret)
+		if (!ret) {
 			current->ptrace |= PT_PTRACED;
+			__ptrace_link(current, current->real_parent);
+		}
+
+		write_unlock_irqrestore(&tasklist_lock, flags);
 	}
 	task_unlock(current);
 	return ret;

linux-2.6-tracehook.patch:

--- NEW FILE linux-2.6-tracehook.patch ---
 arch/Kconfig                      |   18 ++
 arch/ia64/Kconfig                 |    1 +
 arch/ia64/kernel/perfmon.c        |   11 +-
 arch/ia64/kernel/process.c        |   21 +-
 arch/ia64/kernel/ptrace.c         |   43 +--
 arch/ia64/kernel/signal.c         |    8 +
 arch/mips/kernel/irixelf.c        |    2 -
 arch/powerpc/Kconfig              |    1 +
 arch/powerpc/kernel/entry_32.S    |   11 +-
 arch/powerpc/kernel/entry_64.S    |   10 +-
 arch/powerpc/kernel/ptrace.c      |   47 ++--
 arch/powerpc/kernel/signal.c      |   21 ++-
 arch/sparc64/Kconfig              |    1 +
 arch/sparc64/kernel/ptrace.c      |   24 +--
 arch/sparc64/kernel/rtrap.S       |    6 +-
 arch/sparc64/kernel/signal.c      |    5 +
 arch/x86/Kconfig                  |    1 +
 arch/x86/ia32/ia32_aout.c         |    6 -
 arch/x86/kernel/ptrace.c          |   34 +--
 arch/x86/kernel/signal_32.c       |   11 +-
 arch/x86/kernel/signal_64.c       |   49 +---
 fs/binfmt_aout.c                  |    6 -
 fs/binfmt_elf.c                   |    6 -
 fs/binfmt_elf_fdpic.c             |    7 -
 fs/binfmt_flat.c                  |    3 -
 fs/binfmt_som.c                   |    2 -
 fs/exec.c                         |   12 +-
 fs/proc/array.c                   |    9 +-
 fs/proc/base.c                    |   39 +++-
 include/asm-generic/syscall.h     |  141 +++++++++
 include/asm-ia64/thread_info.h    |    3 -
 include/asm-powerpc/ptrace.h      |    1 +
 include/asm-powerpc/signal.h      |    3 +-
 include/asm-powerpc/syscall.h     |   73 +++++
 include/asm-powerpc/thread_info.h |    5 +-
 include/asm-sparc64/ptrace.h      |    1 +
 include/asm-sparc64/syscall.h     |   70 +++++
 include/asm-sparc64/thread_info.h |    8 +-
 include/asm-x86/ptrace.h          |    5 +
 include/asm-x86/syscall.h         |  210 ++++++++++++++
 include/asm-x86/thread_info_32.h  |    2 +
 include/asm-x86/thread_info_64.h  |    4 +-
 include/linux/ptrace.h            |   72 +++++
 include/linux/sched.h             |   10 +-
 include/linux/tracehook.h         |  575 +++++++++++++++++++++++++++++++++++++
 kernel/exit.c                     |   53 ++---
 kernel/fork.c                     |   74 ++---
 kernel/kthread.c                  |    2 +-
 kernel/ptrace.c                   |    2 +-
 kernel/sched.c                    |   29 ++-
 kernel/signal.c                   |   99 ++++---
 lib/Makefile                      |    2 +
 lib/syscall.c                     |   75 +++++
 mm/nommu.c                        |    4 +-
 security/selinux/hooks.c          |   22 +--
 55 files changed, 1589 insertions(+), 371 deletions(-)

diff --git a/arch/Kconfig b/arch/Kconfig
index 3ea332b..1955fbd 100644  
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -39,3 +39,21 @@ config HAVE_KRETPROBES
 
 config HAVE_DMA_ATTRS
 	def_bool n
+
+#
+# An arch should select this if it provides all these things:
+#
+#	task_pt_regs()		in asm/processor.h or asm/ptrace.h
+#	arch_has_single_step()	if there is hardware single-step support
+#	arch_has_block_step()	if there is hardware block-step support
+#	arch_ptrace()		and not #define __ARCH_SYS_PTRACE
+#	compat_arch_ptrace()	and #define __ARCH_WANT_COMPAT_SYS_PTRACE
+#	asm/syscall.h		supplying asm-generic/syscall.h interface
+#	linux/regset.h		user_regset interfaces
+#	CORE_DUMP_USE_REGSET	#define'd in linux/elf.h
+#	TIF_SYSCALL_TRACE	calls tracehook_report_syscall_{entry,exit}
+#	TIF_NOTIFY_RESUME	calls tracehook_notify_resume()
+#	signal delivery		calls tracehook_signal_handler()
+#
+config HAVE_ARCH_TRACEHOOK
+	def_bool n
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 16be414..f23a54a 100644  
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -19,6 +19,7 @@ config IA64
 	select HAVE_OPROFILE
 	select HAVE_KPROBES
 	select HAVE_KRETPROBES
+	select HAVE_ARCH_TRACEHOOK
 	select HAVE_DMA_ATTRS
 	select HAVE_KVM
 	default y
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c
index 7714a97..189d525 100644  
--- a/arch/ia64/kernel/perfmon.c
+++ b/arch/ia64/kernel/perfmon.c
@@ -40,6 +40,7 @@
 #include <linux/capability.h>
 #include <linux/rcupdate.h>
 #include <linux/completion.h>
+#include <linux/tracehook.h>
 
 #include <asm/errno.h>
 #include <asm/intrinsics.h>
@@ -2626,7 +2627,7 @@ pfm_task_incompatible(pfm_context_t *ctx
 	/*
 	 * make sure the task is off any CPU
 	 */
-	wait_task_inactive(task);
+	wait_task_inactive(task, 0);
 
 	/* more to come... */
 
@@ -3684,7 +3685,7 @@ pfm_restart(pfm_context_t *ctx, void *ar
 
 		PFM_SET_WORK_PENDING(task, 1);
 
-		tsk_set_notify_resume(task);
+		set_notify_resume(task);
 
 		/*
 		 * XXX: send reschedule if task runs on another CPU
@@ -4774,7 +4775,7 @@ recheck:
 
 		UNPROTECT_CTX(ctx, flags);
 
-		wait_task_inactive(task);
+		wait_task_inactive(task, 0);
 
 		PROTECT_CTX(ctx, flags);
 
@@ -5044,8 +5045,6 @@ pfm_handle_work(void)
 
 	PFM_SET_WORK_PENDING(current, 0);
 
-	tsk_clear_notify_resume(current);
-
 	regs = task_pt_regs(current);
 
 	/*
@@ -5414,7 +5413,7 @@ pfm_overflow_handler(struct task_struct 
 			 * when coming from ctxsw, current still points to the
 			 * previous task, therefore we must work with task and not current.
 			 */
-			tsk_set_notify_resume(task);
+			set_notify_resume(task);
 		}
 		/*
 		 * defer until state is changed (shorten spin window). the context is locked
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c
index a3a34b4..ff448fe 100644  
--- a/arch/ia64/kernel/process.c
+++ b/arch/ia64/kernel/process.c
@@ -156,21 +156,6 @@ show_regs (struct pt_regs *regs)
 		show_stack(NULL, NULL);
 }
 
-void tsk_clear_notify_resume(struct task_struct *tsk)
-{
-#ifdef CONFIG_PERFMON
-	if (tsk->thread.pfm_needs_checking)
-		return;
-#endif
-	if (test_ti_thread_flag(task_thread_info(tsk), TIF_RESTORE_RSE))
-		return;
-	clear_ti_thread_flag(task_thread_info(tsk), TIF_NOTIFY_RESUME);
-}
-
-/*
- * do_notify_resume_user():
- *	Called from notify_resume_user at entry.S, with interrupts disabled.
- */
 void
 do_notify_resume_user(sigset_t *unused, struct sigscratch *scr, long in_syscall)
 {
@@ -199,6 +184,11 @@ do_notify_resume_user(sigset_t *unused, 
 		ia64_do_signal(scr, in_syscall);
 	}
 
+	if (test_thread_flag(TIF_NOTIFY_RESUME)) {
+		clear_thread_flag(TIF_NOTIFY_RESUME);
+		tracehook_notify_resume(&scr->pt);
+	}
+
 	/* copy user rbs to kernel rbs */
 	if (unlikely(test_thread_flag(TIF_RESTORE_RSE))) {
 		local_irq_enable();	/* force interrupt enable */
diff --git a/arch/ia64/kernel/ptrace.c b/arch/ia64/kernel/ptrace.c
index 2a9943b..3ba40a1 100644  
--- a/arch/ia64/kernel/ptrace.c
+++ b/arch/ia64/kernel/ptrace.c
@@ -22,6 +22,7 @@
 #include <linux/signal.h>
 #include <linux/regset.h>
 #include <linux/elf.h>
+#include <linux/tracehook.h>
[...2934 lines suppressed...]
+		do_group_exit(info->si_signo);
 		/* NOTREACHED */
 	}
 	spin_unlock_irq(&sighand->siglock);
@@ -1909,7 +1937,7 @@ void exit_signals(struct task_struct *ts
 out:
 	spin_unlock_irq(&tsk->sighand->siglock);
 
-	if (unlikely(group_stop)) {
+	if (unlikely(group_stop) && tracehook_notify_jctl(1, CLD_STOPPED)) {
 		read_lock(&tasklist_lock);
 		do_notify_parent_cldstop(tsk, CLD_STOPPED);
 		read_unlock(&tasklist_lock);
@@ -1921,7 +1949,6 @@ EXPORT_SYMBOL_GPL(dequeue_signal);
 EXPORT_SYMBOL(flush_signals);
 EXPORT_SYMBOL(force_sig);
 EXPORT_SYMBOL(kill_proc);
-EXPORT_SYMBOL(ptrace_notify);
 EXPORT_SYMBOL(send_sig);
 EXPORT_SYMBOL(send_sig_info);
 EXPORT_SYMBOL(sigprocmask);
@@ -2325,7 +2352,7 @@ int do_sigaction(int sig, struct k_sigac
 		 *   (for example, SIGCHLD), shall cause the pending signal to
 		 *   be discarded, whether or not it is blocked"
 		 */
-		if (__sig_ignored(t, sig)) {
+		if (sig_handler_ignored(sig_handler(t, sig), sig)) {
 			sigemptyset(&mask);
 			sigaddset(&mask, sig);
 			rm_from_queue_full(&mask, &t->signal->shared_pending);
diff --git a/lib/Makefile b/lib/Makefile
index 74b0cfb..62dfd16 100644  
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -72,6 +72,8 @@ lib-$(CONFIG_GENERIC_BUG) += bug.o
 
 obj-$(CONFIG_HAVE_LMB) += lmb.o
 
+obj-$(CONFIG_HAVE_ARCH_TRACEHOOK) += syscall.o
+
 hostprogs-y	:= gen_crc32table
 clean-files	:= crc32table.h
 
diff --git a/lib/syscall.c b/lib/syscall.c
new file mode 100644
index ...a4f7067 100644  
--- /dev/null
+++ b/lib/syscall.c
@@ -0,0 +1,75 @@
+#include <linux/ptrace.h>
+#include <linux/sched.h>
+#include <linux/module.h>
+#include <asm/syscall.h>
+
+static int collect_syscall(struct task_struct *target, long *callno,
+			   unsigned long args[6], unsigned int maxargs,
+			   unsigned long *sp, unsigned long *pc)
+{
+	struct pt_regs *regs = task_pt_regs(target);
+	if (unlikely(!regs))
+		return -EAGAIN;
+
+	*sp = user_stack_pointer(regs);
+	*pc = instruction_pointer(regs);
+
+	*callno = syscall_get_nr(target, regs);
+	if (*callno != -1L && maxargs > 0)
+		syscall_get_arguments(target, regs, 0, maxargs, args);
+
+	return 0;
+}
+
+/**
+ * task_current_syscall - Discover what a blocked task is doing.
+ * @target:		thread to examine
+ * @callno:		filled with system call number or -1
+ * @args:		filled with @maxargs system call arguments
+ * @maxargs:		number of elements in @args to fill
+ * @sp:			filled with user stack pointer
+ * @pc:			filled with user PC
+ *
+ * If @target is blocked in a system call, returns zero with *@callno
+ * set to the the call's number and @args filled in with its arguments.
+ * Registers not used for system call arguments may not be available and
+ * it is not kosher to use &struct user_regset calls while the system
+ * call is still in progress.  Note we may get this result if @target
+ * has finished its system call but not yet returned to user mode, such
+ * as when it's stopped for signal handling or syscall exit tracing.
+ *
+ * If @target is blocked in the kernel during a fault or exception,
+ * returns zero with *@callno set to -1 and does not fill in @args.
+ * If so, it's now safe to examine @target using &struct user_regset
+ * get() calls as long as we're sure @target won't return to user mode.
+ *
+ * Returns -%EAGAIN if @target does not remain blocked.
+ *
+ * Returns -%EINVAL if @maxargs is too large (maximum is six).
+ */
+int task_current_syscall(struct task_struct *target, long *callno,
+			 unsigned long args[6], unsigned int maxargs,
+			 unsigned long *sp, unsigned long *pc)
+{
+	long state;
+	unsigned long ncsw;
+
+	if (unlikely(maxargs > 6))
+		return -EINVAL;
+
+	if (target == current)
+		return collect_syscall(target, callno, args, maxargs, sp, pc);
+
+	state = target->state;
+	if (unlikely(!state))
+		return -EAGAIN;
+
+	ncsw = wait_task_inactive(target, state);
+	if (unlikely(!ncsw) ||
+	    unlikely(collect_syscall(target, callno, args, maxargs, sp, pc)) ||
+	    unlikely(wait_task_inactive(target, state) != ncsw))
+		return -EAGAIN;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(task_current_syscall);
diff --git a/mm/nommu.c b/mm/nommu.c
index 4462b6a..5edccd9 100644  
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -22,7 +22,7 @@
 #include <linux/pagemap.h>
 #include <linux/slab.h>
 #include <linux/vmalloc.h>
-#include <linux/ptrace.h>
+#include <linux/tracehook.h>
 #include <linux/blkdev.h>
 #include <linux/backing-dev.h>
 #include <linux/mount.h>
@@ -745,7 +745,7 @@ static unsigned long determine_vm_flags(
 	 * it's being traced - otherwise breakpoints set in it may interfere
 	 * with another untraced process
 	 */
-	if ((flags & MAP_PRIVATE) && (current->ptrace & PT_PTRACED))
+	if ((flags & MAP_PRIVATE) && tracehook_expect_breakpoints(current))
 		vm_flags &= ~VM_MAYSHARE;
 
 	return vm_flags;
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index 1c864c0..f92c6af 100644  
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -24,7 +24,7 @@
 
 #include <linux/init.h>
 #include <linux/kernel.h>
-#include <linux/ptrace.h>
+#include <linux/tracehook.h>
 #include <linux/errno.h>
 #include <linux/sched.h>
 #include <linux/security.h>
@@ -1910,22 +1910,6 @@ static int selinux_vm_enough_memory(stru
 	return __vm_enough_memory(mm, pages, cap_sys_admin);
 }
 
-/**
- * task_tracer_task - return the task that is tracing the given task
- * @task:		task to consider
- *
- * Returns NULL if noone is tracing @task, or the &struct task_struct
- * pointer to its tracer.
- *
- * Must be called under rcu_read_lock().
- */
-static struct task_struct *task_tracer_task(struct task_struct *task)
-{
-	if (task->ptrace & PT_PTRACED)
-		return rcu_dereference(task->parent);
-	return NULL;
-}
-
 /* binprm security operations */
 
 static int selinux_bprm_alloc_security(struct linux_binprm *bprm)
@@ -2177,7 +2161,7 @@ static void selinux_bprm_apply_creds(str
 			u32 ptsid = 0;
 
 			rcu_read_lock();
-			tracer = task_tracer_task(current);
+			tracer = tracehook_tracer_task(current);
 			if (likely(tracer != NULL)) {
 				sec = tracer->security;
 				ptsid = sec->sid;
@@ -5205,7 +5189,7 @@ static int selinux_setprocattr(struct ta
 		   Otherwise, leave SID unchanged and fail. */
 		task_lock(p);
 		rcu_read_lock();
-		tracer = task_tracer_task(p);
+		tracer = tracehook_tracer_task(p);
 		if (tracer != NULL) {
 			struct task_security_struct *ptsec = tracer->security;
 			u32 ptsid = ptsec->sid;


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

iD8DBQBIeogDyGugalF9Dw4RAk4IAJ4g+RxY+bf8pYzXhWQ6ltKoM+Z3VQCfYFI6
wUkbvVqKn/rTx7kqTtudjVg=
=4xMU
-----END PGP SIGNATURE-----


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

iD8DBQBImeASyGugalF9Dw4RAjCCAJ0fgLJt3VlTWHaJPnVXfaUkBfmT6gCffJ/W
bPteh1M5hcvyCq4qtsuq1tM=
=Ixm0
-----END PGP SIGNATURE-----


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/.cvsignore,v
retrieving revision 1.733
retrieving revision 1.734
diff -u -r1.733 -r1.734
--- .cvsignore	1 Aug 2008 21:36:30 -0000	1.733
+++ .cvsignore	8 Aug 2008 18:56:00 -0000	1.734
@@ -1,6 +1,6 @@
 clog
 kernel-2.6.*.config
 temp-*
-kernel-2.6.25
-linux-2.6.25.tar.bz2
-patch-2.6.25.14.bz2
+kernel-2.6.26
+linux-2.6.26.tar.bz2
+patch-2.6.26.2.bz2


Index: config-debug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-debug,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- config-debug	14 Jun 2008 07:55:58 -0000	1.8
+++ config-debug	8 Aug 2008 18:56:00 -0000	1.9
@@ -3,7 +3,6 @@
 CONFIG_SND_DEBUG_DETECT=y
 CONFIG_SND_PCM_XRUN_DEBUG=y
 
-CONFIG_DEBUG_IGNORE_QUIET=y
 CONFIG_DEBUG_MUTEXES=y
 CONFIG_DEBUG_RT_MUTEXES=y
 CONFIG_DEBUG_LOCK_ALLOC=y
@@ -33,4 +32,12 @@
 
 CONFIG_USB_DEBUG=y
 
+CONFIG_DEBUG_WRITECOUNT=y
+CONFIG_DEBUG_OBJECTS=y
+# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
+CONFIG_DEBUG_OBJECTS_FREE=y
+CONFIG_DEBUG_OBJECTS_TIMERS=y
+
+CONFIG_X86_PTDUMP=y
+
 CONFIG_CAN_DEBUG_DEVICES=y


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-generic,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -r1.76 -r1.77
--- config-generic	1 Aug 2008 15:28:05 -0000	1.76
+++ config-generic	8 Aug 2008 18:56:00 -0000	1.77
@@ -61,6 +61,7 @@
 #
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_LOAD is not set
 # CONFIG_MODULE_FORCE_UNLOAD is not set
 # CONFIG_MODVERSIONS is not set
 CONFIG_MODULE_SRCVERSION_ALL=y
@@ -96,7 +97,7 @@
 CONFIG_PCMCIA=y
 CONFIG_PCMCIA_LOAD_CIS=y
 # CONFIG_PCMCIA_DEBUG is not set
-CONFIG_YENTA=y
+CONFIG_YENTA=m
 CONFIG_CARDBUS=y
 CONFIG_I82092=m
 CONFIG_PD6729=m
@@ -106,6 +107,7 @@
 CONFIG_MMC=m
 CONFIG_MMC_BLOCK_BOUNCE=y
 CONFIG_SDIO_UART=m
+# CONFIG_MMC_TEST is not set
 # CONFIG_MMC_DEBUG is not set
 # CONFIG_MMC_UNSAFE_RESUME is not set
 CONFIG_MMC_BLOCK=m
@@ -158,6 +160,7 @@
 CONFIG_MTD=m
 # CONFIG_MTD_DEBUG is not set
 CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_AR7_PARTS=m
 CONFIG_MTD_CONCAT=m
 CONFIG_MTD_CMDLINE_PARTS=y
 #
@@ -412,6 +415,7 @@
 CONFIG_VIRTIO_PCI=m
 CONFIG_VIRTIO_BALLOON=m
 CONFIG_VIRTIO_NET=m
+CONFIG_HW_RANDOM_VIRTIO=m
 
 #
 # SCSI device support
@@ -490,13 +494,16 @@
 CONFIG_MEGARAID_SAS=m
 
 CONFIG_ATA=m
+CONFIG_ATA_SFF=y
 CONFIG_ATA_PIIX=m
+CONFIG_ATA_ACPI=y
 CONFIG_BLK_DEV_SX8=m
 CONFIG_PDC_ADMA=m
 CONFIG_SATA_AHCI=m
 CONFIG_SATA_INIC162X=m
 CONFIG_SATA_MV=m
 CONFIG_SATA_NV=m
+CONFIG_SATA_PMP=y
 CONFIG_SATA_PROMISE=m
 CONFIG_SATA_QSTOR=m
 CONFIG_SATA_SIL=m
@@ -550,6 +557,7 @@
 # CONFIG_PATA_SC1200 is not set
 CONFIG_PATA_SERVERWORKS=m
 CONFIG_PATA_PDC2027X=m
+CONFIG_PATA_SCH=m
 CONFIG_PATA_SIL680=m
 CONFIG_PATA_SIS=m
 CONFIG_PATA_TRIFLEX=m
@@ -558,7 +566,7 @@
 
 CONFIG_SCSI_BUSLOGIC=m
 CONFIG_SCSI_INITIO=m
-# CONFIG_SCSI_OMIT_FLASHPOINT is not set
+CONFIG_SCSI_FLASHPOINT=y
 # CONFIG_SCSI_DMX3191D is not set
 # CONFIG_SCSI_EATA is not set
 # CONFIG_SCSI_EATA_PIO is not set
@@ -750,6 +758,8 @@
 CONFIG_IPV6_TUNNEL=m
 CONFIG_IPV6_SUBTREES=y
 CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_MROUTE=y
+CONFIG_IPV6_PIMSM_V2=y
 
 CONFIG_NET_9P=m
 CONFIG_NET_9P_FD=m
@@ -837,6 +847,7 @@
 CONFIG_NF_CONNTRACK_IPV6=m
 CONFIG_NF_NAT=m
 CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_CT_PROTO_DCCP=m
 CONFIG_NF_CT_PROTO_SCTP=m
 CONFIG_NF_CT_NETLINK=m
 CONFIG_NF_CT_PROTO_UDPLITE=m
@@ -894,25 +905,26 @@
 # Bridge: Netfilter Configuration
 #
 CONFIG_BRIDGE_NF_EBTABLES=m
-CONFIG_BRIDGE_EBT_BROUTE=m
-CONFIG_BRIDGE_EBT_T_FILTER=m
-CONFIG_BRIDGE_EBT_T_NAT=m
 CONFIG_BRIDGE_EBT_802_3=m
 CONFIG_BRIDGE_EBT_AMONG=m
 CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_DNAT=m
 CONFIG_BRIDGE_EBT_IP=m
 CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_LOG=m
 CONFIG_BRIDGE_EBT_MARK=m
-CONFIG_BRIDGE_EBT_PKTTYPE=m
-CONFIG_BRIDGE_EBT_STP=m
-CONFIG_BRIDGE_EBT_VLAN=m
-CONFIG_BRIDGE_EBT_ARPREPLY=m
-CONFIG_BRIDGE_EBT_DNAT=m
 CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_NFLOG=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
 CONFIG_BRIDGE_EBT_REDIRECT=m
 CONFIG_BRIDGE_EBT_SNAT=m
-CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
 CONFIG_BRIDGE_EBT_ULOG=m
+CONFIG_BRIDGE_EBT_VLAN=m
 CONFIG_XFRM=y
 CONFIG_XFRM_MIGRATE=y
 CONFIG_XFRM_SUB_POLICY=y
@@ -1024,7 +1036,7 @@
 CONFIG_NET_PKTGEN=m
 # CONFIG_NET_TCPPROBE is not set
 CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
+CONFIG_NETDEVICES_MULTIQUEUE=y
 
 #
 # ARCnet devices
@@ -1145,8 +1157,8 @@
 CONFIG_BNX2=m
 CONFIG_QLA3XXX=m
 CONFIG_ATL1=m
-CONFIG_ATL2=m
 CONFIG_ATL1E=m
+CONFIG_ATL2=m
 # CONFIG_EEPRO100 is not set
 CONFIG_E100=m
 CONFIG_FEALNX=m
@@ -1194,6 +1206,7 @@
 CONFIG_R8169=m
 CONFIG_R8169_NAPI=y
 CONFIG_R8169_VLAN=y
+CONFIG_SFC=m
 # CONFIG_SK98LIN is not set
 CONFIG_SKGE=m
 # CONFIG_SKGE_DEBUG is not set
@@ -1251,6 +1264,7 @@
 # CONFIG_PCMCIA_RAYCS is not set
 
 CONFIG_MAC80211=m
+CONFIG_MAC80211_QOS=y
 CONFIG_MAC80211_RC_DEFAULT_PID=y
 # CONFIG_MAC80211_RC_DEFAULT_SIMPLE is not set
 CONFIG_MAC80211_RC_DEFAULT="pid"
@@ -1261,6 +1275,8 @@
 CONFIG_MAC80211_DEBUGFS=y
 # CONFIG_MAC80211_DEBUG_MENU is not set
 # CONFIG_MAC80211_DEBUG is not set
+# CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set
+
 CONFIG_IEEE80211=m
 CONFIG_IEEE80211_DEBUG=y
 CONFIG_IEEE80211_CRYPT_WEP=m
@@ -1270,8 +1286,6 @@
 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
@@ -1307,16 +1321,16 @@
 CONFIG_LIBERTAS_CS=m
 CONFIG_LIBERTAS_SDIO=m
 CONFIG_LIBERTAS_DEBUG=y
+CONFIG_IWLCORE_RFKILL=y
 CONFIG_IWLWIFI_LEDS=y
 CONFIG_IWLWIFI_RUN_TIME_CALIB=y
-CONFIG_IWLWIFI_RFKILL=y
-CONFIG_IWL4965=m
 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_QOS=y
 CONFIG_IWL4965_HT=y
 CONFIG_IWL4965_LEDS=y
 CONFIG_IWL5000=y
@@ -1325,7 +1339,6 @@
 CONFIG_IWL3945_RFKILL=y
 CONFIG_IWL3945_DEBUG=y
 CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
-CONFIG_IWL3945_QOS=y
 CONFIG_IWL3945_LEDS=y
 CONFIG_MAC80211_HWSIM=m
 CONFIG_NORTEL_HERMES=m
@@ -1698,6 +1711,7 @@
 CONFIG_JOYSTICK_XPAD=m
 CONFIG_JOYSTICK_XPAD_FF=y
 CONFIG_JOYSTICK_XPAD_LEDS=y
+CONFIG_JOYSTICK_ZHENHUA=m
 CONFIG_INPUT_TOUCHSCREEN=y
 CONFIG_TOUCHSCREEN_GUNZE=m
 CONFIG_TOUCHSCREEN_ELO=m
@@ -1709,6 +1723,7 @@
 CONFIG_TOUCHSCREEN_TOUCHWIN=m
 CONFIG_TOUCHSCREEN_UCB1400=m
 CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+# CONFIG_TOUCHSCREEN_WM97XX is not set
 CONFIG_INPUT_MISC=y
 CONFIG_INPUT_PCSPKR=m
 CONFIG_INPUT_UINPUT=m
@@ -1822,6 +1837,7 @@
 CONFIG_I2C_PARPORT_LIGHT=m
 CONFIG_I2C_PASEMI=m
 CONFIG_I2C_PCA_ISA=m
+CONFIG_I2C_PCA_PLATFORM=m
 # CONFIG_I2C_PIIX4 is not set
 CONFIG_I2C_PROSAVAGE=m
 CONFIG_I2C_SAVAGE4=m
@@ -1831,7 +1847,7 @@
 # CONFIG_I2C_SIS96X is not set
 CONFIG_I2C_SIMTEC=m
 CONFIG_I2C_STUB=m
-# CONFIG_I2C_TINY_USB is not set
+CONFIG_I2C_TINY_USB=m
 # CONFIG_I2C_TAOS_EVM is not set
 # CONFIG_I2C_VIA is not set
 # CONFIG_I2C_VIAPRO is not set
@@ -1872,6 +1888,8 @@
 CONFIG_SENSORS_GL520SM=m
 CONFIG_SENSORS_HDAPS=m
 # CONFIG_SENSORS_I5K_AMB is not set
+# FIXME: IBMAEM x86 only?
+CONFIG_SENSORS_IBMAEM=m
 CONFIG_SENSORS_IBMPEX=m
 CONFIG_SENSORS_IT87=m
 CONFIG_SENSORS_K8TEMP=m
@@ -1980,10 +1998,38 @@
 
 CONFIG_HW_RANDOM=y
 # CONFIG_NVRAM is not set
-CONFIG_RTC=y
+# CONFIG_RTC is not set
 # CONFIG_RTC_DEBUG is not set
 # CONFIG_GEN_RTC is not set
-# CONFIG_RTC_CLASS is not set
+CONFIG_RTC_CLASS=y
+# CONFIG_RTC_HCTOSYS is not set
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+CONFIG_RTC_DRV_CMOS=y
+CONFIG_RTC_DRV_DS1307=m
+CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_DS1672=m
+CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_DS1374=m
+# CONFIG_RTC_DRV_EP93XX is not set
+CONFIG_RTC_DRV_FM3130=m
+CONFIG_RTC_DRV_ISL1208=m
+CONFIG_RTC_DRV_M41T80=m
+CONFIG_RTC_DRV_M41T80_WDT=y
+CONFIG_RTC_DRV_M48T59=m
+CONFIG_RTC_DRV_MAX6900=m
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF8583=m
+CONFIG_RTC_DRV_RS5C372=m
+# CONFIG_RTC_DRV_SA1100 is not set
+# CONFIG_RTC_DRV_TEST is not set
+CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_V3020=m
+CONFIG_RTC_DRV_STK17TA8=m
+# CONFIG_RTC_DRV_S35390A is not set
 
 CONFIG_DTLK=m
 CONFIG_R3964=m
@@ -2036,7 +2082,7 @@
 CONFIG_VIDEO_DEV=m
 # CONFIG_VIDEO_ADV_DEBUG is not set
 # CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
-CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_ALLOW_V4L1=y
 CONFIG_VIDEO_V4L1_COMPAT=y
 CONFIG_VIDEO_V4L2=y
 # CONFIG_VIDEO_VIVI is not set
@@ -2052,6 +2098,7 @@
 CONFIG_VIDEO_CAPTURE_DRIVERS=y
 CONFIG_VIDEO_ADV7170=m
 CONFIG_VIDEO_ADV7175=m
+CONFIG_VIDEO_AU0828=m
 CONFIG_VIDEO_BT819=m
 CONFIG_VIDEO_BT848=m
 CONFIG_VIDEO_BT848_DVB=y
@@ -2069,6 +2116,7 @@
 CONFIG_VIDEO_CX25840=m
 CONFIG_VIDEO_CX2341X=m
 CONFIG_VIDEO_CX23885=m
+CONFIG_VIDEO_CX18=m
 CONFIG_VIDEO_CX88=m
 CONFIG_VIDEO_CX88_DVB=m
 CONFIG_VIDEO_CX88_ALSA=m
@@ -2077,6 +2125,7 @@
 CONFIG_VIDEO_DPC=m
 CONFIG_VIDEO_EM28XX=m
 CONFIG_VIDEO_EM28XX_ALSA=m
+CONFIG_VIDEO_EM28XX_DVB=m
 CONFIG_VIDEO_HEXIUM_ORION=m
 CONFIG_VIDEO_HEXIUM_GEMINI=m
 CONFIG_VIDEO_IVTV=m
@@ -2086,6 +2135,7 @@
 CONFIG_VIDEO_MXB=m
 CONFIG_VIDEO_OVCAMCHIP=m
 CONFIG_VIDEO_OV7670=m
+CONFIG_VIDEO_PVRUSB2_DVB=y
 CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR=y
 CONFIG_VIDEO_PVRUSB2_ONAIR_USB2=y
 CONFIG_VIDEO_SAA5246A=m
@@ -2131,7 +2181,6 @@
 CONFIG_TUNER_3036=m
 # CONFIG_TUNER_TEA5761 is not set
 
-
 #
 # Radio Adapters
 #
@@ -2139,6 +2188,8 @@
 CONFIG_RADIO_MAXIRADIO=m
 CONFIG_RADIO_MAESTRO=m
 
+CONFIG_MEDIA_ATTACH=y
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
 
 #
 # Digital Video Broadcasting Devices
@@ -2152,11 +2203,13 @@
 #
 # Supported Frontend Modules
 #
+CONFIG_DVB_AU8522=m
 CONFIG_DVB_STV0299=m
 # CONFIG_DVB_SP887X is not set
 CONFIG_DVB_BT8XX=m
 CONFIG_DVB_BUDGET_CORE=m
 CONFIG_DVB_CX24110=m
+CONFIG_DVB_ISL6405=m
 CONFIG_DVB_L64781=m
 CONFIG_DVB_LGDT330X=m
 CONFIG_DVB_MT312=m
@@ -2254,6 +2307,7 @@
 
 CONFIG_FB=y
 CONFIG_VIDEO_SELECT=y
+# CONFIG_FB_FOREIGN_ENDIAN is not set
 CONFIG_FB_3DFX=m
 CONFIG_FB_3DFX_ACCEL=y
 # CONFIG_FB_ARC is not set
@@ -2397,6 +2451,7 @@
 CONFIG_SND_AU8810=m
 CONFIG_SND_AU8820=m
 CONFIG_SND_AU8830=m
+CONFIG_SND_AW2=m
 CONFIG_SND_AZT3328=m
 CONFIG_SND_BT87X=m
 # CONFIG_SND_BT87X_OVERCLOCK is not set
@@ -2443,6 +2498,7 @@
 CONFIG_SND_NM256=m
 CONFIG_SND_OXYGEN=m
 CONFIG_SND_RME32=m
+CONFIG_SND_PCSP=m
 CONFIG_SND_PCXHR=m
 CONFIG_SND_RIPTIDE=m
 CONFIG_SND_RME96=m
@@ -2517,9 +2573,11 @@
 #
 CONFIG_USB_ACM=m
 CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
 # CONFIG_BLK_DEV_UB is not set
 CONFIG_USB_STORAGE=m
 # CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_CYPRESS_ATACB=y
 CONFIG_USB_STORAGE_DATAFAB=y
 CONFIG_USB_STORAGE_FREECOM=y
 CONFIG_USB_STORAGE_ISD200=y
@@ -2547,6 +2605,7 @@
 CONFIG_HID_FF=y
 CONFIG_HID_PID=y
 CONFIG_LOGITECH_FF=y
+CONFIG_LOGIRUMBLEPAD2_FF=y
 CONFIG_PANTHERLORD_FF=y
 CONFIG_THRUSTMASTER_FF=y
 CONFIG_ZEROPLUS_FF=y
@@ -2663,6 +2722,7 @@
 CONFIG_USB_SERIAL_MCT_U232=m
 CONFIG_USB_SERIAL_MOS7720=m
 CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MOTOROLA=m
 CONFIG_USB_SERIAL_NAVMAN=m
 CONFIG_USB_SERIAL_OPTION=y
 CONFIG_USB_SERIAL_OTI6858=m
@@ -2671,6 +2731,7 @@
 CONFIG_USB_SERIAL_SAFE=m
 CONFIG_USB_SERIAL_SAFE_PADDED=y
 CONFIG_USB_SERIAL_SIERRAWIRELESS=y
+CONFIG_USB_SERIAL_SPCP8X5=m
 CONFIG_USB_SERIAL_TI=m
 CONFIG_USB_SERIAL_VISOR=m
 CONFIG_USB_SERIAL_WHITEHEAT=m
@@ -2695,6 +2756,7 @@
 CONFIG_USB_AUERSWALD=m
 CONFIG_USB_BERRY_CHARGE=m
 CONFIG_USB_CXACRU=m
+# CONFIG_USB_C67X00_HCD is not set
 # CONFIG_USB_CYTHERM is not set
 CONFIG_USB_EMI26=m
 CONFIG_USB_ETH=m
@@ -2706,8 +2768,10 @@
 # CONFIG_USB_GADGET_GOKU is not set
 # CONFIG_USB_GADGETFS is not set
 # CONFIG_USB_HIDINPUT_POWERBOOK is not set
-CONFIG_USB_ISP116X_HCD=m
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
 CONFIG_USB_IOWARRIOR=m
+CONFIG_USB_ISIGHTFW=m
 CONFIG_USB_LCD=m
 CONFIG_USB_LD=m
 CONFIG_USB_LEGOTOWER=m
@@ -2718,7 +2782,7 @@
 CONFIG_USB_PHIDGETMOTORCONTROL=m
 CONFIG_USB_PWC=m
 # CONFIG_USB_PWC_DEBUG is not set
-CONFIG_USB_RIO500=m
+# CONFIG_USB_RIO500 is not set
 CONFIG_USB_QUICKCAM_MESSENGER=m
 CONFIG_USB_SL811_HCD=m
 CONFIG_USB_SISUSBVGA=m
@@ -2729,11 +2793,13 @@
 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_ZERO=m
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+
 
 CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
 
@@ -2782,6 +2848,7 @@
 CONFIG_JFS_POSIX_ACL=y
 CONFIG_JFS_SECURITY=y
 CONFIG_XFS_FS=m
+# CONFIG_XFS_DEBUG is not set
 # CONFIG_XFS_RT is not set
 CONFIG_XFS_QUOTA=y
 CONFIG_XFS_POSIX_ACL=y
@@ -2913,6 +2980,8 @@
 CONFIG_OCFS2_FS=m
 # CONFIG_OCFS2_DEBUG_FS is not set
 # CONFIG_OCFS2_DEBUG_MASKLOG is not set
+CONFIG_OCFS2_FS_O2CB=m
+CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
 CONFIG_CONFIGFS_FS=m
 
 CONFIG_DLM=m
@@ -2998,6 +3067,7 @@
 # Kernel hacking
 #
 CONFIG_DEBUG_KERNEL=y
+CONFIG_FRAME_WARN=1024
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_INFO=y
 CONFIG_FRAME_POINTER=y
@@ -3012,6 +3082,11 @@
 # CONFIG_DEBUG_LOCKDEP is not set
 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
 
+CONFIG_KGDB=y
+CONFIG_KGDB_SERIAL_CONSOLE=y
+CONFIG_KGDB_TESTS=y
+# CONFIG_KGDB_TESTS_ON_BOOT is not set
+
 # These debug options are deliberatly left on.
 # They aren't that much of a performance impact, and the value
 # from getting out-of-tree modules fixed is worth the trade-off.
@@ -3035,7 +3110,7 @@
 CONFIG_SECURITY_NETWORK=y
 CONFIG_SECURITY_NETWORK_XFRM=y
 CONFIG_SECURITY_CAPABILITIES=y
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_SECURITY_FILE_CAPABILITIES=y
 # CONFIG_SECURITY_ROOTPLUG is not set
 CONFIG_SECURITY_SELINUX=y
 CONFIG_SECURITY_SELINUX_BOOTPARAM=y
@@ -3069,6 +3144,9 @@
 CONFIG_CRYPTO_CCM=m
 CONFIG_CRYPTO_CRC32C=m
 CONFIG_CRYPTO_CTR=m
+CONFIG_CRYPTO_CTS=m
+CONFIG_CRYPTO_MPILIB=y
+CONFIG_CRYPTO_SIGNATURE_DSA=y
 CONFIG_CRYPTO_DEFLATE=m
 CONFIG_CRYPTO_DES=m
 CONFIG_CRYPTO_ECB=m
@@ -3082,7 +3160,6 @@
 CONFIG_CRYPTO_MD4=m
 CONFIG_CRYPTO_MD5=m
 CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_MPILIB=y
 CONFIG_CRYPTO_NULL=m
 CONFIG_CRYPTO_PCBC=m
 CONFIG_CRYPTO_SALSA20=m
@@ -3093,7 +3170,6 @@
 CONFIG_CRYPTO_SHA1=y
 CONFIG_CRYPTO_SHA256=m
 CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_SIGNATURE_DSA=y
 CONFIG_CRYPTO_TEA=m
 CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_TWOFISH=m
@@ -3145,17 +3221,19 @@
 # CONFIG_FAIR_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
 
 CONFIG_CPUSETS=y
 CONFIG_CGROUPS=y
 # CONFIG_CGROUP_DEBUG is not set
 CONFIG_CGROUP_NS=y
 CONFIG_CGROUP_CPUACCT=y
-# CONFIG_CGROUP_MEM_RES_CTLR is not set
+CONFIG_CGROUP_DEVICE=y
 CONFIG_PROC_PID_CPUSET=y
 
-CONFIG_SYSFS_DEPRECATED=y
-CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
 
 CONFIG_RELAY=y
 # CONFIG_PRINTK_TIME is not set
@@ -3355,6 +3433,7 @@
 CONFIG_LEDS_TRIGGER_TIMER=m
 CONFIG_LEDS_TRIGGER_IDE_DISK=y
 CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
 
 CONFIG_DMA_ENGINE=y
 CONFIG_NET_DMA=y
@@ -3362,7 +3441,7 @@
 CONFIG_UNUSED_SYMBOLS=y
 
 CONFIG_UTRACE=y
-CONFIG_PTRACE=y
+CONFIG_UTRACE_PTRACE=y
 
 CONFIG_KPROBES=y
 
@@ -3393,6 +3472,7 @@
 
 CONFIG_UIO=m
 CONFIG_UIO_CIF=m
+CONFIG_UIO_SMX=m
 
 CONFIG_INSTRUMENTATION=y
 CONFIG_MARKERS=y
@@ -3452,6 +3532,7 @@
 # CONFIG_INTEL_MENLOW is not set
 CONFIG_ENCLOSURE_SERVICES=m
 CONFIG_IPWIRELESS=m
+CONFIG_RTC_DRV_DS1511=m
 CONFIG_CGROUP_MEM_CONT=y
 CONFIG_TC1100_WMI=m
 
@@ -3463,3 +3544,14 @@
 CONFIG_MEMSTICK_TIFM_MS=m
 CONFIG_MEMSTICK_JMICRON_38X=m
 
+CONFIG_ACCESSIBILITY=y
+CONFIG_A11Y_BRAILLE_CONSOLE=y
+
+# 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


Index: config-i686
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-i686,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- config-i686	22 May 2008 03:38:05 -0000	1.4
+++ config-i686	8 Aug 2008 18:56:00 -0000	1.5
@@ -5,5 +5,4 @@
 
 CONFIG_CRYPTO_DEV_PADLOCK=m
 CONFIG_CRYPTO_DEV_PADLOCK_AES=m
-# should be '=m' but this driver breaks signed modules
-# CONFIG_CRYPTO_DEV_PADLOCK_SHA is not set
+CONFIG_CRYPTO_DEV_PADLOCK_SHA=m


Index: config-ia64
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-ia64,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- config-ia64	12 Jul 2007 19:15:37 -0000	1.1
+++ config-ia64	8 Aug 2008 18:56:00 -0000	1.2
@@ -1,3 +1,4 @@
 CONFIG_CRASH_DUMP=y
 CONFIG_PROC_VMCORE=y
 
+CONFIG_UTRACE=n


Index: config-ia64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-ia64-generic,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- config-ia64-generic	16 Jul 2008 15:59:42 -0000	1.7
+++ config-ia64-generic	8 Aug 2008 18:56:00 -0000	1.8
@@ -115,11 +115,11 @@
 CONFIG_ACPI_AC=m
 # CONFIG_ACPI_ASUS is not set
 CONFIG_ACPI_PROCFS_POWER=y
-# CONFIG_ACPI_SYSFS_POWER is not set
+CONFIG_ACPI_SYSFS_POWER=y
 # CONFIG_ACPI_BAY is not set
 # CONFIG_ACPI_BATTERY is not set
 CONFIG_ACPI_BLACKLIST_YEAR=0
-CONFIG_ACPI_BUTTON=m
+CONFIG_ACPI_BUTTON=y
 # CONFIG_ACPI_DOCK is not set
 CONFIG_ACPI_EC=y
 CONFIG_ACPI_FAN=y
@@ -193,3 +193,11 @@
 CONFIG_SENSORS_I5K_AMB=m
 
 CONFIG_SPARSEMEM_VMEMMAP=y
+
+CONFIG_FRAME_WARN=2048
+
+CONFIG_VIRT_CPU_ACCOUNTING=y
+CONFIG_SGI_XP=m
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=m
+CONFIG_KVM_INTEL=m


Index: config-nodebug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-nodebug,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- config-nodebug	14 Jun 2008 07:55:58 -0000	1.11
+++ config-nodebug	8 Aug 2008 18:56:00 -0000	1.12
@@ -3,7 +3,6 @@
 # CONFIG_SND_DEBUG_DETECT is not set
 # CONFIG_SND_PCM_XRUN_DEBUG is not set
 
-# CONFIG_DEBUG_IGNORE_QUIET is not set
 # CONFIG_DEBUG_MUTEXES is not set
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_DEBUG_LOCK_ALLOC is not set
@@ -32,4 +31,12 @@
 
 # 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
+# CONFIG_DEBUG_OBJECTS_FREE is not set
+# CONFIG_DEBUG_OBJECTS_TIMERS is not set
+
+# CONFIG_X86_PTDUMP is not set
+
 # CONFIG_CAN_DEBUG_DEVICES is not set


Index: config-powerpc-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-powerpc-generic,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- config-powerpc-generic	23 May 2008 02:21:37 -0000	1.14
+++ config-powerpc-generic	8 Aug 2008 18:56:00 -0000	1.15
@@ -33,7 +33,7 @@
 CONFIG_SUSPEND=y
 CONFIG_HIBERNATION=y
 # CONFIG_RTC is not set
-CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC is not set
 # CONFIG_GEN_RTC_X is not set
 CONFIG_RTC_DRV_PPC=y
 CONFIG_PROC_DEVICETREE=y
@@ -189,7 +189,6 @@
 CONFIG_MTD_PHYSMAP_OF=m
 CONFIG_IDE_PROC_FS=y
 CONFIG_MACINTOSH_DRIVERS=y
-# CONFIG_DEBUG_PAGEALLOC is not set
 
 CONFIG_PPC_PASEMI_MDIO=m
 CONFIG_SPU_FS_64K_LS=y


Index: config-powerpc32-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-powerpc32-generic,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- config-powerpc32-generic	21 May 2008 20:42:11 -0000	1.5
+++ config-powerpc32-generic	8 Aug 2008 18:56:00 -0000	1.6
@@ -13,7 +13,29 @@
 CONFIG_PPC_PREP=y
 
 # CONFIG_PPC_MPC5200_SIMPLE is not set
+# CONFIG_SATA_PMP is not set
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SIL24 is not set
 CONFIG_SATA_FSL=m
+# CONFIG_SATA_SVW is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_MM is not set
+# CONFIG_MEGARAID_MAILBOX is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+
 CONFIG_GIANFAR=m
 CONFIG_GFAR_NAPI=y
 CONFIG_USB_EHCI_FSL=y
@@ -71,7 +93,44 @@
 # CONFIG_UDBG_RTAS_CONSOLE is not set
 CONFIG_BRIQ_PANEL=m
 
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD640_PCI is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+CONFIG_ATA_GENERIC=m
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
 CONFIG_PATA_MPC52xx=m
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NINJA32 is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_NS87415 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_PCMCIA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_QDI is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_WINBOND is not set
+
+# CONFIG_TR is not set
 
 CONFIG_SERIAL_MPC52xx=y
 CONFIG_SERIAL_MPC52xx_CONSOLE=y
@@ -82,6 +141,7 @@
 CONFIG_FEC_MPC52xx=m
 #CHECK: This may later become a tristate.
 CONFIG_FEC_MPC52xx_MDIO=y
+CONFIG_PPC_MPC5200_GPIO=y
 
 CONFIG_SERIAL_OF_PLATFORM=y
 CONFIG_DEBUG_STACKOVERFLOW=y
@@ -91,15 +151,130 @@
 CONFIG_HIGH_RES_TIMERS=y
 
 # CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
 # CONFIG_BLK_DEV_4DRIVES is not set
 # CONFIG_BLK_DEV_ALI14XX is not set
 # CONFIG_BLK_DEV_DTC2278 is not set
 # CONFIG_BLK_DEV_HT6560B is not set
 # CONFIG_BLK_DEV_QD65XX is not set
 # CONFIG_BLK_DEV_UMC8672 is not set
+# CONFIG_BLK_DEV_DELKIN is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_SX8 is not set
+
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
 # CONFIG_VIRQ_DEBUG is not set
 
 CONFIG_PPC_BESTCOMM_ATA=m
 CONFIG_PPC_BESTCOMM_FEC=m
 CONFIG_PPC_BESTCOMM_GEN_BD=m
 
+CONFIG_FORCE_MAX_ZONEORDER=11
+# CONFIG_PAGE_OFFSET_BOOL is not set
+CONFIG_BLK_DEV_HD_ONLY=y
+# CONFIG_FB_FSL_DIU is not set
+CONFIG_IRQSTACKS=y
+CONFIG_VIRTUALIZATION=y
+
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_HTC_EGPIO is not set
+
+# CONFIG_PARIDE is not set
+# CONFIG_PARPORT_PC_PCMCIA is not set
+# CONFIG_MTD is not set
+# CONFIG_TIFM_CORE is not set
+
+# CONFIG_RFKILL is not set
+# CONFIG_DONGLE is not set
+# CONFIG_IP_VS is not set
+
+
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_CISS_SCSI_TAPE is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_FC_TGT_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_SCSI_ARCMSR_AER is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_MVSAS is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+
+# CONFIG_ISCSI_TCP is not set
+
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SAS_ATA is not set
+# CONFIG_SCSI_SAS_HOST_SMP is not set
+
+# CONFIG_FUSION is not set
+
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+# CONFIG_IWLWIFI is not set
+# CONFIG_IWLCORE is not set
+# CONFIG_IWL3945 is not set
+# CONFIG_IWL4965 is not set
+# CONFIG_ISDN is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+# CONFIG_WDT_501_PCI is not set
+
+# CONFIG_I2C_NFORCE2 is not set
+
+# CONFIG_SND_ADLIB is not set
+# CONFIG_SND_CS4236 is not set
+# CONFIG_SND_SC6000 is not set
+# CONFIG_SND_OPL3SA2 is not set
+# CONFIG_SND_MIRO is not set
+# CONFIG_SND_SB16 is not set
+# CONFIG_SND_SBAWE is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_YMFPCI is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+
+# CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_INFINIBAND is not set
+
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_TCG_TPM is not set
+
+# PPC gets sad with debug alloc (bz 448598)
+# CONFIG_DEBUG_PAGEALLOC is not set


Index: config-powerpc64
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-powerpc64,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- config-powerpc64	10 Jun 2008 20:45:42 -0000	1.9
+++ config-powerpc64	8 Aug 2008 18:56:00 -0000	1.10
@@ -156,3 +156,10 @@
 CONFIG_SPU_TRACE=m
 CONFIG_MTD_NAND_PASEMI=m
 CONFIG_EDAC_CELL=m
+CONFIG_FRAME_WARN=2048
+
+CONFIG_PHYP_DUMP=y
+CONFIG_FORCE_MAX_ZONEORDER=11
+CONFIG_BLK_DEV_HD_ONLY=y
+CONFIG_VIRTUALIZATION=y
+


Index: config-s390x
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-s390x,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- config-s390x	21 May 2008 20:42:11 -0000	1.4
+++ config-s390x	8 Aug 2008 18:56:00 -0000	1.5
@@ -197,4 +197,15 @@
 CONFIG_S390_VMUR=m
 
 # CONFIG_THERMAL is not set
-# CONFIG_DEBUG_PAGEALLOC is not set
+
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PAGE_STATES=y
+CONFIG_CTCM=m
+CONFIG_QETH_L2=m
+CONFIG_QETH_L3=m
+CONFIG_CRYPTO_SHA512_S390=m
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=m
+CONFIG_S390_GUEST=y
+


Index: config-sparc64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-sparc64-generic,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- config-sparc64-generic	21 May 2008 20:42:11 -0000	1.10
+++ config-sparc64-generic	8 Aug 2008 18:56:00 -0000	1.11
@@ -183,3 +183,8 @@
 CONFIG_SPARSEMEM_VMEMMAP=y
 
 # CONFIG_THERMAL is not set
+
+CONFIG_FRAME_WARN=2048
+
+CONFIG_NUMA=y
+


Index: config-x86-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-x86-generic,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- config-x86-generic	16 Jul 2008 15:59:42 -0000	1.23
+++ config-x86-generic	8 Aug 2008 18:56:00 -0000	1.24
@@ -67,17 +67,20 @@
 CONFIG_X86_MSR=m
 CONFIG_X86_CPUID=m
 CONFIG_EDD=m
+# CONFIG_EDD_OFF is not set
 # CONFIG_NUMA is not set
 CONFIG_HIGHMEM=y
 CONFIG_HIGHPTE=y
 # CONFIG_MATH_EMULATION is not set
 CONFIG_MTRR=y
+CONFIG_X86_PAT=y
 CONFIG_X86_PM_TIMER=y
 
 CONFIG_EFI=y
 CONFIG_EFI_VARS=y
 CONFIG_EFI_PCDP=y
 CONFIG_FB_EFI=y
+# CONFIG_FB_N411 is not set
 
 # CONFIG_PCI_GOBIOS is not set
 # CONFIG_PCI_GODIRECT is not set
@@ -126,11 +129,11 @@
 CONFIG_ACPI_AC=m
 # CONFIG_ACPI_ASUS is not set
 CONFIG_ACPI_PROCFS_POWER=y
-# CONFIG_ACPI_SYSFS_POWER is not set
+CONFIG_ACPI_SYSFS_POWER=y
 CONFIG_ACPI_BATTERY=m
 CONFIG_ACPI_BAY=m
 CONFIG_ACPI_BLACKLIST_YEAR=1999
-CONFIG_ACPI_BUTTON=m
+CONFIG_ACPI_BUTTON=y
 CONFIG_ACPI_CONTAINER=m
 CONFIG_ACPI_DOCK=y
 CONFIG_ACPI_EC=y
@@ -212,8 +215,6 @@
 CONFIG_4KSTACKS=y
 CONFIG_DEBUG_NMI_TIMEOUT=5
 
-# CONFIG_DEBUG_PAGEALLOC is not set
-
 CONFIG_PCI_DIRECT=y
 CONFIG_PCI_MMCONFIG=y
 CONFIG_PCI_BIOS=y
@@ -303,10 +304,10 @@
 # CONFIG_SGI_IOC4 is not set
 
 CONFIG_ASUS_LAPTOP=m
-CONFIG_EEEPC=m
 CONFIG_FUJITSU_LAPTOP=m
 CONFIG_MSI_LAPTOP=m
 CONFIG_SONY_LAPTOP=m
+CONFIG_EEEPC_LAPTOP=m
 
 # CONFIG_SMSC37B787_WDT is not set
 CONFIG_W83697HF_WDT=m
@@ -326,6 +327,9 @@
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
 CONFIG_KVM_AMD=m
+CONFIG_KVM_CLOCK=y
+CONFIG_KVM_GUEST=y
+CONFIG_KVM_TRACE=y
 
 CONFIG_MTD_ESB2ROM=m
 CONFIG_MTD_CK804XROM=m
@@ -346,6 +350,8 @@
 CONFIG_MACINTOSH_DRIVERS=y
 
 CONFIG_DMIID=y
+CONFIG_ISCSI_IBFT_FIND=y
+CONFIG_ISCSI_IBFT=m
 
 CONFIG_VIRTUALIZATION=y
 CONFIG_PARAVIRT_GUEST=y
@@ -364,3 +370,9 @@
 # CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
 
 CONFIG_HP_WATCHDOG=m
+
+CONFIG_OLPC=y
+CONFIG_BATTERY_OLPC=m
+
+CONFIG_NONPROMISC_DEVMEM=y
+


Index: config-x86_64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-x86_64-generic,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- config-x86_64-generic	16 Jul 2008 15:59:42 -0000	1.24
+++ config-x86_64-generic	8 Aug 2008 18:56:00 -0000	1.25
@@ -25,6 +25,7 @@
 CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y
 CONFIG_X86_PM_TIMER=y
 CONFIG_EDD=m
+# CONFIG_EDD_OFF is not set
 CONFIG_PCI_BIOS=y
 CONFIG_PCI_MMCONFIG=y
 # CONFIG_DMAR is not set
@@ -72,11 +73,11 @@
 CONFIG_ACPI_AC=m
 # CONFIG_ACPI_ASUS is not set
 CONFIG_ACPI_PROCFS_POWER=y
-# CONFIG_ACPI_SYSFS_POWER is not set
+CONFIG_ACPI_SYSFS_POWER=y
 CONFIG_ACPI_BATTERY=m
 CONFIG_ACPI_BAY=m
 CONFIG_ACPI_BLACKLIST_YEAR=0
-CONFIG_ACPI_BUTTON=m
+CONFIG_ACPI_BUTTON=y
 CONFIG_ACPI_CONTAINER=m
 CONFIG_ACPI_DOCK=y
 CONFIG_ACPI_EC=y
@@ -96,11 +97,11 @@
 CONFIG_ACPI_PROC_EVENT=y
 
 CONFIG_ASUS_LAPTOP=m
-CONFIG_EEEPC=m
 CONFIG_FUJITSU_LAPTOP=m
 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
@@ -223,6 +224,7 @@
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
 CONFIG_KVM_AMD=m
+CONFIG_KVM_TRACE=y
 
 CONFIG_MTD_ESB2ROM=m
 CONFIG_MTD_CK804XROM=m
@@ -235,6 +237,9 @@
 CONFIG_PROC_VMCORE=y
 
 CONFIG_DMIID=y
+CONFIG_ISCSI_IBFT_FIND=y
+CONFIG_ISCSI_IBFT=m
+
 
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
@@ -249,10 +254,27 @@
 
 CONFIG_SENSORS_I5K_AMB=m
 
-# CONFIG_PARAVIRT_GUEST is not set
+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
 # CONFIG_CPA_DEBUG is not set
 
 CONFIG_HP_WATCHDOG=m
+
+CONFIG_FRAME_WARN=2048
+
+CONFIG_MEMTEST_BOOTPARAM=y
+CONFIG_MEMTEST_BOOTPARAM_VALUE=0
+CONFIG_NODES_SHIFT=9
+CONFIG_X86_PAT=y
+# FIXME: These should be 32bit only
+# CONFIG_FB_N411 is not set
+CONFIG_NONPROMISC_DEVMEM=y
+
+CONFIG_DIRECT_GBPAGES=y
+


Index: config-xen-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-xen-generic,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- config-xen-generic	15 Feb 2008 23:58:52 -0000	1.2
+++ config-xen-generic	8 Aug 2008 18:56:00 -0000	1.3
@@ -67,3 +67,7 @@
 # CONFIG_KVM_INTEL is not set
 # CONFIG_KVM_AMD is not set
 
+
+CONFIG_XEN_KBDDEV_FRONTEND=m
+CONFIG_XEN_FBDEV_FRONTEND=m
+


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/kernel.spec,v
retrieving revision 1.510
retrieving revision 1.511
diff -u -r1.510 -r1.511
--- kernel.spec	5 Aug 2008 03:13:22 -0000	1.510
+++ kernel.spec	8 Aug 2008 18:56:00 -0000	1.511
@@ -22,18 +22,18 @@
 #
 # Bah. Have to set this to a negative for the moment to fix rpm ordering after
 # moving the spec file. cvs sucks. Should be sure to fix this once 2.6.23 is out.
-%define fedora_cvs_origin 440
+%define fedora_cvs_origin 510
 %define fedora_build %(R="$Revision$"; R="${R%% \$}"; R="${R##: 1.}"; expr $R - %{fedora_cvs_origin})
 
 # 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 25
+%define base_sublevel 26
 
 ## If this is a released kernel ##
 %if 0%{?released_kernel}
 # Do we have a 2.6.21.y update to apply?
-%define stable_update 14
+%define stable_update 2
 # Set rpm version accordingly
 %if 0%{?stable_update}
 %define stablerev .%{stable_update}
@@ -568,37 +568,27 @@
 # revert upstream changes we get from elsewhere
 Patch05: linux-2.6-upstream-reverts.patch
 # patches queued for the next -stable release
-Patch11: linux-2.6-stable-queue.patch
+#Patch11: linux-2.6-stable-queue.patch
 
-Patch21: linux-2.6-utrace.patch
-Patch22: linux-2.6.25-utrace-bugon.patch
-Patch23: linux-2.6.25-utrace-i386-syscall-trace.patch
+Patch20: linux-2.6-ptrace-cleanup.patch
+Patch21: linux-2.6-tracehook.patch
+Patch22: linux-2.6-utrace.patch
 
 Patch41: linux-2.6-sysrq-c.patch
 Patch60: linux-2.6-x86-tune-generic.patch
 Patch75: linux-2.6-x86-debug-boot.patch
-Patch85: linux-2.6-x86-dont-map-vdso-when-disabled.patch
-Patch86: linux-2.6-x86-dont-use-disabled-vdso-for-signals.patch
 Patch87: linux-2.6-x86-apic-dump-all-regs-v3.patch
-Patch88: linux-2.6-x86-mm-ioremap-64-bit-resource-on-32-bit-kernel.patch
 
-Patch90: linux-2.6-alsa-hda-codec-add-AD1884A-mobile.patch
-Patch91: linux-2.6-alsa-hda-codec-add-AD1884A-x300.patch
-Patch92: linux-2.6-alsa-hda-codec-add-AD1884A.patch
-Patch93: linux-2.6-alsa-kill-annoying-messages.patch
+#ALSA
 
-Patch123: linux-2.6-ppc-rtc.patch
 Patch130: linux-2.6-ppc-use-libgcc.patch
 Patch140: linux-2.6-ps3-ehci-iso.patch
 Patch141: linux-2.6-ps3-storage-alias.patch
 Patch142: linux-2.6-ps3-legacy-bootloader-hack.patch
 Patch143: linux-2.6-g5-therm-shutdown.patch
 Patch144: linux-2.6-vio-modalias.patch
-Patch145: linux-2.6-windfarm-pm121.patch
-Patch146: linux-2.6-windfarm-pm121-fix.patch
 Patch147: linux-2.6-imac-transparent-bridge.patch
 Patch148: linux-2.6-powerpc-zImage-32MiB.patch
-Patch149: linux-2.6-efika-not-chrp.patch
 
 Patch150: linux-2.6-build-nonintconfig.patch
 Patch160: linux-2.6-execshield.patch
@@ -615,7 +605,6 @@
 Patch280: linux-2.6-debug-spinlock-taint.patch
 Patch330: linux-2.6-debug-no-quiet.patch
 Patch340: linux-2.6-debug-vm-would-have-oomkilled.patch
-Patch350: linux-2.6-devmem.patch
 Patch370: linux-2.6-crash-driver.patch
 
 Patch400: linux-2.6-scsi-cpqarray-set-master.patch
@@ -625,9 +614,6 @@
 Patch421: linux-2.6-squashfs.patch
 Patch424: linux-2.6-gfs-locking-exports.patch
 Patch425: linux-2.6-nfs-client-mounts-hang.patch
-Patch426: linux-2.6-fs-fat-cleanup-code.patch
-Patch427: linux-2.6-fs-fat-fix-setattr.patch
-Patch428: linux-2.6-fs-fat-relax-permission-check-of-fat_setattr.patch
 
 Patch430: linux-2.6-net-silence-noisy-printks.patch
 
@@ -636,23 +622,17 @@
 Patch460: linux-2.6-serial-460800.patch
 Patch510: linux-2.6-silence-noise.patch
 Patch570: linux-2.6-selinux-mprotect-checks.patch
-Patch580: linux-2.6-sysrq-add-show-backtrace-on-all-cpus-function.patch
 Patch600: linux-2.6-vm-silence-atomic-alloc-failures.patch
 
 Patch610: linux-2.6-defaults-fat-utf8.patch
 Patch640: linux-2.6-defaults-pci_no_msi.patch
 
 Patch670: linux-2.6-ata-quirk.patch
-Patch672: linux-2.6-libata-acpi-hotplug-fixups.patch
-Patch673: linux-2.6-libata-be-a-bit-more-slack-about-early-devices.patch
 Patch674: linux-2.6-sata-eeepc-faster.patch
-Patch675: linux-2.6-libata-acpi-handle-bay-devices-in-dock-stations.patch
-Patch678: linux-2.6-libata-ata_piix-dont-attach-to-ich6m-in-ahci-mode.patch
-Patch679: linux-2.6-libata-acpi-fix-invalid-context-acpi.patch
 
 Patch680: linux-2.6-wireless.patch
 Patch681: linux-2.6-wireless-pending.patch
-Patch682: linux-2.6-wireless-fixups.patch
+#Patch682: linux-2.6-wireless-fixups.patch
 Patch683: linux-2.6-rt2500usb-fix.patch
 Patch690: linux-2.6-at76.patch
 Patch691: linux-2.6-zd1211rw-module-alias.patch
@@ -663,11 +643,8 @@
 Patch725: linux-2.6-netdev-atl2.patch
 Patch726: linux-2.6-netdev-atl1e.patch
 Patch727: linux-2.6-e1000-ich9.patch
-Patch728: linux-2.6-bluetooth-signal-userspace-for-socket-errors.patch
 
-Patch768: linux-2.6-acpi-fix-sizeof.patch
-Patch769: linux-2.6-acpi-fix-error-with-external-methods.patch
-Patch784: linux-2.6-acpi-eeepc-hotkey.patch
+#ACPI
 
 Patch1101: linux-2.6-default-mmf_dump_elf_headers.patch
 
@@ -682,10 +659,7 @@
 
 # Updated firewire stack from linux1394 git
 Patch1910: linux-2.6-firewire-git-update.patch
-Patch1911: linux-2.6-firewire-git-pending.patch
-
-# usb video
-Patch2400: linux-2.6-uvcvideo.patch
+#Patch1911: linux-2.6-firewire-git-pending.patch
 
 %endif
 
@@ -989,22 +963,17 @@
 
 # Revert -stable pieces we get from elsewhere here
 ApplyPatch linux-2.6-upstream-reverts.patch -R
-ApplyPatch linux-2.6-stable-queue.patch
+#ApplyPatch linux-2.6-stable-queue.patch
 
 # 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.25-utrace-bugon.patch
-ApplyPatch linux-2.6.25-utrace-i386-syscall-trace.patch
 
-# ALSA Thinkpad X300 support
-ApplyPatch linux-2.6-alsa-hda-codec-add-AD1884A.patch
-ApplyPatch linux-2.6-alsa-hda-codec-add-AD1884A-mobile.patch
-ApplyPatch linux-2.6-alsa-hda-codec-add-AD1884A-x300.patch
-# kill annoying messages
-ApplyPatch linux-2.6-alsa-kill-annoying-messages.patch
+#ALSA
 
 # Nouveau DRM + drm fixes
-ApplyPatch nouveau-drm.patch
+#ApplyPatch nouveau-drm.patch
 
 # enable sysrq-c on all kernels, not only kexec
 ApplyPatch linux-2.6-sysrq-c.patch
@@ -1016,25 +985,19 @@
 ApplyPatch linux-2.6-x86-tune-generic.patch
 # debug early boot
 #ApplyPatch linux-2.6-x86-debug-boot.patch
-# don't map or use disabled x86 vdso
-ApplyPatch linux-2.6-x86-dont-map-vdso-when-disabled.patch
-ApplyPatch linux-2.6-x86-dont-use-disabled-vdso-for-signals.patch
 # dump *PIC state at boot with apic=debug
 ApplyPatch linux-2.6-x86-apic-dump-all-regs-v3.patch
-# fix 64-bit resource on 32-bit kernels
-ApplyPatch linux-2.6-x86-mm-ioremap-64-bit-resource-on-32-bit-kernel.patch
 
 #
 # PowerPC
 #
 ###  UPSTREAM PATCHES:
 ###  NOT (YET) UPSTREAM:
-# RTC class driver for ppc_md rtc functions
-ApplyPatch linux-2.6-ppc-rtc.patch
 # use libgcc
 ApplyPatch linux-2.6-ppc-use-libgcc.patch
 # The EHCI ISO patch isn't yet upstream but is needed to fix reboot
-ApplyPatch linux-2.6-ps3-ehci-iso.patch
+# FIXME: needs rework
+#ApplyPatch linux-2.6-ps3-ehci-iso.patch
 # The storage alias patch is Fedora-local, and allows the old 'ps3_storage'
 # module name to work on upgrades. Otherwise, I believe mkinitrd will fail
 # to pull the module in,
@@ -1045,15 +1008,10 @@
 ApplyPatch linux-2.6-g5-therm-shutdown.patch
 # Provide modalias in sysfs for vio devices
 ApplyPatch linux-2.6-vio-modalias.patch
-# Fan support on iMac G5 iSight
-ApplyPatch linux-2.6-windfarm-pm121.patch
-ApplyPatch linux-2.6-windfarm-pm121-fix.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
-# Don't show 'CHRP' in /proc/cpuinfo on Efika
-ApplyPatch linux-2.6-efika-not-chrp.patch
 
 #
 # Exec shield
@@ -1087,11 +1045,6 @@
 ApplyPatch linux-2.6-debug-vm-would-have-oomkilled.patch
 
 #
-# Make /dev/mem a need-to-know function
-#
-ApplyPatch linux-2.6-devmem.patch
-
-#
 # /dev/crash driver for the crashdump analysis tool
 #
 ApplyPatch linux-2.6-crash-driver.patch
@@ -1117,10 +1070,6 @@
 ApplyPatch linux-2.6-gfs-locking-exports.patch
 # fix nfs mount hang
 ApplyPatch linux-2.6-nfs-client-mounts-hang.patch
-# fix rsync inability to write to vfat partitions
-ApplyPatch linux-2.6-fs-fat-cleanup-code.patch
-ApplyPatch linux-2.6-fs-fat-fix-setattr.patch
-ApplyPatch linux-2.6-fs-fat-relax-permission-check-of-fat_setattr.patch
 
 # Networking
 # Disable easy to trigger printk's.
@@ -1141,9 +1090,6 @@
 # Fix the SELinux mprotect checks on executable mappings
 ApplyPatch linux-2.6-selinux-mprotect-checks.patch
 
-# add "show backtrace on all cpus" (sysrq-l)
-ApplyPatch linux-2.6-sysrq-add-show-backtrace-on-all-cpus-function.patch
-
 #
 # VM related fixes.
 #
@@ -1160,29 +1106,19 @@
 #
 # ia64 ata quirk
 ApplyPatch linux-2.6-ata-quirk.patch
-# fix hangs on undock (#439197)
-ApplyPatch linux-2.6-libata-acpi-hotplug-fixups.patch
-# fix problems with some old/broken CF hardware (F8 #224005)
-ApplyPatch linux-2.6-libata-be-a-bit-more-slack-about-early-devices.patch
-# make eeepc ata go faster
+# eepc short cable quirk
 ApplyPatch linux-2.6-sata-eeepc-faster.patch
-# fix docking on stations that have a bay device
-ApplyPatch linux-2.6-libata-acpi-handle-bay-devices-in-dock-stations.patch
-# fix ahci / ICH6 conflict
-ApplyPatch linux-2.6-libata-ata_piix-dont-attach-to-ich6m-in-ahci-mode.patch
-# fix invalid irq context in libata-acpi (#451896)
-ApplyPatch linux-2.6-libata-acpi-fix-invalid-context-acpi.patch
 
 # wireless
 #
 # wireless patches headed for 2.6.26
-ApplyPatch linux-2.6-wireless.patch
+#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
+#ApplyPatch linux-2.6-wireless-fixups.patch
 # fix for long-standing rt2500usb issues
 ApplyPatch linux-2.6-rt2500usb-fix.patch
 # module alias for zd1211rw module
@@ -1200,18 +1136,8 @@
 ApplyPatch linux-2.6-netdev-atl2.patch
 # add atl1e network driver for eeepc 901
 ApplyPatch linux-2.6-netdev-atl1e.patch
-# fix bluetooth kbd disconnect
-ApplyPatch linux-2.6-bluetooth-signal-userspace-for-socket-errors.patch
 
 # ACPI/PM patches
-# acpi has a bug in the sizeof function causing thermal panics (from 2.6.26)
-ApplyPatch linux-2.6-acpi-fix-sizeof.patch
-ApplyPatch linux-2.6-acpi-fix-error-with-external-methods.patch
-# properly disable stray interrupts in acpi (??? in 2.6.25)
-#ApplyPatch linux-2.6-acpi-disable-stray-interrupt-1.patch
-#ApplyPatch linux-2.6-acpi-disable-stray-interrupt-2.patch
-# Eeepc hotkey driver
-ApplyPatch linux-2.6-acpi-eeepc-hotkey.patch
 
 # dm / md
 
@@ -1235,10 +1161,7 @@
 # FireWire updates and fixes
 # snap from http://me.in-berlin.de/~s5r6/linux1394/updates/
 ApplyPatch linux-2.6-firewire-git-update.patch
-ApplyPatch linux-2.6-firewire-git-pending.patch
-
-# usb video
-ApplyPatch linux-2.6-uvcvideo.patch
+#ApplyPatch linux-2.6-firewire-git-pending.patch
 
 # ---------- below all scheduled for 2.6.25 -----------------
 
@@ -1838,6 +1761,9 @@
 
 
 %changelog
+* Fri Aug 08 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.26.2-1
+- Linux 2.6.26.2
+
 * Mon Aug 04 2008 Dave Jones <davej at redhat.com>
 - Fix bogus printk in execshield noticed by Brendan Lynch.
 

linux-2.6-at76.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.11 -r 1.12 linux-2.6-at76.patch
Index: linux-2.6-at76.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-at76.patch,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- linux-2.6-at76.patch	1 Aug 2008 15:28:05 -0000	1.11
+++ linux-2.6-at76.patch	8 Aug 2008 18:56:00 -0000	1.12
@@ -1,4 +1,306 @@
-commit 3316a19c45ab4408455958dd91aa4d50cbd38a4a
+commit 34f6f7e889723def0ae895ca8aaa0b12e6ee3f6c
+Author: Johannes Berg <johannes at sipsolutions.net>
+Date:   Thu May 15 12:55:29 2008 +0200
+
+    at76_usb: move TX info into skb->cb
+    
+    This patch converts mac80211 and all drivers to have transmit
+    information and status in skb->cb rather than allocating extra
+    memory for it and copying all the data around. To make it fit,
+    a union is used where only data that is necessary for all steps
+    is kept outside of the union.
+    
+    A number of fixes were done by Ivo, as well as the rt2x00 part
+    of this patch.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
+    Acked-by: David S. Miller <davem at davemloft.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 5d77944bc40ebe1b7b1c56fb2f92684b4c29b66b
+Author: Johannes Berg <johannes at sipsolutions.net>
+Date:   Thu May 15 12:55:27 2008 +0200
+
+    at76_usb: use rate index in TX control
+    
+    This patch modifies struct ieee80211_tx_control to give band
+    info and the rate index (instead of rate pointers) to drivers.
+    This mostly serves to reduce the TX control structure size to
+    make it fit into skb->cb so that the fragmentation code can
+    put it there and we can think about passing it to drivers that
+    way in the future.
+    
+    The rt2x00 driver update was done by Ivo, thanks.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit a7782d1764b316686de4231286c677e230018021
+Author: Johannes Berg <johannes at sipsolutions.net>
+Date:   Thu May 15 12:55:26 2008 +0200
+
+    at76_usb: let drivers wake but not start queues
+    
+    Having drivers start queues is just confusing, their ->start()
+    callback can block and do whatever is necessary, so let mac80211
+    start queues and have drivers wake queues when necessary (to get
+    packets flowing again right away.)
+    
+    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
+    Acked-by: David S. Miller <davem at davemloft.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 761fb2009c498157d653d9aa9dfd8565039aa072
+Author: Bruno Randolf <br1 at einfach.org>
+Date:   Thu May 8 19:15:40 2008 +0200
+
+    at76: use hardware flags for signal/noise units
+    
+    This is the at76_usb bits...
+    
+    trying to clean up the signal/noise code. the previous code in mac80211 had
+    confusing names for the related variables, did not have much definition of
+    what units of signal and noise were provided and used implicit mechanisms from
+    the wireless extensions.
+    
+    this patch introduces hardware capability flags to let the hardware specify
+    clearly if it can provide signal and noise level values and which units it can
+    provide. this also anticipates possible new units like RCPI in the future.
+    
+    for signal:
+    
+      IEEE80211_HW_SIGNAL_UNSPEC - unspecified, unknown, hw specific
+      IEEE80211_HW_SIGNAL_DB     - dB difference to unspecified reference point
+      IEEE80211_HW_SIGNAL_DBM    - dBm, difference to 1mW
+    
+    for noise we currently only have dBm:
+    
+      IEEE80211_HW_NOISE_DBM     - dBm, difference to 1mW
+    
+    if IEEE80211_HW_SIGNAL_UNSPEC or IEEE80211_HW_SIGNAL_DB is used the driver has
+    to provide the maximum value (max_signal) it reports in order for applications
+    to make sense of the signal values.
+    
+    i tried my best to find out for each driver what it can provide and update it
+    but i'm not sure (?) for some of them and used the more conservative guess in
+    doubt. this can be fixed easily after this patch has been merged by changing
+    the hardware flags of the driver.
+    
+    DRIVER          SIGNAL    MAX	NOISE   QUAL
+    -----------------------------------------------------------------
+    adm8211         unspec(?) 100   n/a     missing
+    at76_usb        unspec(?) (?)   unused  missing
+    ath5k           dBm             dBm     percent rssi
+    b43legacy       dBm             dBm     percent jssi(?)
+    b43             dBm             dBm     percent jssi(?)
+    iwl-3945        dBm             dBm     percent snr+more
+    iwl-4965        dBm             dBm     percent snr+more
+    p54             unspec    127   n/a     missing
+    rt2x00          dBm	        n/a     percent rssi+tx/rx frame success
+      rt2400        dBm             n/a
+      rt2500pci     dBm             n/a
+      rt2500usb     dBm             n/a
+      rt61pci       dBm             n/a
+      rt73usb       dBm             n/a
+    rtl8180         unspec(?) 65    n/a     (?)
+    rtl8187         unspec(?) 65    (?)     noise(?)
+    zd1211          dB(?)     100   n/a     percent
+    
+    drivers/net/wireless/ath5k/base.c:      Changes-licensed-under: 3-Clause-BSD
+    
+    Signed-off-by: Bruno Randolf <br1 at einfach.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit ace095545ffa056bf906496a7be0808823fa9980
+Author: Pavel Roskin <proski at gnu.org>
+Date:   Fri Feb 22 00:01:07 2008 -0500
+
+    at76_usb: make the driver depend on MAC80211
+    
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 590364c5a53756b670dd104e4cddd8e760875e2f
+Author: Pavel Roskin <proski at gnu.org>
+Date:   Fri Feb 22 00:01:01 2008 -0500
+
+    at76_usb: reindent, reorder initializers for readability
+    
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 00a1912a53673056e06572bfa37f85b8ef65d682
+Author: Pavel Roskin <proski at gnu.org>
+Date:   Fri Feb 22 00:00:55 2008 -0500
+
+    at76_usb: add more MODULE_AUTHOR entries
+    
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit cad8f142e3505c0bf0f70a16c6fd7c441697e9e2
+Author: Pavel Roskin <proski at gnu.org>
+Date:   Fri Feb 22 00:00:50 2008 -0500
+
+    at76_usb: remove unneeded code
+    
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 7babe23f68a622c32bbaf6dfaec3d36644eaa946
+Author: Pavel Roskin <proski at gnu.org>
+Date:   Fri Feb 22 00:00:44 2008 -0500
+
+    at76_usb: fix missing newlines in printk, improve some messages
+    
+    It's important to know which function failed.
+    
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 0678f4b57e5d832ec56a54830b8dd94692e1f291
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:01:19 2008 +0200
+
+    at76_usb: Remove struct net_device
+    
+    This patch contains only code removal, no code has been modified.
+    
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 5b6e27b59e14602e50f32b82cdb9781535bcbbbc
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:01:11 2008 +0200
+
+    at76_usb: Prepare for struct net_device removal
+    
+    Some cleanup to make it easier to remove the struct net_device.
+    
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 12189dc89c5b54fa0c48693f853223d738869896
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:01:04 2008 +0200
+
+    at76_usb: Allocate struct at76_priv using ieee80211_alloc_hw()
+    
[...5968 lines suppressed...]
 +	struct work_struct work_set_promisc;
 +	struct work_struct work_submit_rx;
-+	struct delayed_work dwork_restart;
-+	struct delayed_work dwork_get_scan;
-+	struct delayed_work dwork_beacon;
-+	struct delayed_work dwork_auth;
-+	struct delayed_work dwork_assoc;
++	struct delayed_work dwork_hw_scan;
 +
 +	struct tasklet_struct rx_tasklet;
 +
 +	/* the WEP stuff */
 +	int wep_enabled;	/* 1 if WEP is enabled */
 +	int wep_key_id;		/* key id to be used */
-+	u8 wep_keys[WEP_KEYS][WEP_KEY_LEN];	/* the four WEP keys,
-+						   5 or 13 bytes are used */
-+	u8 wep_keys_len[WEP_KEYS];	/* the length of the above keys */
++	u8 wep_keys[WEP_KEYS][WEP_LARGE_KEY_LEN];	/* WEP keys */
++	u8 wep_keys_len[WEP_KEYS];	/* length of WEP keys */
 +
 +	int channel;
 +	int iw_mode;
@@ -6769,44 +3949,13 @@
 +	int scan_mode;		/* SCAN_TYPE_ACTIVE, SCAN_TYPE_PASSIVE */
 +	int scan_need_any;	/* if set, need to scan for any ESSID */
 +
-+	/* the list we got from scanning */
-+	spinlock_t bss_list_spinlock;	/* protects bss_list operations */
-+	struct list_head bss_list;	/* list of BSS we got beacons from */
-+	struct timer_list bss_list_timer;	/* timer to purge old entries
-+						   from bss_list */
-+	struct bss_info *curr_bss;	/* current BSS */
 +	u16 assoc_id;		/* current association ID, if associated */
 +
-+	u8 wanted_bssid[ETH_ALEN];
-+	int wanted_bssid_valid;	/* != 0 if wanted_bssid is to be used */
-+
-+	/* some data for infrastructure mode only */
-+	spinlock_t mgmt_spinlock;	/* this spinlock protects access to
-+					   next_mgmt_bulk */
-+
-+	struct at76_tx_buffer *next_mgmt_bulk;	/* pending management msg to
-+						   send via bulk out */
-+	enum mac_state mac_state;
-+	enum {
-+		SCAN_IDLE,
-+		SCAN_IN_PROGRESS,
-+		SCAN_COMPLETED
-+	} scan_state;
-+	time_t last_scan;
-+
-+	int retries;		/* remaining retries in case of timeout when
-+				 * sending AuthReq or AssocReq */
 +	u8 pm_mode;		/* power management mode */
 +	u32 pm_period;		/* power management period in microseconds */
 +
 +	struct reg_domain const *domain;	/* reg domain description */
 +
-+	/* iwspy support */
-+	spinlock_t spy_spinlock;
-+	struct iw_spy_data spy_data;
-+
-+	struct iw_public_data wireless_data;
-+
 +	/* These fields contain HW config provided by the device (not all of
 +	 * these fields are used by all board types) */
 +	u8 mac_addr[ETH_ALEN];
@@ -6814,9 +3963,6 @@
 +
 +	struct at76_card_config card_config;
 +
-+	/* store rx fragments until complete */
-+	struct rx_data_buf rx_data[NR_RX_DATA_BUF];
-+
 +	enum board_type board_type;
 +	struct mib_fw_version fw_version;
 +
@@ -6824,58 +3970,16 @@
 +	unsigned int netdev_registered:1;
 +	struct set_mib_buffer mib_buf;	/* global buffer for set_mib calls */
 +
-+	/* beacon counting */
 +	int beacon_period;	/* period of mgmt beacons, Kus */
-+	int beacons_received;
-+	unsigned long beacons_last_qual;	/* time we restarted counting
-+						   beacons */
-+};
 +
-+struct at76_rx_radiotap {
-+	struct ieee80211_radiotap_header rt_hdr;
-+	__le64 rt_tsft;
-+	u8 rt_flags;
-+	u8 rt_rate;
-+	s8 rt_signal;
-+	s8 rt_noise;
++	struct ieee80211_hw *hw;
++	int mac80211_registered;
 +};
 +
-+#define AT76_RX_RADIOTAP_PRESENT		  \
-+	((1 << IEEE80211_RADIOTAP_TSFT)		| \
-+	(1 << IEEE80211_RADIOTAP_FLAGS)		| \
-+	(1 << IEEE80211_RADIOTAP_RATE)		| \
-+	(1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)	| \
-+	(1 << IEEE80211_RADIOTAP_DB_ANTNOISE))
-+
-+#define BEACON_MAX_DATA_LENGTH	1500
++#define AT76_SUPPORTED_FILTERS FIF_PROMISC_IN_BSS
 +
-+/* the maximum size of an AssocReq packet */
-+#define ASSOCREQ_MAX_SIZE \
-+  (AT76_TX_HDRLEN + sizeof(struct ieee80211_assoc_request) + \
-+   1 + 1 + IW_ESSID_MAX_SIZE + 1 + 1 + 4)
-+
-+/* for shared secret auth, add the challenge text size */
-+#define AUTH_FRAME_SIZE (AT76_TX_HDRLEN + sizeof(struct ieee80211_auth))
-+
-+/* Maximal number of AuthReq retries */
-+#define AUTH_RETRIES		3
-+
-+/* Maximal number of AssocReq retries */
-+#define ASSOC_RETRIES		3
-+
-+/* Beacon timeout in managed mode when we are connected */
-+#define BEACON_TIMEOUT		(10 * HZ)
-+
-+/* Timeout for authentication response */
-+#define AUTH_TIMEOUT		(1 * HZ)
-+
-+/* Timeout for association response */
-+#define ASSOC_TIMEOUT		(1 * HZ)
-+
-+/* Polling interval when scan is running */
 +#define SCAN_POLL_INTERVAL	(HZ / 4)
 +
-+/* Command completion timeout */
 +#define CMD_COMPLETION_TIMEOUT	(5 * HZ)
 +
 +#define DEF_RTS_THRESHOLD	1536
@@ -6885,22 +3989,20 @@
 +#define DEF_SCAN_MIN_TIME	10
 +#define DEF_SCAN_MAX_TIME	120
 +
-+#define MAX_RTS_THRESHOLD	(MAX_FRAG_THRESHOLD + 1)
-+
 +/* the max padding size for tx in bytes (see calc_padding) */
 +#define MAX_PADDING_SIZE	53
 +
 +#endif				/* _AT76_USB_H */
 diff -up linux-2.6.25.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.25.noarch/drivers/net/wireless/Kconfig
---- linux-2.6.25.noarch/drivers/net/wireless/Kconfig.orig	2008-08-01 10:47:44.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/Kconfig	2008-08-01 10:47:55.000000000 -0400
-@@ -432,6 +432,14 @@ config PCMCIA_ATMEL
+--- linux-2.6.25.noarch/drivers/net/wireless/Kconfig.orig	2008-05-27 15:51:49.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/Kconfig	2008-05-27 15:52:01.000000000 -0400
+@@ -456,6 +456,14 @@ config PCMCIA_ATMEL
  	  Enable support for PCMCIA cards containing the
  	  Atmel at76c502 and at76c504 chips.
  
 +config USB_ATMEL
 +	tristate "Atmel at76c503/at76c505/at76c505a USB cards"
-+	depends on WLAN_80211 && USB
++	depends on MAC80211 && WLAN_80211 && USB
 +	select FW_LOADER
 +	---help---
 +	  Enable support for USB Wireless devices using Atmel at76c503,
@@ -6910,9 +4012,9 @@
  	tristate "Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards"
  	depends on PCMCIA && (BROKEN || !M32R) && WLAN_80211
 diff -up linux-2.6.25.noarch/drivers/net/wireless/Makefile.orig linux-2.6.25.noarch/drivers/net/wireless/Makefile
---- linux-2.6.25.noarch/drivers/net/wireless/Makefile.orig	2008-08-01 10:47:44.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/Makefile	2008-08-01 10:47:55.000000000 -0400
-@@ -31,6 +31,8 @@ obj-$(CONFIG_ATMEL)             += atmel
+--- linux-2.6.25.noarch/drivers/net/wireless/Makefile.orig	2008-05-27 15:51:49.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/Makefile	2008-05-27 15:52:01.000000000 -0400
+@@ -32,6 +32,8 @@ obj-$(CONFIG_ATMEL)             += atmel
  obj-$(CONFIG_PCI_ATMEL)         += atmel_pci.o 
  obj-$(CONFIG_PCMCIA_ATMEL)      += atmel_cs.o
  
@@ -6922,9 +4024,9 @@
  
  obj-$(CONFIG_HOSTAP)		+= hostap/
 diff -up linux-2.6.25.noarch/MAINTAINERS.orig linux-2.6.25.noarch/MAINTAINERS
---- linux-2.6.25.noarch/MAINTAINERS.orig	2008-08-01 10:47:44.000000000 -0400
-+++ linux-2.6.25.noarch/MAINTAINERS	2008-08-01 10:47:55.000000000 -0400
-@@ -740,6 +740,15 @@ W:	http://www.thekelleys.org.uk/atmel
+--- linux-2.6.25.noarch/MAINTAINERS.orig	2008-05-27 15:51:49.000000000 -0400
++++ linux-2.6.25.noarch/MAINTAINERS	2008-05-27 15:52:01.000000000 -0400
+@@ -751,6 +751,15 @@ W:	http://www.thekelleys.org.uk/atmel
  W:	http://atmelwlandriver.sourceforge.net/
  S:	Maintained
  
@@ -6938,5 +4040,5 @@
 +S:	Maintained
 +
  AUDIT SUBSYSTEM
- P:	David Woodhouse
- M:	dwmw2 at infradead.org
+ P:	Al Viro
+ M:	viro at zeniv.linux.org.uk

linux-2.6-compile-fix-gcc-43.patch:

Index: linux-2.6-compile-fix-gcc-43.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-compile-fix-gcc-43.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-compile-fix-gcc-43.patch	21 May 2008 23:55:13 -0000	1.1
+++ linux-2.6-compile-fix-gcc-43.patch	8 Aug 2008 18:56:00 -0000	1.2
@@ -18,7 +18,7 @@
  	unsigned long value;
 @@ -192,7 +201,7 @@ void *__symbol_get_gpl(const char *symbol);
  	static const char __kstrtab_##sym[]			\
- 	__attribute__((section("__ksymtab_strings")))		\
+ 	__attribute__((section("__ksymtab_strings"), aligned(1))) \
  	= MODULE_SYMBOL_PREFIX #sym;                    	\
 -	static const struct kernel_symbol __ksymtab_##sym	\
 +	static __ksym_const struct kernel_symbol __ksymtab_##sym	\

linux-2.6-e1000-ich9.patch:

Index: linux-2.6-e1000-ich9.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-e1000-ich9.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-e1000-ich9.patch	21 May 2008 23:55:13 -0000	1.3
+++ linux-2.6-e1000-ich9.patch	8 Aug 2008 18:56:00 -0000	1.4
@@ -15,15 +15,13 @@
  	case IGP03E1000_E_PHY_ID:
  		phy->type = e1000_phy_igp_3;
  		phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT;
-diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
-index 3031d6d..932b4d8 100644
---- a/drivers/net/e1000e/netdev.c
-+++ b/drivers/net/e1000e/netdev.c
-@@ -4095,6 +4095,7 @@ static struct pci_device_id e1000_pci_tbl[] = {
- 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IFE_G), board_ich9lan },
- 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IFE_GT), board_ich9lan },
- 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_AMT), board_ich9lan },
+--- linux-2.6.25.noarch/drivers/net/e1000e/netdev.c~	2008-05-16 10:31:41.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/e1000e/netdev.c	2008-05-16 10:32:43.000000000 -0400
+@@ -4599,6 +4599,7 @@ static struct pci_device_id e1000_pci_tb
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M), board_ich9lan },
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_AMT), board_ich9lan },
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_V), board_ich9lan },
 +	{ PCI_VDEVICE(INTEL, 0x10be), board_ich9lan },
- 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_C), board_ich9lan },
  
- 	{ }	/* terminate list */
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_LM), board_ich9lan },
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_LF), board_ich9lan },

linux-2.6-execshield.patch:

Index: linux-2.6-execshield.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-execshield.patch,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -r1.77 -r1.78
--- linux-2.6-execshield.patch	5 Aug 2008 03:13:22 -0000	1.77
+++ linux-2.6-execshield.patch	8 Aug 2008 18:56:00 -0000	1.78
@@ -1,8 +1,6 @@
-diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
-index f86a3c4..4c5f70d 100644
---- a/arch/x86/kernel/cpu/common.c
-+++ b/arch/x86/kernel/cpu/common.c
-@@ -478,6 +478,20 @@ void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
+--- linux-2.6.25.noarch/arch/x86/kernel/cpu/common.c~	2008-05-16 13:41:08.000000000 -0400
++++ linux-2.6.25.noarch/arch/x86/kernel/cpu/common.c	2008-05-16 13:42:11.000000000 -0400
+@@ -479,6 +479,21 @@ void __cpuinit identify_cpu(struct cpuin
  	 * we do "generic changes."
  	 */
  
@@ -20,8 +18,9 @@
 +			clear_bit(X86_FEATURE_SEP, c->x86_capability);
 +	}
 +
++
  	/* If the model name is still unset, do table lookup. */
- 	if ( !c->x86_model_id[0] ) {
+ 	if (!c->x86_model_id[0]) {
  		char *p;
 diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
 index a7d50a5..83f7b4e 100644
@@ -81,70 +80,17 @@
 +	mm->context.exec_limit = 0;
 +	set_user_cs(&mm->context.user_cs, 0);
 +}
-diff --git a/arch/x86/kernel/setup64.c b/arch/x86/kernel/setup64.c
-index 309366f..8a940dc 100644
---- a/arch/x86/kernel/setup64.c
-+++ b/arch/x86/kernel/setup64.c
-@@ -45,46 +45,6 @@ EXPORT_SYMBOL_GPL(__supported_pte_mask);
- 
- static int do_not_nx __cpuinitdata = 0;
+--- linux-2.6.25.noarch/arch/x86/kernel/tlb_32.c~	2008-05-16 13:30:44.000000000 -0400
++++ linux-2.6.25.noarch/arch/x86/kernel/tlb_32.c	2008-05-16 13:31:14.000000000 -0400
+@@ -2,6 +2,7 @@
+ #include <linux/cpu.h>
+ #include <linux/interrupt.h>
  
--/* noexec=on|off
--Control non executable mappings for 64bit processes.
--
--on	Enable(default)
--off	Disable
--*/ 
--static int __init nonx_setup(char *str)
--{
--	if (!str)
--		return -EINVAL;
--	if (!strncmp(str, "on", 2)) {
--                __supported_pte_mask |= _PAGE_NX; 
-- 		do_not_nx = 0; 
--	} else if (!strncmp(str, "off", 3)) {
--		do_not_nx = 1;
--		__supported_pte_mask &= ~_PAGE_NX;
--        }
--	return 0;
--} 
--early_param("noexec", nonx_setup);
--
--int force_personality32 = 0; 
--
--/* noexec32=on|off
--Control non executable heap for 32bit processes.
--To control the stack too use noexec=off
--
--on	PROT_READ does not imply PROT_EXEC for 32bit processes
--off	PROT_READ implies PROT_EXEC (default)
--*/
--static int __init nonx32_setup(char *str)
--{
--	if (!strcmp(str, "on"))
--		force_personality32 &= ~READ_IMPLIES_EXEC;
--	else if (!strcmp(str, "off"))
--		force_personality32 |= READ_IMPLIES_EXEC;
--	return 1;
--}
--__setup("noexec32=", nonx32_setup);
--
- /*
-  * Copy data used in early init routines from the initial arrays to the
-  * per cpu data areas.  These arrays then become expendable and the
-diff --git a/arch/x86/kernel/smp_32.c b/arch/x86/kernel/smp_32.c
-index dc0cde9..cca75b4 100644
---- a/arch/x86/kernel/smp_32.c
-+++ b/arch/x86/kernel/smp_32.c
-@@ -22,6 +22,7 @@
- 
- #include <asm/mtrr.h>
- #include <asm/tlbflush.h>
 +#include <asm/desc.h>
- #include <asm/mmu_context.h>
- #include <mach_apic.h>
+ #include <asm/tlbflush.h>
  
-@@ -316,6 +317,8 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
+ DEFINE_PER_CPU(struct tlb_state, cpu_tlbstate)
+@@ -92,6 +93,8 @@ void smp_invalidate_interrupt(struct pt_
  	unsigned long cpu;
  
  	cpu = get_cpu();
@@ -153,15 +99,13 @@
  
  	if (!cpu_isset(cpu, flush_cpumask))
  		goto out;
-diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c
-index b22c01e..7e196e4 100644
---- a/arch/x86/kernel/traps_32.c
-+++ b/arch/x86/kernel/traps_32.c
-@@ -592,7 +592,91 @@ DO_ERROR(10, SIGSEGV, "invalid TSS", invalid_TSS)
+--- 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)
  DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0, 0)
--DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0, 1)
+-DO_ERROR_INFO(32, SIGILL, "iret exception", iret_error, ILL_BADSTK, 0, 1)
 +
 +/*
 + * lazy-check for CS validity on exec-shield binaries:
@@ -236,35 +180,33 @@
 +	ok = check_lazy_exec_limit(get_cpu(), regs, error_code);
 +	put_cpu();
 +	if (!ok && notify_die(DIE_TRAP, "iret exception", regs,
-+	    error_code, 32, SIGSEGV) != NOTIFY_STOP) {
-+		siginfo_t info;
-+		info.si_signo = SIGSEGV;
-+		info.si_errno = 0;
-+		info.si_code = ILL_BADSTK;
-+		info.si_addr = 0;
-+		do_trap(32, SIGSEGV, "iret exception", 0, regs, error_code,
-+			&info);
++		error_code, 32, SIGSEGV) != NOTIFY_STOP) {
++			siginfo_t info;
++			info.si_signo = SIGSEGV;
++			info.si_errno = 0;
++			info.si_code = ILL_BADSTK;
++			info.si_addr = 0;
++			do_trap(32, SIGSEGV, "iret exception", 0, regs, error_code,
++				&info);
 +	}
 +}
-+
  
- void __kprobes do_general_protection(struct pt_regs * regs,
- 					      long error_code)
-@@ -600,6 +684,7 @@ void __kprobes do_general_protection(struct pt_regs * regs,
- 	int cpu = get_cpu();
- 	struct tss_struct *tss = &per_cpu(init_tss, cpu);
- 	struct thread_struct *thread = &current->thread;
+ void __kprobes do_general_protection(struct pt_regs *regs, long error_code)
+ {
+ 	struct thread_struct *thread;
+ 	struct tss_struct *tss;
+ 	int cpu;
 +	int ok;
  
- 	/*
- 	 * Perform the lazy TSS's I/O bitmap copy. If the TSS has an
-@@ -626,7 +711,6 @@ void __kprobes do_general_protection(struct pt_regs * regs,
- 		put_cpu();
+ 	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 & VM_MASK)
+ 	if (regs->flags & X86_VM_MASK)
  		goto gp_in_vm86;
 @@ -634,6 +718,22 @@ void __kprobes do_general_protection(struct pt_regs * regs,
  	if (!user_mode(regs))
@@ -408,7 +350,7 @@
  	/* Some simple consistency checks for the interpreter */
  	if (elf_interpreter) {
  		retval = -ELIBBAD;
-@@ -728,6 +735,15 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
+@@ -721,6 +721,15 @@ static int load_elf_binary(struct linux_
  	if (retval)
  		goto out_free_dentry;
  
@@ -421,9 +363,9 @@
 +		arch_add_exec_range(current->mm, -1);
 +#endif
 +
- 	/* Discard our unneeded old files struct */
- 	if (files) {
- 		put_files_struct(files);
+ 	/* OK, This is the point of no return */
+ 	current->flags &= ~PF_FORKNOEXEC;
+ 	current->mm->def_flags = def_flags;
 @@ -741,7 +757,8 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
  	/* Do this immediately, since STACK_TOP as used in setup_arg_pages
  	   may depend on the personality.  */
@@ -443,13 +385,11 @@
  			/*
  			 * load_elf_interp() returns relocation
  			 * adjustment
-diff --git a/fs/proc/array.c b/fs/proc/array.c
-index 07d6c48..46adc3b 100644
---- a/fs/proc/array.c
-+++ b/fs/proc/array.c
-@@ -471,8 +471,12 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
+--- linux-2.6.25.noarch/fs/proc/array.c~	2008-05-16 13:51:04.000000000 -0400
++++ linux-2.6.25.noarch/fs/proc/array.c	2008-05-16 13:53:24.000000000 -0400
+@@ -473,8 +473,13 @@ static int do_task_stat(struct seq_file 
+ 		unlock_task_sighand(task, &flags);
  	}
- 	rcu_read_unlock();
  
 -	if (!whole || num_threads < 2)
 -		wchan = get_wchan(task);
@@ -459,6 +399,7 @@
 +			capable(CAP_SYS_NICE))
 +				wchan = get_wchan(task);
 +	}
++
  	if (!whole) {
  		min_flt = task->min_flt;
  		maj_flt = task->maj_flt;
@@ -553,10 +494,11 @@
 index 5b6a05d..7ad80b9 100644
 --- a/include/asm-x86/desc.h
 +++ b/include/asm-x86/desc.h
-@@ -353,6 +353,22 @@ static inline void set_system_gate_ist(int n, void *addr, unsigned ist)
+@@ -353,6 +353,26 @@ static inline void set_system_gate_ist(int n, void *addr, unsigned ist)
  	_set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, __KERNEL_CS);
  }
  
++#ifdef CONFIG_X86_32
 +static inline void set_user_cs(struct desc_struct *desc, unsigned long limit)
 +{
 +	limit = (limit - 1) / PAGE_SIZE;
@@ -567,35 +509,18 @@
 +#define load_user_cs_desc(cpu, mm) \
 +	get_cpu_gdt_table(cpu)[GDT_ENTRY_DEFAULT_USER_CS] = (mm)->context.user_cs
 +
-+#ifdef CONFIG_X86_32
 +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
  /*
   * GET_DESC_BASE reads the descriptor base of the specified segment.
-diff --git a/include/asm-x86/elf.h b/include/asm-x86/elf.h
-index fb62f99..516a9da 100644
---- a/include/asm-x86/elf.h
-+++ b/include/asm-x86/elf.h
-@@ -185,7 +185,6 @@ static inline void elf_common_init(struct thread_struct *t,
- 			clear_thread_flag(TIF_ABI_PENDING);	\
- 		else						\
- 			set_thread_flag(TIF_ABI_PENDING);	\
--		current->personality |= force_personality32;	\
- 	} while (0)
- #define COMPAT_ELF_PLATFORM			("i686")
- 
-@@ -230,7 +229,6 @@ static inline void elf_common_init(struct thread_struct *t,
- #define ELF_PLATFORM       ("x86_64")
- extern void set_personality_64bit(void);
- extern unsigned int sysctl_vsyscall32;
--extern int force_personality32;
- 
- #endif /* !CONFIG_X86_32 */
- 
 diff --git a/include/asm-x86/mmu.h b/include/asm-x86/mmu.h
 index efa962c..db9b109 100644
 --- a/include/asm-x86/mmu.h
@@ -607,7 +532,7 @@
 + * exec_limit is used to track the range PROT_EXEC
 + * mappings span.
   */
- typedef struct { 
+ typedef struct {
  	void *ldt;
 @@ -18,6 +20,10 @@ typedef struct {
  	int size;
@@ -620,48 +545,31 @@
  } mm_context_t;
  
  #ifdef CONFIG_SMP
-diff --git a/include/asm-x86/pgalloc_64.h b/include/asm-x86/pgalloc_64.h
-index 8d67223..982e1cb 100644
---- a/include/asm-x86/pgalloc_64.h
-+++ b/include/asm-x86/pgalloc_64.h
-@@ -5,6 +5,13 @@
- #include <linux/threads.h>
- #include <linux/mm.h>
+--- linux-2.6.25.noarch/include/asm-x86/processor.h~	2008-05-16 15:56:21.000000000 -0400
++++ linux-2.6.25.noarch/include/asm-x86/processor.h	2008-05-16 16:02:44.000000000 -0400
+@@ -151,6 +151,9 @@ static inline int hlt_works(int cpu)
  
-+#define arch_add_exec_range(mm, limit) \
-+		do { (void)(mm), (void)(limit); } while (0)
-+#define arch_flush_exec_range(mm) \
-+		do { (void)(mm); } while (0)
-+#define arch_remove_exec_range(mm, limit) \
-+		do { (void)(mm), (void)(limit); } while (0)
-+
- #define pmd_populate_kernel(mm, pmd, pte) \
- 		set_pmd(pmd, __pmd(_PAGE_TABLE | __pa(pte)))
- #define pud_populate(mm, pud, pmd) \
-diff --git a/include/asm-x86/processor.h b/include/asm-x86/processor.h
-index 149920d..79c8ad8 100644
---- a/include/asm-x86/processor.h
-+++ b/include/asm-x86/processor.h
-@@ -679,6 +679,9 @@ extern int bootloader_type;
- extern char ignore_fpu_irq;
- #define cache_line_size() (boot_cpu_data.x86_cache_alignment)
+ #define cache_line_size()	(boot_cpu_data.x86_cache_alignment)
  
 +#define __HAVE_ARCH_ALIGN_STACK
 +extern unsigned long arch_align_stack(unsigned long sp);
 +
- #define HAVE_ARCH_PICK_MMAP_LAYOUT 1
- #define ARCH_HAS_PREFETCHW
- #define ARCH_HAS_SPINLOCK_PREFETCH
-@@ -756,6 +759,9 @@ static inline void prefetchw(const void *x)
- 	regs->cs = __USER_CS;					\
- 	regs->ip = new_eip;					\
- 	regs->sp = new_esp;					\
-+	preempt_disable();					\
-+	load_user_cs_desc(smp_processor_id(), current->mm);	\
-+	preempt_enable();					\
- } while (0)
- 
+ extern void cpu_detect(struct cpuinfo_x86 *c);
  
+ extern void identify_cpu(struct cpuinfo_x86 *);
+--- linux-2.6.25.noarch/arch/x86/kernel/process_32.c~	2008-05-16 16:02:50.000000000 -0400
++++ linux-2.6.25.noarch/arch/x86/kernel/process_32.c	2008-05-16 16:03:21.000000000 -0400
+@@ -411,6 +411,10 @@ start_thread(struct pt_regs *regs, unsig
+ 	regs->cs		= __USER_CS;
+ 	regs->ip		= new_ip;
+ 	regs->sp		= new_sp;
++	preempt_disable();
++	load_user_cs_desc(smp_processor_id(), current->mm);
++	preempt_enable();
++
+ 	/*
+ 	 * Free the old FP and other extended state
+ 	 */
 diff --git a/include/linux/mm.h b/include/linux/mm.h
 index e8abb38..1483fc7 100644
 --- a/include/linux/mm.h
@@ -741,9 +649,9 @@
 index d41ef6b..5304704 100644
 --- a/kernel/sysctl.c
 +++ b/kernel/sysctl.c
-@@ -81,6 +81,26 @@ extern int maps_protect;
- extern int sysctl_stat_interval;
+@@ -83,6 +83,27 @@ 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:
@@ -765,6 +673,7 @@
 +
 +__setup("exec-shield=", setup_exec_shield);
 +
++
  /* Constants used for minimum and  maximum */
  #if defined(CONFIG_DETECT_SOFTLOCKUP) || defined(CONFIG_HIGHMEM)
  static int one = 1;
@@ -993,8 +902,8 @@
 +#include <asm/desc.h>
 +#endif
  
- static void change_pte_range(struct mm_struct *mm, pmd_t *pmd,
- 		unsigned long addr, unsigned long end, pgprot_t newprot,
+ #ifndef pgprot_modify
+ static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
 @@ -134,7 +138,7 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
  	struct mm_struct *mm = vma->vm_mm;
  	unsigned long oldflags = vma->vm_flags;

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

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.8 -r 1.9 linux-2.6-firewire-git-update.patch
Index: linux-2.6-firewire-git-update.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-firewire-git-update.patch,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- linux-2.6-firewire-git-update.patch	21 May 2008 23:55:13 -0000	1.8
+++ linux-2.6-firewire-git-update.patch	8 Aug 2008 18:56:00 -0000	1.9
@@ -1,76 +1,113 @@
-git diff in linux1394-2.6.git vs. v2.6.25-rc9, April 12, 2008
-
- drivers/firewire/Kconfig          |    5 +
- drivers/firewire/fw-card.c        |   52 +-----
- drivers/firewire/fw-cdev.c        |   13 +-
- drivers/firewire/fw-device.c      |  263 +++++++++++++++++++++-----
- drivers/firewire/fw-device.h      |   38 +++-
- drivers/firewire/fw-iso.c         |    5 -
- drivers/firewire/fw-ohci.c        |  383 ++++++++++++++++++++++++++++++-------
- drivers/firewire/fw-ohci.h        |    2 +
- drivers/firewire/fw-sbp2.c        |  150 +++++++--------
- drivers/firewire/fw-topology.c    |   22 ++-
- drivers/firewire/fw-topology.h    |   11 +-
- drivers/firewire/fw-transaction.c |   75 ++++----
- drivers/firewire/fw-transaction.h |   17 +-
- drivers/ieee1394/csr.c            |    6 +-
- drivers/ieee1394/dv1394.c         |    4 +-
- drivers/ieee1394/highlevel.c      |    6 +-
- drivers/ieee1394/ieee1394_core.c  |    2 +-
- drivers/ieee1394/nodemgr.c        |    6 +-
- drivers/ieee1394/ohci1394.c       |  229 +++++++++++-----------
- drivers/ieee1394/pcilynx.c        |   15 +-
- drivers/ieee1394/raw1394.c        |    2 -
- drivers/ieee1394/sbp2.c           |   11 +-
- drivers/ieee1394/video1394.c      |    4 +-
- 23 files changed, 859 insertions(+), 462 deletions(-)
+ 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(-)
 
 diff --git a/drivers/firewire/Kconfig b/drivers/firewire/Kconfig
-index 25bdc2d..fb4d391 100644
+index 76f2671..fa6d6ab 100644
 --- a/drivers/firewire/Kconfig
 +++ b/drivers/firewire/Kconfig
-@@ -54,6 +54,11 @@ config FIREWIRE_OHCI
- 	  directive, use "install modulename /bin/true" for the modules to be
- 	  blacklisted.
- 
-+config FIREWIRE_OHCI_DEBUG
-+	bool
-+	depends on FIREWIRE_OHCI
-+	default y
-+
- config FIREWIRE_SBP2
- 	tristate "Support for storage devices (SBP-2 protocol driver)"
- 	depends on FIREWIRE && SCSI
+@@ -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 a034627..102e809 100644
+index 5b4c0d9..94cf070 100644
 --- a/drivers/firewire/fw-card.c
 +++ b/drivers/firewire/fw-card.c
-@@ -167,7 +167,6 @@ fw_core_add_descriptor(struct fw_descriptor *desc)
- 
- 	return 0;
- }
--EXPORT_SYMBOL(fw_core_add_descriptor);
- 
- void
- fw_core_remove_descriptor(struct fw_descriptor *desc)
-@@ -182,7 +181,6 @@ fw_core_remove_descriptor(struct fw_descriptor *desc)
- 
- 	mutex_unlock(&card_mutex);
- }
--EXPORT_SYMBOL(fw_core_remove_descriptor);
+@@ -16,12 +16,15 @@
+  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+  */
  
- static const char gap_count_table[] = {
+-#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[] = {
  	63, 5, 7, 8, 10, 13, 16, 18, 21, 24, 26, 29, 32, 35, 37, 40
-@@ -220,7 +218,7 @@ fw_card_bm_work(struct work_struct *work)
- 	struct bm_data bmd;
+ };
+ 
+-struct bm_data {
+-	struct fw_transaction t;
+-	struct {
+-		__be32 arg;
+-		__be32 data;
+-	} lock;
+-	u32 old;
+-	int rcode;
+-	struct completion done;
+-};
+-
+-static void
+-complete_bm_lock(struct fw_card *card, int rcode,
+-		 void *payload, size_t length, void *data)
+-{
+-	struct bm_data *bmd = data;
+-
+-	if (rcode == RCODE_COMPLETE)
+-		bmd->old = be32_to_cpu(*(__be32 *) payload);
+-	bmd->rcode = rcode;
+-	complete(&bmd->done);
+-}
+-
+ static void
+ fw_card_bm_work(struct work_struct *work)
+ {
+ 	struct fw_card *card = container_of(work, struct fw_card, work.work);
+ 	struct fw_device *root_device;
+ 	struct fw_node *root_node, *local_node;
+-	struct bm_data bmd;
  	unsigned long flags;
- 	int root_id, new_root_id, irm_id, gap_count, generation, grace;
--	int do_reset = 0;
-+	bool do_reset = false;
+-	int root_id, new_root_id, irm_id, gap_count, generation, grace;
++	int root_id, new_root_id, irm_id, gap_count, generation, grace, rcode;
+ 	bool do_reset = false;
++	__be32 lock_data[2];
  
  	spin_lock_irqsave(&card->lock, flags);
  	local_node = card->local_node;
-@@ -240,7 +238,7 @@ fw_card_bm_work(struct work_struct *work)
+@@ -238,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));
  
@@ -79,2013 +116,1040 @@
  	    (card->bm_generation != generation && grace)) {
  		/*
  		 * This first step is to figure out who is IRM and
-@@ -331,7 +329,7 @@ fw_card_bm_work(struct work_struct *work)
- 		 */
- 		spin_unlock_irqrestore(&card->lock, flags);
- 		goto out;
--	} else if (root_device->config_rom[2] & BIB_CMC) {
-+	} else if (root_device->cmc) {
- 		/*
- 		 * FIXME: I suppose we should set the cmstr bit in the
- 		 * STATE_CLEAR register of this node, as described in
-@@ -360,14 +358,14 @@ fw_card_bm_work(struct work_struct *work)
- 		gap_count = 63;
+@@ -260,33 +240,28 @@ fw_card_bm_work(struct work_struct *work)
+ 			goto pick_me;
+ 		}
[...3725 lines suppressed...]
+ 	/* These request have different format. */
+ 	case RAW1394_IOC_ISO_RECV_PACKETS32:
+@@ -2984,7 +2994,7 @@ static const struct file_operations raw1394_fops = {
+ 	.read = raw1394_read,
+ 	.write = raw1394_write,
+ 	.mmap = raw1394_mmap,
+-	.ioctl = raw1394_ioctl,
++	.unlocked_ioctl = raw1394_ioctl,
+ #ifdef CONFIG_COMPAT
+ 	.compat_ioctl = raw1394_compat_ioctl,
+ #endif
 diff --git a/drivers/ieee1394/sbp2.c b/drivers/ieee1394/sbp2.c
-index f53f72d..16b9d0a 100644
+index a5ceff2..9cbf315 100644
 --- a/drivers/ieee1394/sbp2.c
 +++ b/drivers/ieee1394/sbp2.c
-@@ -615,7 +615,7 @@ static struct sbp2_command_info *sbp2util_allocate_command_orb(
- 		cmd->Current_SCpnt = Current_SCpnt;
- 		list_add_tail(&cmd->list, &lu->cmd_orb_inuse);
- 	} else
--		SBP2_ERR("%s: no orbs available", __FUNCTION__);
-+		SBP2_ERR("%s: no orbs available", __func__);
- 	spin_unlock_irqrestore(&lu->cmd_orb_lock, flags);
- 	return cmd;
- }
-@@ -1294,7 +1294,7 @@ static int sbp2_set_busy_timeout(struct sbp2_lu *lu)
- 
- 	data = cpu_to_be32(SBP2_BUSY_TIMEOUT_VALUE);
- 	if (hpsb_node_write(lu->ne, SBP2_BUSY_TIMEOUT_ADDRESS, &data, 4))
--		SBP2_ERR("%s error", __FUNCTION__);
-+		SBP2_ERR("%s error", __func__);
+@@ -186,6 +186,11 @@ MODULE_PARM_DESC(exclusive_login, "Exclusive login to sbp2 device "
+  * - delay inquiry
+  *   Wait extra SBP2_INQUIRY_DELAY seconds after login before SCSI inquiry.
+  *
++ * - power condition
++ *   Set the power condition field in the START STOP UNIT commands sent by
++ *   sd_mod on suspend, resume, and shutdown (if manage_start_stop is on).
++ *   Some disks need this to spin down or to resume properly.
++ *
+  * - override internal blacklist
+  *   Instead of adding to the built-in blacklist, use only the workarounds
+  *   specified in the module load parameter.
+@@ -199,6 +204,8 @@ MODULE_PARM_DESC(workarounds, "Work around device bugs (default = 0"
+ 	", skip mode page 8 = "   __stringify(SBP2_WORKAROUND_MODE_SENSE_8)
+ 	", fix capacity = "       __stringify(SBP2_WORKAROUND_FIX_CAPACITY)
+ 	", delay inquiry = "      __stringify(SBP2_WORKAROUND_DELAY_INQUIRY)
++	", set power condition in start stop unit = "
++				  __stringify(SBP2_WORKAROUND_POWER_CONDITION)
+ 	", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE)
+ 	", or a combination)");
+ 
+@@ -359,18 +366,25 @@ static const struct {
+ 		.firmware_revision	= 0x002800,
+ 		.model_id		= 0x001010,
+ 		.workarounds		= SBP2_WORKAROUND_INQUIRY_36 |
+-					  SBP2_WORKAROUND_MODE_SENSE_8,
++					  SBP2_WORKAROUND_MODE_SENSE_8 |
++					  SBP2_WORKAROUND_POWER_CONDITION,
+ 	},
+ 	/* DViCO Momobay FX-3A with TSB42AA9A bridge */ {
+ 		.firmware_revision	= 0x002800,
+ 		.model_id		= 0x000000,
+-		.workarounds		= SBP2_WORKAROUND_DELAY_INQUIRY,
++		.workarounds		= SBP2_WORKAROUND_DELAY_INQUIRY |
++					  SBP2_WORKAROUND_POWER_CONDITION,
+ 	},
+ 	/* Initio bridges, actually only needed for some older ones */ {
+ 		.firmware_revision	= 0x000200,
+ 		.model_id		= SBP2_ROM_VALUE_WILDCARD,
+ 		.workarounds		= SBP2_WORKAROUND_INQUIRY_36,
+ 	},
++	/* PL-3507 bridge with Prolific firmware */ {
++		.firmware_revision	= 0x012800,
++		.model_id		= SBP2_ROM_VALUE_WILDCARD,
++		.workarounds		= SBP2_WORKAROUND_POWER_CONDITION,
++	},
+ 	/* Symbios bridge */ {
+ 		.firmware_revision	= 0xa0b800,
+ 		.model_id		= SBP2_ROM_VALUE_WILDCARD,
+@@ -1995,6 +2009,8 @@ static int sbp2scsi_slave_configure(struct scsi_device *sdev)
+ 
+ 	sdev->use_10_for_rw = 1;
+ 
++	if (sbp2_exclusive_login)
++		sdev->manage_start_stop = 1;
+ 	if (sdev->type == TYPE_ROM)
+ 		sdev->use_10_for_ms = 1;
+ 	if (sdev->type == TYPE_DISK &&
+@@ -2002,6 +2018,8 @@ static int sbp2scsi_slave_configure(struct scsi_device *sdev)
+ 		sdev->skip_ms_page_8 = 1;
+ 	if (lu->workarounds & SBP2_WORKAROUND_FIX_CAPACITY)
+ 		sdev->fix_capacity = 1;
++	if (lu->workarounds & SBP2_WORKAROUND_POWER_CONDITION)
++		sdev->start_stop_pwr_cond = 1;
+ 	if (lu->workarounds & SBP2_WORKAROUND_128K_MAX_TRANS)
+ 		blk_queue_max_sectors(sdev->request_queue, 128 * 1024 / 512);
  	return 0;
- }
- 
-@@ -1985,11 +1985,8 @@ static int sbp2scsi_slave_alloc(struct scsi_device *sdev)
- 	lu->sdev = sdev;
- 	sdev->allow_restart = 1;
- 
--	/*
--	 * Update the dma alignment (minimum alignment requirements for
--	 * start and end of DMA transfers) to be a sector
--	 */
--	blk_queue_update_dma_alignment(sdev->request_queue, 511);
-+	/* SBP-2 requires quadlet alignment of the data buffers. */
-+	blk_queue_update_dma_alignment(sdev->request_queue, 4 - 1);
+diff --git a/drivers/ieee1394/sbp2.h b/drivers/ieee1394/sbp2.h
+index 80d8e09..875428b 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
  
- 	if (lu->workarounds & SBP2_WORKAROUND_INQUIRY_36)
- 		sdev->inquiry_len = 36;
+ #endif /* SBP2_H */
 diff --git a/drivers/ieee1394/video1394.c b/drivers/ieee1394/video1394.c
-index bd28adf..e03024e 100644
+index e24772d..069b9f6 100644
 --- a/drivers/ieee1394/video1394.c
 +++ b/drivers/ieee1394/video1394.c
-@@ -1315,8 +1315,7 @@ static struct ieee1394_device_id video1394_id_table[] = {
- MODULE_DEVICE_TABLE(ieee1394, video1394_id_table);
- 
- static struct hpsb_protocol_driver video1394_driver = {
--	.name		= VIDEO1394_DRIVER_NAME,
--	.id_table	= video1394_id_table,
-+	.name = VIDEO1394_DRIVER_NAME,
- };
- 
- 
-@@ -1504,7 +1503,6 @@ static int __init video1394_init_module (void)
+@@ -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;
--	kobject_set_name(&video1394_cdev.kobj, VIDEO1394_DRIVER_NAME);
  	ret = cdev_add(&video1394_cdev, IEEE1394_VIDEO1394_DEV, 16);
- 	if (ret) {
- 		PRINT_G(KERN_ERR, "video1394: unable to get minor device block");
+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 */

linux-2.6-lirc.patch:

Index: linux-2.6-lirc.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-lirc.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- linux-2.6-lirc.patch	10 Jul 2008 03:54:25 -0000	1.6
+++ linux-2.6-lirc.patch	8 Aug 2008 18:56:00 -0000	1.7
@@ -14,11 +14,11 @@
  drivers/input/lirc/lirc_dev.h         |  264 ++++++
  drivers/input/lirc/lirc_i2c.c         |  668 +++++++++++++++
  drivers/input/lirc/lirc_igorplugusb.c |  624 ++++++++++++++
- drivers/input/lirc/lirc_imon.c        | 1165 +++++++++++++++++++++++++++
+ drivers/input/lirc/lirc_imon.c        | 1248 ++++++++++++++++++++++++++++
  drivers/input/lirc/lirc_it87.c        | 1012 +++++++++++++++++++++++
  drivers/input/lirc/lirc_it87.h        |  116 +++
  drivers/input/lirc/lirc_mceusb.c      |  890 ++++++++++++++++++++
- drivers/input/lirc/lirc_mceusb2.c     | 1058 ++++++++++++++++++++++++
+ drivers/input/lirc/lirc_mceusb2.c     | 1060 ++++++++++++++++++++++++
  drivers/input/lirc/lirc_parallel.c    |  745 +++++++++++++++++
  drivers/input/lirc/lirc_parallel.h    |   26 +
  drivers/input/lirc/lirc_pvr150.c      | 1431 +++++++++++++++++++++++++++++++++
@@ -27,7 +27,7 @@
  drivers/input/lirc/lirc_sir.c         | 1323 ++++++++++++++++++++++++++++++
  drivers/input/lirc/lirc_streamzap.c   |  810 +++++++++++++++++++
  drivers/input/lirc/lirc_ttusbir.c     |  393 +++++++++
- 29 files changed, 17481 insertions(+), 0 deletions(-)
+ 29 files changed, 17566 insertions(+), 0 deletions(-)
 
 diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig
 index 5f9d860..747633c 100644
@@ -45,10 +45,10 @@
 index 98c4f9a..6a1049b 100644
 --- a/drivers/input/Makefile
 +++ b/drivers/input/Makefile
-@@ -23,3 +23,5 @@ obj-$(CONFIG_INPUT_MISC)	+= misc/
- obj-$(CONFIG_INPUT_MISC)	+= misc/
- 
+@@ -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/
 diff --git a/drivers/input/lirc/Kconfig b/drivers/input/lirc/Kconfig
@@ -1281,7 +1281,7 @@
 index 0000000..da2e7eb
 --- /dev/null
 +++ b/drivers/input/lirc/kcompat.h
-@@ -0,0 +1,153 @@
+@@ -0,0 +1,152 @@
 +/*      $Id$      */
 +
 +#ifndef _KCOMPAT_H
@@ -1299,14 +1299,13 @@
 +
 +
 +
-+#define lirc_device_create(cs, parent, dev, fmt, args...) \
-+	class_device_create(cs, NULL, dev, parent, fmt, ## args)
++#define lirc_device_create device_create
 +#define LIRC_DEVFS_PREFIX
 +
 +
 +typedef struct class lirc_class_t;
 +
-+#define lirc_device_destroy class_device_destroy
++#define lirc_device_destroy device_destroy
 +
 +
 +
@@ -3920,7 +3919,7 @@
 +#endif
 diff --git a/drivers/input/lirc/lirc_dev.c b/drivers/input/lirc/lirc_dev.c
 new file mode 100644
-index 0000000..1d5706f
+index 0000000..93ac8de
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_dev.c
 @@ -0,0 +1,827 @@
@@ -3965,7 +3964,7 @@
 +#include <linux/completion.h>
 +#include <linux/uaccess.h>
 +#include <linux/errno.h>
-+#include <asm/semaphore.h>
++#include <linux/semaphore.h>
 +#define __KERNEL_SYSCALLS__
 +#include <linux/unistd.h>
 +#include <linux/kthread.h>
@@ -5023,7 +5022,7 @@
 +#endif
 diff --git a/drivers/input/lirc/lirc_i2c.c b/drivers/input/lirc/lirc_i2c.c
 new file mode 100644
-index 0000000..6e47d53
+index 0000000..3d107f6
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_i2c.c
 @@ -0,0 +1,668 @@
@@ -5083,7 +5082,7 @@
 +#include <linux/i2c.h>
 +#include <linux/i2c-algo-bit.h>
 +
-+#include <asm/semaphore.h>
++#include <linux/semaphore.h>
 +
 +#include "kcompat.h"
 +#include "lirc_dev.h"
@@ -6327,10 +6326,10 @@
 + */
 diff --git a/drivers/input/lirc/lirc_imon.c b/drivers/input/lirc/lirc_imon.c
 new file mode 100644
-index 0000000..9bf63b4
+index 0000000..776c742
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_imon.c
-@@ -0,0 +1,1165 @@
+@@ -0,0 +1,1248 @@
 +/*
 + *   lirc_imon.c:  LIRC plugin/VFD driver for Ahanix/Soundgraph IMON IR/VFD
 + *
@@ -6377,7 +6376,9 @@
 + *
 + */
 +#include <linux/version.h>
-+
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
 +
 +#include <linux/autoconf.h>
 +
@@ -6430,7 +6431,11 @@
 +static int vfd_open(struct inode *inode, struct file *file);
 +static int vfd_close(struct inode *inode, struct file *file);
 +static ssize_t vfd_write(struct file *file, const char *buf,
-+				size_t n_bytes, loff_t *pos);
++			 size_t n_bytes, loff_t *pos);
++
++/* LCD file_operations override function prototypes */
++static ssize_t lcd_write(struct file *file, const char *buf,
++			 size_t n_bytes, loff_t *pos);
 +
 +/* LIRC plugin function prototypes */
 +static int ir_open(void *data);
@@ -6493,11 +6498,16 @@
 +
 +/* USB Device ID for IMON USB Control Board */
 +static struct usb_device_id imon_usb_id_table[] = {
-+	{ USB_DEVICE(0x0aa8, 0xffda) },		/* IR & VFD    */
-+	{ USB_DEVICE(0x0aa8, 0x8001) },		/* IR only     */
-+	{ USB_DEVICE(0x15c2, 0xffda) },		/* IR & VFD    */
-+	{ USB_DEVICE(0x15c2, 0xffdc) },		/* IR & VFD    */
-+	{ USB_DEVICE(0x04e8, 0xff30) },		/* ext IR only */
++	/* IMON USB Control Board (IR & VFD) */
++	{ USB_DEVICE(0x0aa8, 0xffda) },
++	/* IMON USB Control Board (IR only) */
++	{ USB_DEVICE(0x0aa8, 0x8001) },
++	/* IMON USB Control Board (IR & VFD) */
++	{ USB_DEVICE(0x15c2, 0xffda) },
++	/* IMON USB Control Board (IR & VFD) */
++	{ USB_DEVICE(0x15c2, 0xffdc) },
++	/* IMON USB Control Board (ext IR only) */
++	{ USB_DEVICE(0x04e8, 0xff30) },
 +	{}
 +};
 +
@@ -6535,6 +6545,9 @@
 +
 +static int debug;
 +
++/* lcd or vfd? */
++static int is_lcd;
++
 +
 +/* ------------------------------------------------------------
 + *		     M O D U L E   C O D E
@@ -6547,6 +6560,9 @@
 +MODULE_DEVICE_TABLE(usb, imon_usb_id_table);
 +module_param(debug, int, 0);
 +MODULE_PARM_DESC(debug, "Debug messages: 0=no, 1=yes(default: no)");
++module_param(is_lcd, int, 0);
++MODULE_PARM_DESC(is_lcd, "The device is an LCD: 0=no (it's a VFD), "
++		 "1=yes (default: no)");
 +
 +static inline void delete_context(struct imon_context *context)
 +{
@@ -6854,7 +6870,10 @@
 +		goto exit;
 +	}
 +
-+	copy_from_user(context->tx.data_buf, buf, n_bytes);
++	if (copy_from_user(context->tx.data_buf, buf, n_bytes)) {
++		retval = -EFAULT;
++		goto exit;
++	}
 +
 +	/* Pad with spaces */
 +	for (i = n_bytes; i < 32; ++i)
@@ -6899,6 +6918,63 @@
 +}
 +
 +/**
++ * Writes data to the LCD.  The iMON OEM LCD screen excepts 8-byte
++ * packets. We accept data as 16 hexadecimal digits, followed by a
++ * newline (to make it easy to drive the device from a command-line
++ * -- even though the actual binary data is a bit complicated).
++ *
++ * The device itself is not a "traditional" text-mode display. It's
++ * actually a 16x96 pixel bitmap display. That means if you want to
++ * display text, you've got to have your own "font" and translate the
++ * text into bitmaps for display. This is really flexible (you can
++ * display whatever diacritics you need, and so on), but it's also
++ * a lot more complicated than most LCDs...
++ */
++static ssize_t lcd_write(struct file *file, const char *buf,
++			 size_t n_bytes, loff_t *pos)
++{
++	int retval = SUCCESS;
++	struct imon_context *context;
++
++	context = (struct imon_context *) file->private_data;
++	if (!context) {
++		err("%s: no context for device", __FUNCTION__);
++		return -ENODEV;
++	}
++
++	LOCK_CONTEXT;
++
++	if (!context->dev_present) {
++		err("%s: no iMON device present", __FUNCTION__);
++		retval = -ENODEV;
++		goto exit;
++	}
++
++	if (n_bytes != 8) {
++		err("%s: invalid payload size: %d (expecting 8)",
++		  __FUNCTION__, (int) n_bytes);
++		retval = -EINVAL;
++		goto exit;
++	}
++
++	if (copy_from_user(context->usb_tx_buf, buf, 8)) {
++		retval = -EFAULT;
++		goto exit;
++	}
++
++	retval = send_packet(context);
++	if (retval != SUCCESS) {
++		err("%s: send packet failed!", __FUNCTION__);
++		goto exit;
++	} else if (debug) {
++		info("%s: write %d bytes to LCD", __FUNCTION__, (int) n_bytes);
++	}
++exit:
++	UNLOCK_CONTEXT;
++	return (retval == SUCCESS) ? n_bytes : retval;
++}
++
++/**
 + * Callback function for USB core API: transmit data
 + */
 +static void usb_tx_callback(struct urb *urb)
@@ -7199,6 +7275,12 @@
 +
 +	info("%s: found IMON device", __FUNCTION__);
 +
++	/*
++	 * If it's the LCD, as opposed to the VFD, we just need to replace
++	 * the "write" file op.
++	 */
++	if (is_lcd)
++		vfd_fops.write = &lcd_write;
 +
 +	dev = usb_get_dev(interface_to_usbdev(interface));
 +	iface_desc = interface->cur_altsetting;
@@ -7359,27 +7441,6 @@
 +		info("%s: Registered iMON plugin(minor:%d)",
 +		     __FUNCTION__, lirc_minor);
 +
-+alloc_status_switch:
-+
-+	switch (alloc_status) {
-+	case 7:
-+		if (vfd_ep_found)
-+			usb_free_urb(tx_urb);
-+	case 6:
-+		usb_free_urb(rx_urb);
-+	case 5:
-+		lirc_buffer_free(rbuf);
-+	case 4:
-+		kfree(rbuf);
-+	case 3:
-+		kfree(plugin);
-+	case 2:
-+		kfree(context);
-+		context = NULL;
-+	case 1:
-+		retval = -ENOMEM;
-+	}
-+
 +	/* Needed while unregistering! */
 +	plugin->minor = lirc_minor;
 +
@@ -7421,7 +7482,28 @@
 +
 +	UNLOCK_CONTEXT;
 +
-+ exit:
++alloc_status_switch:
++
++	switch (alloc_status) {
++	case 7:
++		if (vfd_ep_found)
++			usb_free_urb(tx_urb);
++	case 6:
++		usb_free_urb(rx_urb);
++	case 5:
++		lirc_buffer_free(rbuf);
++	case 4:
++		kfree(rbuf);
++	case 3:
++		kfree(plugin);
++	case 2:
++		kfree(context);
++		context = NULL;
++	case 1:
++		retval = -ENOMEM;
++	}
++
++exit:
 +	return retval;
 +}
 +
@@ -9534,10 +9616,10 @@
 +EXPORT_NO_SYMBOLS;
 diff --git a/drivers/input/lirc/lirc_mceusb2.c b/drivers/input/lirc/lirc_mceusb2.c
 new file mode 100644
-index 0000000..9e927a4
+index 0000000..2f78da8
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_mceusb2.c
-@@ -0,0 +1,1058 @@
+@@ -0,0 +1,1060 @@
 +/*
 + * LIRC driver for Philips eHome USB Infrared Transceiver
 + * and the Microsoft MCE 2005 Remote Control
@@ -9672,6 +9754,8 @@
 +	{ USB_DEVICE(VENDOR_PHILIPS, 0x060c) },
 +	/* Philips SRM5100 */
 +	{ USB_DEVICE(VENDOR_PHILIPS, 0x060d) },
++	/* Philips Infrared Transceiver - Omaura */
++	{ USB_DEVICE(VENDOR_PHILIPS, 0x060f) },
 +	/* SMK/Toshiba G83C0004D410 */
 +	{ USB_DEVICE(VENDOR_SMK, 0x031d) },
 +	/* SMK eHome Infrared Transceiver (Sony VAIO) */
@@ -11381,7 +11465,7 @@
 +#endif
 diff --git a/drivers/input/lirc/lirc_pvr150.c b/drivers/input/lirc/lirc_pvr150.c
 new file mode 100644
-index 0000000..bef6eb4
+index 0000000..fed5720
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_pvr150.c
 @@ -0,0 +1,1431 @@
@@ -11446,7 +11530,7 @@
 +#include <linux/firmware.h>
 +#include <linux/vmalloc.h>
 +
-+#include <asm/semaphore.h>
++#include <linux/semaphore.h>
 +#include <linux/kthread.h>
 +
 +#include "kcompat.h"

linux-2.6-netdev-atl1e.patch:

Index: linux-2.6-netdev-atl1e.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-netdev-atl1e.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-netdev-atl1e.patch	20 Jul 2008 22:18:24 -0000	1.1
+++ linux-2.6-netdev-atl1e.patch	8 Aug 2008 18:56:00 -0000	1.2
@@ -26,7 +26,7 @@
 +++ linux-2.6.25.noarch/drivers/net/Makefile
 @@ -17,6 +17,7 @@ obj-$(CONFIG_CAN) += can/
  obj-$(CONFIG_BONDING) += bonding/
- obj-$(CONFIG_ATL1) += atl1/
+ obj-$(CONFIG_ATL1) += atlx/
  obj-$(CONFIG_ATL2) += atl2/
 +obj-$(CONFIG_ATL1E) += atl1e/
  obj-$(CONFIG_GIANFAR) += gianfar_driver.o

linux-2.6-netdev-atl2.patch:

Index: linux-2.6-netdev-atl2.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-netdev-atl2.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-netdev-atl2.patch	15 Feb 2008 23:58:52 -0000	1.1
+++ linux-2.6-netdev-atl2.patch	8 Aug 2008 18:56:00 -0000	1.2
@@ -4351,9 +4351,9 @@
 --- 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_EHEA) += ehea/
+ obj-$(CONFIG_CAN) += can/
  obj-$(CONFIG_BONDING) += bonding/
- obj-$(CONFIG_ATL1) += atl1/
+ obj-$(CONFIG_ATL1) += atlx/
 +obj-$(CONFIG_ATL2) += atl2/
  obj-$(CONFIG_GIANFAR) += gianfar_driver.o
  obj-$(CONFIG_TEHUTI) += tehuti.o

linux-2.6-ps3-legacy-bootloader-hack.patch:

Index: linux-2.6-ps3-legacy-bootloader-hack.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-ps3-legacy-bootloader-hack.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-ps3-legacy-bootloader-hack.patch	31 Jul 2007 11:33:24 -0000	1.1
+++ linux-2.6-ps3-legacy-bootloader-hack.patch	8 Aug 2008 18:56:00 -0000	1.2
@@ -20,8 +20,8 @@
 +	}
 +#endif
  		lmb_add(base, size);
- 	}
- 	return 0;
+ 
+ 		memstart_addr = min((u64)memstart_addr, base);
 --- a/arch/powerpc/platforms/ps3/setup.c
 +++ b/arch/powerpc/platforms/ps3/setup.c
 @@ -210,7 +210,9 @@ static int __init ps3_probe(void)

linux-2.6-silence-noise.patch:

Index: linux-2.6-silence-noise.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-silence-noise.patch,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- linux-2.6-silence-noise.patch	21 May 2008 23:55:13 -0000	1.13
+++ linux-2.6-silence-noise.patch	8 Aug 2008 18:56:00 -0000	1.14
@@ -76,57 +76,72 @@
  	}
  	pci_restore_pcix_state(dev);
  	pci_restore_msi_state(dev);
-
-
-diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
-index d887d5c..80be564 100644
---- a/drivers/base/power/main.c
-+++ b/drivers/base/power/main.c
-@@ -64,9 +64,6 @@ int (*platform_enable_wakeup)(struct device *dev, int is_on);
-  */
- void device_pm_add(struct device *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)
  {
+ 	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);
- 	list_add_tail(&dev->power.entry, &dpm_active);
- 	mutex_unlock(&dpm_list_mtx);
-@@ -80,9 +77,6 @@ void device_pm_add(struct device *dev)
-  */
- void device_pm_remove(struct device *dev)
- {
--	pr_debug("PM: Removing info for %s:%s\n",
--		 dev->bus ? dev->bus->name : "No Bus",
--		 kobject_name(&dev->kobj));
- 	mutex_lock(&dpm_list_mtx);
- 	dpm_sysfs_remove(dev);
- 	list_del_init(&dev->power.entry);
---- linux-2.6.24.noarch/arch/x86/pci/mmconfig-shared.c~	2008-04-12 20:04:01.000000000 -0400
-+++ linux-2.6.24.noarch/arch/x86/pci/mmconfig-shared.c	2008-04-12 20:05:35.000000000 -0400
-@@ -191,7 +191,7 @@ static void __init pci_mmcfg_reject_brok
- 	if (pci_mmcfg_config_num == 1 &&
- 	    cfg->pci_segment == 0 &&
- 	    (cfg->start_bus_number | cfg->end_bus_number) == 0) {
--		printk(KERN_ERR "PCI: start and end of bus number is 0. "
-+		printk(KERN_DEBUG "PCI: start and end of bus number is 0. "
- 		       "Rejected as broken MCFG.\n");
- 		goto reject;
+ 	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>
+---
+ drivers/crypto/padlock-aes.c |    4 ++--
+ drivers/crypto/padlock-sha.c |    4 ++--
+ 2 files changed, 4 insertions(+), 4 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;
  	}
-@@ -203,14 +203,14 @@ static void __init pci_mmcfg_reject_brok
- 	if (type == 1 && !e820_all_mapped(cfg->address,
- 					  cfg->address + MMCONFIG_APER_MIN,
- 					  E820_RESERVED)) {
--		printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %Lx is not"
-+		printk(KERN_DEBUG "PCI: BIOS Bug: MCFG area at %Lx is not"
- 		       " E820-reserved\n", cfg->address);
- 		goto reject;
+ 
+ 	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;
  	}
- 	return;
  
- reject:
--	printk(KERN_ERR "PCI: Not using MMCONFIG.\n");
-+	printk(KERN_DEBUG "PCI: Not using MMCONFIG.\n");
- 	kfree(pci_mmcfg_config);
- 	pci_mmcfg_config = NULL;
- 	pci_mmcfg_config_num = 0;
+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;
+ 
+ 	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");
+ 		return -ENODEV;
+ 	}
+ 
+-- 
+1.5.6
+

linux-2.6-smarter-relatime.patch:

Index: linux-2.6-smarter-relatime.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-smarter-relatime.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-smarter-relatime.patch	15 Feb 2008 23:58:52 -0000	1.4
+++ linux-2.6-smarter-relatime.patch	8 Aug 2008 18:56:00 -0000	1.5
@@ -58,9 +58,9 @@
 +			[FS] relative atime update frequency, in seconds.
 +			(default: 1 day: 86400 seconds)
 +
- 	reserve=	[KNL,BUGS] Force the kernel to ignore some iomem area
- 
- 	reservetop=	[X86-32]
+ 	relax_domain_level=
+ 			[KNL, SMP] Set scheduler's default relax_domain_level.
+ 			See Documentation/cpusets.txt.
 --- linux-2.6.23.noarch/fs/Kconfig~	2007-10-17 17:09:10.000000000 -0400
 +++ linux-2.6.23.noarch/fs/Kconfig	2007-10-17 17:10:05.000000000 -0400
 @@ -2173,6 +2173,29 @@ config 9P_FS
@@ -139,46 +139,32 @@
  /**
   *	touch_atime	-	update the access time
   *	@mnt: mount the inode is accessed on
-@@ -1191,22 +1226,14 @@ void touch_atime(struct vfsmount *mnt, s
- 			return;
- 		if ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))
- 			return;
--
--		if (mnt->mnt_flags & MNT_RELATIME) {
--			/*
--			 * With relative atime, only update atime if the
--			 * previous atime is earlier than either the ctime or
--			 * mtime.
--			 */
--			if (timespec_compare(&inode->i_mtime,
--						&inode->i_atime) < 0 &&
--			    timespec_compare(&inode->i_ctime,
--						&inode->i_atime) < 0)
-+	}
+@@ -1191,16 +1226,12 @@ void touch_atime(struct vfsmount *mnt, s
+ 		goto out;
+ 	if ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))
+ 		goto out;
+-	if (mnt->mnt_flags & MNT_RELATIME) {
+-		/*
+-		 * With relative atime, only update atime if the previous
+-		 * atime is earlier than either the ctime or mtime.
+-		 */
+-		if (timespec_compare(&inode->i_mtime, &inode->i_atime) < 0 &&
+-		    timespec_compare(&inode->i_ctime, &inode->i_atime) < 0)
++
 +	now = current_fs_time(inode->i_sb);
-+	if (mnt) {
-+		if (mnt->mnt_flags & MNT_RELATIME)
-+			if (!relatime_need_update(inode, now))
- 				return;
--		}
++	if (mnt->mnt_flags & MNT_RELATIME) {
++		if (!relatime_need_update(inode, now))
+ 			goto out;
  	}
  
 -	now = current_fs_time(inode->i_sb);
  	if (timespec_equal(&inode->i_atime, &now))
- 		return;
+ 		goto out;
  
 Index: linux/fs/namespace.c
 ===================================================================
 --- linux.orig/fs/namespace.c
 +++ linux/fs/namespace.c
-@@ -1107,6 +1107,7 @@ int do_add_mount(struct vfsmount *newmnt
- 		goto unlock;
- 
- 	newmnt->mnt_flags = mnt_flags;
-+
- 	if ((err = graft_tree(newmnt, nd)))
- 		goto unlock;
- 
 @@ -1362,6 +1363,24 @@ int copy_mount_options(const void __user
  }
  
@@ -213,21 +199,20 @@
 +		mnt_flags |= MNT_RELATIME;
 +		flags |= MS_RELATIME;
 +	}
+ 	if (flags & MS_RDONLY)
+ 		mnt_flags |= MNT_READONLY;
  
- 	flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE |
- 		   MS_NOATIME | MS_NODIRATIME | MS_RELATIME);
 Index: linux/include/linux/mount.h
 ===================================================================
 --- linux.orig/include/linux/mount.h
 +++ linux/include/linux/mount.h
-@@ -103,5 +103,8 @@ extern void shrink_submounts(struct vfsm
+@@ -103,4 +103,7 @@ extern void shrink_submounts(struct vfsm
  extern spinlock_t vfsmount_lock;
  extern dev_t name_to_dev_t(char *name);
  
 +extern int default_relatime;
 +extern int relatime_interval;
 +
- #endif
  #endif /* _LINUX_MOUNT_H */
 Index: linux/kernel/sysctl.c
 ===================================================================
@@ -264,4 +249,3 @@
  #if defined(CONFIG_BINFMT_MISC) || defined(CONFIG_BINFMT_MISC_MODULE)
  	{
  		.ctl_name	= CTL_UNNUMBERED,
-

linux-2.6-upstream-reverts.patch:

Index: linux-2.6-upstream-reverts.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-upstream-reverts.patch,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- linux-2.6-upstream-reverts.patch	1 Aug 2008 21:36:30 -0000	1.13
+++ linux-2.6-upstream-reverts.patch	8 Aug 2008 18:56:00 -0000	1.14
@@ -1,709 +1,5 @@
-diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c
-index 48e9124..4ec1915 100644
---- a/drivers/net/wireless/b43/dma.c
-+++ b/drivers/net/wireless/b43/dma.c
-@@ -822,6 +822,18 @@ static u64 supported_dma_mask(struct b43_wldev *dev)
- 	return DMA_30BIT_MASK;
- }
- 
-+static enum b43_dmatype dma_mask_to_engine_type(u64 dmamask)
-+{
-+	if (dmamask == DMA_30BIT_MASK)
-+		return B43_DMA_30BIT;
-+	if (dmamask == DMA_32BIT_MASK)
-+		return B43_DMA_32BIT;
-+	if (dmamask == DMA_64BIT_MASK)
-+		return B43_DMA_64BIT;
-+	B43_WARN_ON(1);
-+	return B43_DMA_30BIT;
-+}
-+
- /* Main initialization function. */
- static
- struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev,
-@@ -982,6 +994,42 @@ void b43_dma_free(struct b43_wldev *dev)
- 	dma->tx_ring0 = NULL;
- }
- 
-+static int b43_dma_set_mask(struct b43_wldev *dev, u64 mask)
-+{
-+	u64 orig_mask = mask;
-+	bool fallback = 0;
-+	int err;
-+
-+	/* Try to set the DMA mask. If it fails, try falling back to a
-+	 * lower mask, as we can always also support a lower one. */
-+	while (1) {
-+		err = ssb_dma_set_mask(dev->dev, mask);
-+		if (!err)
-+			break;
-+		if (mask == DMA_64BIT_MASK) {
-+			mask = DMA_32BIT_MASK;
-+			fallback = 1;
-+			continue;
-+		}
-+		if (mask == DMA_32BIT_MASK) {
-+			mask = DMA_30BIT_MASK;
-+			fallback = 1;
-+			continue;
-+		}
-+		b43err(dev->wl, "The machine/kernel does not support "
-+		       "the required %u-bit DMA mask\n",
-+		       (unsigned int)dma_mask_to_engine_type(orig_mask));
-+		return -EOPNOTSUPP;
-+	}
-+	if (fallback) {
-+		b43info(dev->wl, "DMA mask fallback from %u-bit to %u-bit\n",
-+			(unsigned int)dma_mask_to_engine_type(orig_mask),
-+			(unsigned int)dma_mask_to_engine_type(mask));
-+	}
-+
-+	return 0;
-+}
-+
- int b43_dma_init(struct b43_wldev *dev)
- {
- 	struct b43_dma *dma = &dev->dma;
-@@ -991,27 +1039,10 @@ int b43_dma_init(struct b43_wldev *dev)
- 	enum b43_dmatype type;
- 
- 	dmamask = supported_dma_mask(dev);
--	switch (dmamask) {
--	default:
--		B43_WARN_ON(1);
--	case DMA_30BIT_MASK:
--		type = B43_DMA_30BIT;
--		break;
--	case DMA_32BIT_MASK:
--		type = B43_DMA_32BIT;
--		break;
--	case DMA_64BIT_MASK:
--		type = B43_DMA_64BIT;
--		break;
--	}
--	err = ssb_dma_set_mask(dev->dev, dmamask);
--	if (err) {
--		b43err(dev->wl, "The machine/kernel does not support "
--		       "the required DMA mask (0x%08X%08X)\n",
--		       (unsigned int)((dmamask & 0xFFFFFFFF00000000ULL) >> 32),
--		       (unsigned int)(dmamask & 0x00000000FFFFFFFFULL));
--		return -EOPNOTSUPP;
--	}
-+	type = dma_mask_to_engine_type(dmamask);
-+	err = b43_dma_set_mask(dev, dmamask);
-+	if (err)
-+		return err;
- 
- 	err = -ENOMEM;
- 	/* setup TX DMA channels. */
-diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
-index c73a75b..f23317e 100644
---- a/drivers/net/wireless/b43/main.c
-+++ b/drivers/net/wireless/b43/main.c
-@@ -78,6 +78,11 @@ static int modparam_nohwcrypt;
- module_param_named(nohwcrypt, modparam_nohwcrypt, int, 0444);
- MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
- 
-+static int modparam_btcoex = 1;
-+module_param_named(btcoex, modparam_btcoex, int, 0444);
-+MODULE_PARM_DESC(btcoex, "Enable Bluetooth coexistance (default on)");
-+
-+
- static const struct ssb_device_id b43_ssb_tbl[] = {
- 	SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5),
- 	SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 6),
-@@ -3339,6 +3344,8 @@ static void b43_bluetooth_coext_enable(struct b43_wldev *dev)
- 	struct ssb_sprom *sprom = &dev->dev->bus->sprom;
- 	u32 hf;
- 
-+	if (!modparam_btcoex)
-+		return;
- 	if (!(sprom->boardflags_lo & B43_BFL_BTCOEXIST))
- 		return;
- 	if (dev->phy.type != B43_PHYTYPE_B && !dev->phy.gmode)
-@@ -3350,11 +3357,13 @@ static void b43_bluetooth_coext_enable(struct b43_wldev *dev)
- 	else
- 		hf |= B43_HF_BTCOEX;
- 	b43_hf_write(dev, hf);
--	//TODO
- }
- 
- static void b43_bluetooth_coext_disable(struct b43_wldev *dev)
--{				//TODO
-+{
-+	if (!modparam_btcoex)
-+		return;
-+	//TODO
- }
- 
- static void b43_imcfglo_timeouts_workaround(struct b43_wldev *dev)
-@@ -4000,8 +4009,16 @@ static int b43_one_core_attach(struct ssb_device *dev, struct b43_wl *wl)
- 	return err;
- }
- 
-+#define IS_PDEV(pdev, _vendor, _device, _subvendor, _subdevice)		( \
-+	(pdev->vendor == PCI_VENDOR_ID_##_vendor) &&			\
-+	(pdev->device == _device) &&					\
-+	(pdev->subsystem_vendor == PCI_VENDOR_ID_##_subvendor) &&	\
-+	(pdev->subsystem_device == _subdevice)				)
-+
- static void b43_sprom_fixup(struct ssb_bus *bus)
- {
-+	struct pci_dev *pdev;
-+
- 	/* boardflags workarounds */
- 	if (bus->boardinfo.vendor == SSB_BOARDVENDOR_DELL &&
- 	    bus->chip_id == 0x4301 && bus->boardinfo.rev == 0x74)
-@@ -4009,6 +4026,13 @@ static void b43_sprom_fixup(struct ssb_bus *bus)
- 	if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE &&
- 	    bus->boardinfo.type == 0x4E && bus->boardinfo.rev > 0x40)
- 		bus->sprom.boardflags_lo |= B43_BFL_PACTRL;
-+	if (bus->bustype == SSB_BUSTYPE_PCI) {
-+		pdev = bus->host_pci;
-+		if (IS_PDEV(pdev, BROADCOM, 0x4318, ASUSTEK, 0x100F) ||
-+		    IS_PDEV(pdev, BROADCOM, 0x4320, LINKSYS, 0x0015) ||
-+		    IS_PDEV(pdev, BROADCOM, 0x4320, LINKSYS, 0x0013))
-+			bus->sprom.boardflags_lo &= ~B43_BFL_BTCOEXIST;
-+	}
- }
- 
- static void b43_wireless_exit(struct ssb_device *dev, struct b43_wl *wl)
-diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c
-index b434df7..274a448 100644
---- a/drivers/ssb/pci.c
-+++ b/drivers/ssb/pci.c
-@@ -482,6 +482,11 @@ static int sprom_extract(struct ssb_bus *bus, struct ssb_sprom *out,
- 			goto unsupported;
- 	}
- 
-+	if (out->boardflags_lo == 0xFFFF)
-+		out->boardflags_lo = 0;  /* per specs */
-+	if (out->boardflags_hi == 0xFFFF)
-+		out->boardflags_hi = 0;  /* per specs */
-+
- 	return 0;
- unsupported:
- 	ssb_printk(KERN_WARNING PFX "Unsupported SPROM revision %d "
-From 3bf0a32e22fedc0b46443699db2d61ac2a883ac4 Mon Sep 17 00:00:00 2001
-Message-Id: <200806061558.42998.mb at bu3sch.de>
-From: Michael Buesch <mb at bu3sch.de>
-Date: Thu, 22 May 2008 16:32:16 +0200
-Subject: b43: Fix controller restart crash
-
-From: Michael Buesch <mb at bu3sch.de>
-
-upstream commit: 3bf0a32e22fedc0b46443699db2d61ac2a883ac4
-
-This fixes a kernel crash on rmmod, in the case where the controller
-was restarted before doing the rmmod.
-
-Signed-off-by: Michael Buesch <mb at bu3sch.de>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
-Signed-off-by: Chris Wright <chrisw at sous-sol.org>
----
- drivers/net/wireless/b43/main.c |   12 ++++++++++--
- 1 file changed, 10 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/b43/main.c
-+++ b/drivers/net/wireless/b43/main.c
-@@ -3818,7 +3818,9 @@ static void b43_chip_reset(struct work_s
- 			goto out;
- 		}
- 	}
--      out:
-+out:
-+	if (err)
-+		wl->current_dev = NULL; /* Failed to init the dev. */
- 	mutex_unlock(&wl->mutex);
- 	if (err)
- 		b43err(wl, "Controller restart FAILED\n");
-@@ -3967,9 +3969,11 @@ static void b43_one_core_detach(struct s
- 	struct b43_wldev *wldev;
- 	struct b43_wl *wl;
- 
-+	/* Do not cancel ieee80211-workqueue based work here.
-+	 * See comment in b43_remove(). */
-+
- 	wldev = ssb_get_drvdata(dev);
- 	wl = wldev->wl;
--	cancel_work_sync(&wldev->restart_work);
- 	b43_debugfs_remove_device(wldev);
- 	b43_wireless_core_detach(wldev);
- 	list_del(&wldev->list);
-@@ -4152,6 +4156,10 @@ static void b43_remove(struct ssb_device
- 	struct b43_wl *wl = ssb_get_devtypedata(dev);
- 	struct b43_wldev *wldev = ssb_get_drvdata(dev);
- 
-+	/* We must cancel any work here before unregistering from ieee80211,
-+	 * as the ieee80211 unreg will destroy the workqueue. */
-+	cancel_work_sync(&wldev->restart_work);
-+
- 	B43_WARN_ON(!wl);
- 	if (wl->current_dev == wldev)
- 		ieee80211_unregister_hw(wl->hw);
-From stable-bounces at linux.kernel.org  Mon Jun  9 13:26:37 2008
-From: Michael Buesch <mb at bu3sch.de>
-To: stable at kernel.org
-Date: Sat, 7 Jun 2008 17:57:37 +0200
-Content-Disposition: inline
-Message-Id: <200806071757.38139.mb at bu3sch.de>
-Cc: netdev at vger.kernel.org, linux-kernel at vger.kernel.org
-Subject: ssb: Fix context assertion in ssb_pcicore_dev_irqvecs_enable
-
-From: Michael Buesch <mb at bu3sch.de>
-
-upstream commit: a3bafeedfff2ac5fa0a316bea4570e27900b6fcc
-
-This fixes a context assertion in ssb that makes b44 print
-out warnings on resume.
-
-This fixes the following kernel oops:
-http://www.kerneloops.org/oops.php?number=12732
-http://www.kerneloops.org/oops.php?number=11410
-
-Signed-off-by: Michael Buesch <mb at bu3sch.de>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
-Signed-off-by: Chris Wright <chrisw at sous-sol.org>
-
----
- drivers/ssb/driver_pcicore.c |    4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/ssb/driver_pcicore.c
-+++ b/drivers/ssb/driver_pcicore.c
-@@ -519,12 +519,12 @@ int ssb_pcicore_dev_irqvecs_enable(struc
- 	int err = 0;
- 	u32 tmp;
- 
--	might_sleep();
--
- 	if (!pdev)
- 		goto out;
- 	bus = pdev->bus;
- 
-+	might_sleep_if(pdev->id.coreid != SSB_DEV_PCI);
-+
- 	/* Enable interrupts for this device. */
- 	if (bus->host_pci &&
- 	    ((pdev->id.revision >= 6) || (pdev->id.coreid == SSB_DEV_PCIE))) {
-From 507b06d0622480f8026d49a94f86068bb0fd6ed6 Mon Sep 17 00:00:00 2001
-From: Dan Williams <dcbw at redhat.com>
-Date: Tue, 3 Jun 2008 23:39:55 -0400
-Subject: mac80211: send association event on IBSS create
-
-From: Dan Williams <dcbw at redhat.com>
-
-patch 507b06d0622480f8026d49a94f86068bb0fd6ed6 upstream
-
-Otherwise userspace has no idea the IBSS creation succeeded.
-
-Signed-off-by: Dan Williams <dcbw at redhat.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
-
----
- net/mac80211/ieee80211_sta.c |    5 +++++
- 1 file changed, 5 insertions(+)
-
---- a/net/mac80211/ieee80211_sta.c
-+++ b/net/mac80211/ieee80211_sta.c
-@@ -2723,6 +2723,7 @@ static int ieee80211_sta_join_ibss(struc
- 	struct rate_selection ratesel;
- 	u8 *pos;
- 	struct ieee80211_sub_if_data *sdata;
-+	union iwreq_data wrqu;
- 
- 	/* Remove possible STA entries from other IBSS networks. */
- 	sta_info_flush(local, NULL);
-@@ -2863,6 +2864,10 @@ static int ieee80211_sta_join_ibss(struc
- 
- 	ieee80211_rx_bss_put(dev, bss);
- 
-+	memset(&wrqu, 0, sizeof(wrqu));
-+	memcpy(wrqu.ap_addr.sa_data, bss->bssid, ETH_ALEN);
-+	wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
-+
- 	return res;
- }
- 
-From stable-bounces at linux.kernel.org Sat Jun 14 14:48:30 2008
-From: Michael Buesch <mb at bu3sch.de>
-Date: Sat, 14 Jun 2008 23:00:14 +0200
-Subject: b43: Fix noise calculation WARN_ON
-To: stable at kernel.org
-Cc: linux-wireless at vger.kernel.org, bcm43xx-dev at lists.berlios.de
-Message-ID: <200806142300.15391.mb at bu3sch.de>
-Content-Disposition: inline
-
-From: Michael Buesch <mb at bu3sch.de>
-
-commit 98a3b2fe435ae76170936c14f5c9e6a87548e3ef upstream.
-
-This removes a WARN_ON that is responsible for the following koops:
-http://www.kerneloops.org/searchweek.php?search=b43_generate_noise_sample
-
-The comment in the patch describes why it's safe to simply remove
-the check.
-
-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/b43/b43.h  |    1 -
- drivers/net/wireless/b43/main.c |   16 ++++++++++------
- 2 files changed, 10 insertions(+), 7 deletions(-)
-
---- a/drivers/net/wireless/b43/b43.h
-+++ b/drivers/net/wireless/b43/b43.h
-@@ -596,7 +596,6 @@ struct b43_dma {
- 
- /* Context information for a noise calculation (Link Quality). */
- struct b43_noise_calculation {
--	u8 channel_at_start;
- 	bool calculation_running;
- 	u8 nr_samples;
- 	s8 samples[8][4];
---- a/drivers/net/wireless/b43/main.c
-+++ b/drivers/net/wireless/b43/main.c
-@@ -1027,7 +1027,6 @@ static void b43_generate_noise_sample(st
- 	b43_jssi_write(dev, 0x7F7F7F7F);
- 	b43_write32(dev, B43_MMIO_MACCMD,
- 		    b43_read32(dev, B43_MMIO_MACCMD) | B43_MACCMD_BGNOISE);
--	B43_WARN_ON(dev->noisecalc.channel_at_start != dev->phy.channel);
- }
- 
- static void b43_calculate_link_quality(struct b43_wldev *dev)
-@@ -1036,7 +1035,6 @@ static void b43_calculate_link_quality(s
- 
- 	if (dev->noisecalc.calculation_running)
- 		return;
--	dev->noisecalc.channel_at_start = dev->phy.channel;
- 	dev->noisecalc.calculation_running = 1;
- 	dev->noisecalc.nr_samples = 0;
- 
-@@ -1053,9 +1051,16 @@ static void handle_irq_noise(struct b43_
- 
- 	/* Bottom half of Link Quality calculation. */
- 
-+	/* Possible race condition: It might be possible that the user
-+	 * changed to a different channel in the meantime since we
-+	 * started the calculation. We ignore that fact, since it's
-+	 * not really that much of a problem. The background noise is
-+	 * an estimation only anyway. Slightly wrong results will get damped
-+	 * by the averaging of the 8 sample rounds. Additionally the
-+	 * value is shortlived. So it will be replaced by the next noise
-+	 * calculation round soon. */
-+
- 	B43_WARN_ON(!dev->noisecalc.calculation_running);
--	if (dev->noisecalc.channel_at_start != phy->channel)
--		goto drop_calculation;
- 	*((__le32 *)noise) = cpu_to_le32(b43_jssi_read(dev));
- 	if (noise[0] == 0x7F || noise[1] == 0x7F ||
- 	    noise[2] == 0x7F || noise[3] == 0x7F)
-@@ -1096,11 +1101,10 @@ static void handle_irq_noise(struct b43_
- 			average -= 48;
- 
- 		dev->stats.link_noise = average;
--	      drop_calculation:
- 		dev->noisecalc.calculation_running = 0;
- 		return;
- 	}
--      generate_new:
-+generate_new:
- 	b43_generate_noise_sample(dev);
- }
- 
-From stable-bounces at linux.kernel.org Sat Jun 14 14:46:55 2008
-From: Michael Buesch <mb at bu3sch.de>
-Date: Sat, 14 Jun 2008 22:57:55 +0200
-Subject: b43: Fix possible NULL pointer dereference in DMA code
-To: stable at kernel.org
-Cc: linux-wireless at vger.kernel.org, bcm43xx-dev at lists.berlios.de
-Message-ID: <200806142257.55946.mb at bu3sch.de>
-Content-Disposition: inline
-
-From: Michael Buesch <mb at bu3sch.de>
-
-a cut-down version of commit 028118a5f09a9c807e6b43e2231efdff9f224c74 upstream
-
-This fixes a possible NULL pointer dereference in an error path of the
-DMA allocation error checking code. In case the DMA allocation address is invalid,
-the dev pointer is dereferenced for unmapping of the buffer.
-
-Reported-by: Miles Lane <miles.lane at gmail.com>
-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/b43/dma.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/wireless/b43/dma.c
-+++ b/drivers/net/wireless/b43/dma.c
-@@ -850,6 +850,7 @@ struct b43_dmaring *b43_setup_dmaring(st
- 	if (!ring)
- 		goto out;
- 	ring->type = type;
-+	ring->dev = dev;
- 
- 	nr_slots = B43_RXRING_SLOTS;
- 	if (for_tx)
-@@ -901,7 +902,6 @@ struct b43_dmaring *b43_setup_dmaring(st
- 				 DMA_TO_DEVICE);
- 	}
- 
--	ring->dev = dev;
- 	ring->nr_slots = nr_slots;
- 	ring->mmio_base = b43_dmacontroller_base(type, controller_index);
- 	ring->index = controller_index;
-From stable-bounces at linux.kernel.org Fri Jun 27 14:44:11 2008
-From: Roland McGrath <roland at redhat.com>
-Date: Fri, 27 Jun 2008 13:48:29 -0700 (PDT)
-Subject: x86_64 ptrace: fix sys32_ptrace task_struct leak
-To: stable at kernel.org
-Cc: Pekka Enberg <penberg at cs.helsinki.fi>, Jeff Dike <jdike at addtoit.com>, Joris van Rantwijk <jorispubl at xs4all.nl>, linux-kernel at vger.kernel.org, Thorsten Knabe <linux at thorsten-knabe.de>
-Message-ID: <20080627204953.D7D8A154223 at magilla.localdomain>
-
-From: Roland McGrath <roland at redhat.com>
-
-Commit 5a4646a4efed8c835f76c3b88f3155f6ab5b8d9b introduced a leak of
-task_struct refs into sys32_ptrace.  This bug has already gone away in
-for 2.6.26 in commit 562b80bafffaf42a6d916b0a2ee3d684220a1c10.
-
-Signed-off-by: Roland McGrath <roland at redhat.com>
-Acked-by: Ingo Molnar <mingo at elte.hu>
-Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
-
----
- arch/x86/kernel/ptrace.c |   45 ++++++++++++++++++++++++++-------------------
- 1 file changed, 26 insertions(+), 19 deletions(-)
-
---- a/arch/x86/kernel/ptrace.c
-+++ b/arch/x86/kernel/ptrace.c
-@@ -1309,42 +1309,49 @@ asmlinkage long sys32_ptrace(long reques
- 		break;
- 
- 	case PTRACE_GETREGS:	/* Get all gp regs from the child. */
--		return copy_regset_to_user(child, &user_x86_32_view,
--					   REGSET_GENERAL,
--					   0, sizeof(struct user_regs_struct32),
--					   datap);
-+		ret = copy_regset_to_user(child, &user_x86_32_view,
-+					  REGSET_GENERAL,
-+					  0, sizeof(struct user_regs_struct32),
-+					  datap);
-+		break;
- 
- 	case PTRACE_SETREGS:	/* Set all gp regs in the child. */
--		return copy_regset_from_user(child, &user_x86_32_view,
--					     REGSET_GENERAL, 0,
--					     sizeof(struct user_regs_struct32),
--					     datap);
-+		ret = copy_regset_from_user(child, &user_x86_32_view,
-+					    REGSET_GENERAL, 0,
-+					    sizeof(struct user_regs_struct32),
-+					    datap);
-+		break;
- 
- 	case PTRACE_GETFPREGS:	/* Get the child FPU state. */
--		return copy_regset_to_user(child, &user_x86_32_view,
--					   REGSET_FP, 0,
--					   sizeof(struct user_i387_ia32_struct),
--					   datap);
-+		ret = copy_regset_to_user(child, &user_x86_32_view,
-+					  REGSET_FP, 0,
-+					  sizeof(struct user_i387_ia32_struct),
-+					  datap);
-+		break;
- 
- 	case PTRACE_SETFPREGS:	/* Set the child FPU state. */
--		return copy_regset_from_user(
-+		ret = copy_regset_from_user(
- 			child, &user_x86_32_view, REGSET_FP,
- 			0, sizeof(struct user_i387_ia32_struct), datap);
-+		break;
- 
- 	case PTRACE_GETFPXREGS:	/* Get the child extended FPU state. */
--		return copy_regset_to_user(child, &user_x86_32_view,
--					   REGSET_XFP, 0,
--					   sizeof(struct user32_fxsr_struct),
--					   datap);
-+		ret = copy_regset_to_user(child, &user_x86_32_view,
-+					  REGSET_XFP, 0,
-+					  sizeof(struct user32_fxsr_struct),
-+					  datap);
-+		break;
- 
- 	case PTRACE_SETFPXREGS:	/* Set the child extended FPU state. */
--		return copy_regset_from_user(child, &user_x86_32_view,
-+		ret = copy_regset_from_user(child, &user_x86_32_view,
- 					     REGSET_XFP, 0,
- 					     sizeof(struct user32_fxsr_struct),
- 					     datap);
-+		break;
- 
- 	default:
--		return compat_ptrace_request(child, request, addr, data);
-+		ret = compat_ptrace_request(child, request, addr, data);
-+		break;
- 	}
- 
-  out:
-From alan at lxorguk.ukuu.org.uk Fri Jun 27 07:39:26 2008
-From: Alan Cox <alan at lxorguk.ukuu.org.uk>
-Date: Fri, 27 Jun 2008 15:21:55 +0100
-Subject: TTY: fix for tty operations bugs
-To: greg at kroah.com
-Message-ID: <20080627152155.50f0ebae at lxorguk.ukuu.org.uk>
-
-From: Alan Cox <alan at lxorguk.ukuu.org.uk>
-
-This is fixed with the recent tty operations rewrite in mainline in a
-different way, this is a selective backport of the relevant portions to
-the -stable tree.
-
-Signed-off-by: Alan Cox <alan at redhat.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
-
----
- drivers/net/wireless/strip.c |    3 ++-
-
-  *****************
-  * NOTE: reverting only the changes to drivers/net/wireless/strip.c
-  *****************
-
---- a/drivers/net/wireless/strip.c
-+++ b/drivers/net/wireless/strip.c
-@@ -802,7 +802,8 @@ static void set_baud(struct tty_struct *
- 	struct ktermios old_termios = *(tty->termios);
- 	tty->termios->c_cflag &= ~CBAUD;	/* Clear the old baud setting */
- 	tty->termios->c_cflag |= baudcode;	/* Set the new baud setting */
--	tty->driver->set_termios(tty, &old_termios);
-+	if (tty->driver->set_termios)
-+		tty->driver->set_termios(tty, &old_termios);
- }
- 
- /*
-diff --git a/drivers/net/wireless/b43/leds.c b/drivers/net/wireless/b43/leds.c
-index 0aac1ff..23d4c09 100644
---- a/drivers/net/wireless/b43/leds.c
-+++ b/drivers/net/wireless/b43/leds.c
-@@ -72,6 +72,9 @@ static void b43_led_brightness_set(struct led_classdev *led_dev,
- 	struct b43_wldev *dev = led->dev;
- 	bool radio_enabled;
- 
-+	if (unlikely(b43_status(dev) < B43_STAT_INITIALIZED))
-+		return;
-+
- 	/* Checking the radio-enabled status here is slightly racy,
- 	 * but we want to avoid the locking overhead and we don't care
- 	 * whether the LED has the wrong state for a second. */
-diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
-index b4a2042..b2cc246 100644
---- a/drivers/net/wireless/b43/main.c
-+++ b/drivers/net/wireless/b43/main.c
-@@ -2607,7 +2607,7 @@ static int b43_op_tx(struct ieee80211_hw *hw,
- 	int err;
- 
- 	if (unlikely(!dev))
--		return NETDEV_TX_BUSY;
-+		goto drop_packet;
- 
- 	/* Transmissions on seperate queues can run concurrently. */
- 	read_lock_irqsave(&wl->tx_lock, flags);
-@@ -2619,7 +2619,12 @@ static int b43_op_tx(struct ieee80211_hw *hw,
- 	read_unlock_irqrestore(&wl->tx_lock, flags);
- 
- 	if (unlikely(err))
--		return NETDEV_TX_BUSY;
-+		goto drop_packet;
-+	return NETDEV_TX_OK;
-+
-+drop_packet:
-+	/* We can not transmit this packet. Drop it. */
-+	dev_kfree_skb_any(skb);
- 	return NETDEV_TX_OK;
- }
- 
-diff --git a/drivers/net/wireless/b43legacy/dma.c b/drivers/net/wireless/b43legacy/dma.c
-index c990f87..93ddc1c 100644
---- a/drivers/net/wireless/b43legacy/dma.c
-+++ b/drivers/net/wireless/b43legacy/dma.c
-@@ -876,6 +876,7 @@ struct b43legacy_dmaring *b43legacy_setup_dmaring(struct b43legacy_wldev *dev,
- 	if (!ring)
- 		goto out;
- 	ring->type = type;
-+	ring->dev = dev;
- 
- 	nr_slots = B43legacy_RXRING_SLOTS;
- 	if (for_tx)
-@@ -922,7 +923,6 @@ struct b43legacy_dmaring *b43legacy_setup_dmaring(struct b43legacy_wldev *dev,
- 				 DMA_TO_DEVICE);
- 	}
- 
--	ring->dev = dev;
- 	ring->nr_slots = nr_slots;
- 	ring->mmio_base = b43legacy_dmacontroller_base(type, controller_index);
- 	ring->index = controller_index;
-diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c
-index 0f7a6e7..531aeb2 100644
---- a/drivers/net/wireless/b43legacy/main.c
-+++ b/drivers/net/wireless/b43legacy/main.c
-@@ -2350,8 +2350,10 @@ static int b43legacy_op_tx(struct ieee80211_hw *hw,
- 	} else
- 		err = b43legacy_dma_tx(dev, skb, ctl);
- out:
--	if (unlikely(err))
--		return NETDEV_TX_BUSY;
-+	if (unlikely(err)) {
-+		/* Drop the packet. */
-+		dev_kfree_skb_any(skb);
-+	}
- 	return NETDEV_TX_OK;
- }
- 
-diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
-index 7942b15..17efe4f 100644
---- a/drivers/net/wireless/zd1211rw/zd_usb.c
-+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
-@@ -64,6 +64,7 @@ static struct usb_device_id usb_ids[] = {
- 	{ USB_DEVICE(0x079b, 0x0062), .driver_info = DEVICE_ZD1211B },
- 	{ USB_DEVICE(0x1582, 0x6003), .driver_info = DEVICE_ZD1211B },
- 	{ USB_DEVICE(0x050d, 0x705c), .driver_info = DEVICE_ZD1211B },
-+	{ USB_DEVICE(0x083a, 0xe506), .driver_info = DEVICE_ZD1211B },
- 	{ USB_DEVICE(0x083a, 0x4505), .driver_info = DEVICE_ZD1211B },
- 	{ USB_DEVICE(0x0471, 0x1236), .driver_info = DEVICE_ZD1211B },
- 	{ USB_DEVICE(0x13b1, 0x0024), .driver_info = DEVICE_ZD1211B },
-diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
-index 67b509e..9bdaed8 100644
---- a/net/mac80211/tx.c
-+++ b/net/mac80211/tx.c
-@@ -1090,7 +1090,7 @@ static int ieee80211_tx(struct net_device *dev, struct sk_buff *skb,
- 	ieee80211_tx_handler *handler;
- 	struct ieee80211_txrx_data tx;
- 	ieee80211_txrx_result res = TXRX_DROP, res_prepare;
--	int ret, i;
-+	int ret, i, retries = 0;
- 
- 	WARN_ON(__ieee80211_queue_pending(local, control->queue));
- 
-@@ -1181,6 +1181,13 @@ retry:
- 		if (!__ieee80211_queue_stopped(local, control->queue)) {
- 			clear_bit(IEEE80211_LINK_STATE_PENDING,
- 				  &local->state[control->queue]);
-+			retries++;
-+			/*
-+			 * Driver bug, it's rejecting packets but
-+			 * not stopping queues.
-+			 */
-+			if (WARN_ON_ONCE(retries > 5))
-+				goto drop;
- 			goto retry;
- 		}
- 		memcpy(&store->control, control,
+# 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
@@ -730,7 +26,7 @@
 
 --- a/drivers/net/wireless/ath5k/base.c
 +++ b/drivers/net/wireless/ath5k/base.c
-@@ -484,9 +484,6 @@ ath5k_pci_probe(struct pci_dev *pdev,
+@@ -487,9 +487,6 @@ ath5k_pci_probe(struct pci_dev *pdev,
  	/* Set private data */
  	pci_set_drvdata(pdev, hw);
  
@@ -740,7 +36,7 @@
  	/* Setup interrupt handler */
  	ret = request_irq(pdev->irq, ath5k_intr, IRQF_SHARED, "ath", sc);
  	if (ret) {
-@@ -553,7 +550,6 @@ err_ah:
+@@ -567,7 +564,6 @@ err_ah:
  err_irq:
  	free_irq(pdev->irq, sc);
  err_free:
@@ -748,7 +44,7 @@
  	ieee80211_free_hw(hw);
  err_map:
  	pci_iounmap(pdev, mem);
-@@ -575,7 +571,6 @@ ath5k_pci_remove(struct pci_dev *pdev)
+@@ -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);
@@ -803,7 +99,7 @@
 
 --- a/drivers/net/wireless/b43legacy/main.c
 +++ b/drivers/net/wireless/b43legacy/main.c
-@@ -3792,10 +3792,10 @@ static int b43legacy_resume(struct ssb_d
+@@ -3862,10 +3862,10 @@ static int b43legacy_resume(struct ssb_d
  			goto out;
  		}
  	}

linux-2.6-utrace.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.68 -r 1.69 linux-2.6-utrace.patch
Index: linux-2.6-utrace.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-utrace.patch,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -r1.68 -r1.69
--- linux-2.6-utrace.patch	21 May 2008 20:42:11 -0000	1.68
+++ linux-2.6-utrace.patch	8 Aug 2008 18:56:00 -0000	1.69
@@ -1,67 +1,20 @@
- Documentation/DocBook/Makefile      |    2 +-
- Documentation/DocBook/utrace.tmpl   |   23 +
- Documentation/utrace.txt            |  579 +++++++++
- arch/mips/kernel/irixelf.c          |    2 -
- arch/powerpc/kernel/asm-offsets.c   |    4 -
- arch/powerpc/kernel/process.c       |    5 -
- arch/powerpc/kernel/ptrace.c        |   35 +-
- arch/powerpc/kernel/ptrace32.c      |    2 +-
- arch/powerpc/kernel/signal.c        |    8 +-
- arch/powerpc/kernel/signal_32.c     |   19 +-
- arch/powerpc/kernel/sys_ppc32.c     |    5 -
- arch/sparc64/kernel/binfmt_aout32.c |    2 -
- arch/sparc64/kernel/process.c       |   23 +-
- arch/sparc64/kernel/ptrace.c        |   28 +-
- arch/sparc64/kernel/sys_sparc32.c   |   41 +-
- arch/x86/ia32/ia32_aout.c           |    6 -
- arch/x86/ia32/ia32_signal.c         |   10 -
- arch/x86/ia32/ia32entry.S           |   14 +-
- arch/x86/ia32/sys_ia32.c            |    5 -
- arch/x86/kernel/entry_64.S          |    8 +-
- arch/x86/kernel/ptrace.c            |  157 +--
- arch/x86/kernel/signal_32.c         |   37 +-
- arch/x86/kernel/signal_64.c         |   33 +-
- arch/x86/kernel/vm86_32.c           |    9 +-
- fs/binfmt_aout.c                    |    6 -
- fs/binfmt_elf.c                     |    6 -
- fs/binfmt_elf_fdpic.c               |    7 -
- fs/binfmt_flat.c                    |    3 -
- fs/binfmt_som.c                     |    2 -
- fs/compat.c                         |    6 +-
- fs/eventpoll.c                      |    3 +-
- fs/exec.c                           |   12 +-
- fs/proc/array.c                     |    9 +-
- fs/proc/base.c                      |   43 +-
- fs/select.c                         |    4 +-
- include/asm-alpha/ptrace.h          |    1 +
- include/asm-ia64/ptrace.h           |    1 +
- include/asm-ia64/thread_info.h      |    2 +-
- include/asm-powerpc/ptrace.h        |    1 +
- include/asm-s390/thread_info.h      |    2 +-
- include/asm-sparc64/ptrace.h        |    2 +
- include/asm-x86/ptrace.h            |    2 +
- include/linux/init_task.h           |    3 -
- include/linux/ptrace.h              |   71 +-
- include/linux/sched.h               |   46 +-
- include/linux/thread_info.h         |   10 +-
- include/linux/tracehook.h           |  493 ++++++++
- include/linux/utrace.h              |  544 ++++++++
- init/Kconfig                        |   29 +
- kernel/Makefile                     |    1 +
- kernel/compat.c                     |    3 +-
- kernel/exit.c                       |  371 +++---
- kernel/fork.c                       |   72 +-
- kernel/ptrace.c                     | 2112 +++++++++++++++++++++++++-------
- kernel/signal.c                     |  288 +----
- kernel/sys_ni.c                     |    4 +
- kernel/utrace.c                     | 2377 +++++++++++++++++++++++++++++++++++
- mm/nommu.c                          |    4 +-
- security/selinux/hooks.c            |   59 +-
- security/selinux/include/objsec.h   |    1 -
- 58 files changed, 6306 insertions(+), 1287 deletions(-)
+ Documentation/DocBook/Makefile    |    2 +-
+ Documentation/DocBook/utrace.tmpl |   21 +
+ Documentation/utrace.txt          |  579 ++++++++++
+ fs/proc/array.c                   |    3 +
+ include/linux/ptrace.h            |   15 +
+ include/linux/sched.h             |    6 +
+ include/linux/tracehook.h         |   60 +
+ include/linux/utrace.h            |  534 +++++++++
+ init/Kconfig                      |   28 +
+ kernel/Makefile                   |    1 +
+ kernel/ptrace.c                   |  542 +++++++++-
+ kernel/signal.c                   |   14 +-
+ kernel/utrace.c                   | 2222 +++++++++++++++++++++++++++++++++++++
+ 13 files changed, 4023 insertions(+), 4 deletions(-)
 
 diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile
-index 300e170..7cf3afc 100644  
+index 0eb0d02..49a78b7 100644  
 --- a/Documentation/DocBook/Makefile
 +++ b/Documentation/DocBook/Makefile
 @@ -7,7 +7,7 @@
@@ -71,14 +24,14 @@
 -	    kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
 +	    kernel-hacking.xml kernel-locking.xml deviceiobook.xml utrace.xml \
  	    procfs-guide.xml writing_usb_driver.xml networking.xml \
- 	    kernel-api.xml filesystems.xml lsm.xml usb.xml \
+ 	    kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \
  	    gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
 diff --git a/Documentation/DocBook/utrace.tmpl b/Documentation/DocBook/utrace.tmpl
 new file mode 100644
-index ...f185043 100644  
+index ...8dfaa91 100644  
 --- /dev/null
 +++ b/Documentation/DocBook/utrace.tmpl
-@@ -0,0 +1,23 @@
+@@ -0,0 +1,21 @@
 +<?xml version="1.0" encoding="UTF-8"?>
 +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
 +	"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
@@ -96,9 +49,7 @@
 +    </chapter>
 +
 +<chapter><title>Machine state access via utrace</title>
-+!Finclude/linux/regset.h struct user_regset
-+!Finclude/linux/regset.h struct user_regset_view
-+!Finclude/linux/regset.h task_user_regset_view
++!Finclude/linux/regset.h
 +    </chapter>
 +
 +</book>
@@ -687,1997 +638,304 @@
 +sure which event callbacks it will or won't see after utrace_set_flags
 +has returned.  By checking for errors, it can know whether to clean up
 +its data structures immediately or to let its callbacks do the work.
-diff --git a/arch/mips/kernel/irixelf.c b/arch/mips/kernel/irixelf.c
-index 290d8e3..b14ba47 100644  
---- a/arch/mips/kernel/irixelf.c
-+++ b/arch/mips/kernel/irixelf.c
-@@ -805,8 +805,6 @@ static int load_irix_binary(struct linux
- #endif
- 
- 	start_thread(regs, elf_entry, bprm->p);
--	if (current->ptrace & PT_PTRACED)
--		send_sig(SIGTRAP, current, 0);
- 	return 0;
- out:
- 	return retval;
-diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
-index 4b749c4..e932b43 100644  
---- a/arch/powerpc/kernel/asm-offsets.c
-+++ b/arch/powerpc/kernel/asm-offsets.c
-@@ -26,8 +26,6 @@
- #ifdef CONFIG_PPC64
- #include <linux/time.h>
- #include <linux/hardirq.h>
--#else
--#include <linux/ptrace.h>
- #endif
- 
- #include <asm/io.h>
-@@ -60,7 +58,6 @@ int main(void)
- 	DEFINE(AUDITCONTEXT, offsetof(struct task_struct, audit_context));
- #else
- 	DEFINE(THREAD_INFO, offsetof(struct task_struct, stack));
--	DEFINE(PTRACE, offsetof(struct task_struct, ptrace));
- #endif /* CONFIG_PPC64 */
- 
- 	DEFINE(KSP, offsetof(struct thread_struct, ksp));
-@@ -80,7 +77,6 @@ int main(void)
- 	DEFINE(PGDIR, offsetof(struct thread_struct, pgdir));
- #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
- 	DEFINE(THREAD_DBCR0, offsetof(struct thread_struct, dbcr0));
--	DEFINE(PT_PTRACED, PT_PTRACED);
- #endif
- #ifdef CONFIG_SPE
- 	DEFINE(THREAD_EVR0, offsetof(struct thread_struct, evr[0]));
-diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
-index 59311ec..8d506d8 100644  
---- a/arch/powerpc/kernel/process.c
-+++ b/arch/powerpc/kernel/process.c
-@@ -868,11 +868,6 @@ int sys_execve(unsigned long a0, unsigne
- 	flush_spe_to_thread(current);
- 	error = do_execve(filename, (char __user * __user *) a1,
- 			  (char __user * __user *) a2, regs);
--	if (error == 0) {
--		task_lock(current);
--		current->ptrace &= ~PT_DTRACE;
--		task_unlock(current);
--	}
- 	putname(filename);
- out:
- 	return error;
-diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
-index 2a9fe97..f85d097 100644  
---- a/arch/powerpc/kernel/ptrace.c
-+++ b/arch/powerpc/kernel/ptrace.c
-@@ -22,6 +22,7 @@
- #include <linux/errno.h>
- #include <linux/ptrace.h>
- #include <linux/regset.h>
-+#include <linux/tracehook.h>
- #include <linux/elf.h>
- #include <linux/user.h>
- #include <linux/security.h>
-@@ -843,37 +844,18 @@ long arch_ptrace(struct task_struct *chi
- 		break;
- 
- 	default:
--		ret = ptrace_request(child, request, addr, data);
-+		ret = -ENOSYS;
[...10519 lines suppressed...]
 +{
-+	struct utrace *utrace = tsk->utrace;
-+	struct list_head *pos, *next;
-+	struct utrace_attached_engine *engine;
++	struct utrace *utrace = task->utrace;
++	struct utrace_attached_engine *engine, *next;
 +	const struct utrace_engine_ops *ops;
 +	int unsafe = 0;
 +
-+	/* XXX must change for sharing */
-+	list_for_each_safe_rcu(pos, next, &utrace->engines) {
-+		engine = list_entry(pos, struct utrace_attached_engine, entry);
++	list_for_each_entry_safe(engine, next, &utrace->engines, entry) {
 +		ops = rcu_dereference(engine->ops);
 +		if (ops->unsafe_exec)
-+			unsafe |= (*ops->unsafe_exec)(engine, tsk);
++			unsafe |= (*ops->unsafe_exec)(engine, task);
 +	}
 +
 +	return unsafe;
 +}
-diff --git a/mm/nommu.c b/mm/nommu.c
-index 5d8ae08..515beac 100644  
---- a/mm/nommu.c
-+++ b/mm/nommu.c
-@@ -22,7 +22,7 @@
- #include <linux/pagemap.h>
- #include <linux/slab.h>
- #include <linux/vmalloc.h>
--#include <linux/ptrace.h>
-+#include <linux/tracehook.h>
- #include <linux/blkdev.h>
- #include <linux/backing-dev.h>
- #include <linux/mount.h>
-@@ -734,7 +734,7 @@ static unsigned long determine_vm_flags(
- 	 * it's being traced - otherwise breakpoints set in it may interfere
- 	 * with another untraced process
- 	 */
--	if ((flags & MAP_PRIVATE) && (current->ptrace & PT_PTRACED))
-+	if ((flags & MAP_PRIVATE) && tracehook_expect_breakpoints(current))
- 		vm_flags &= ~VM_MAYSHARE;
- 
- 	return vm_flags;
-diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
-index 41a049f..44b756b 100644  
---- a/security/selinux/hooks.c
-+++ b/security/selinux/hooks.c
-@@ -24,7 +24,7 @@
- 
- #include <linux/init.h>
- #include <linux/kernel.h>
--#include <linux/ptrace.h>
-+#include <linux/tracehook.h>
- #include <linux/errno.h>
- #include <linux/sched.h>
- #include <linux/security.h>
-@@ -162,7 +162,7 @@ static int task_alloc_security(struct ta
- 		return -ENOMEM;
- 
- 	tsec->task = task;
--	tsec->osid = tsec->sid = tsec->ptrace_sid = SECINITSID_UNLABELED;
-+	tsec->osid = tsec->sid = SECINITSID_UNLABELED;
- 	task->security = tsec;
- 
- 	return 0;
-@@ -1638,19 +1638,13 @@ static inline u32 file_to_av(struct file
- 
- static int selinux_ptrace(struct task_struct *parent, struct task_struct *child)
- {
--	struct task_security_struct *psec = parent->security;
--	struct task_security_struct *csec = child->security;
- 	int rc;
- 
- 	rc = secondary_ops->ptrace(parent,child);
- 	if (rc)
- 		return rc;
- 
--	rc = task_has_perm(parent, child, PROCESS__PTRACE);
--	/* Save the SID of the tracing process for later use in apply_creds. */
--	if (!(child->ptrace & PT_PTRACED) && !rc)
--		csec->ptrace_sid = psec->sid;
--	return rc;
-+	return task_has_perm(parent, child, PROCESS__PTRACE);
- }
- 
- static int selinux_capget(struct task_struct *target, kernel_cap_t *effective,
-@@ -2119,12 +2113,25 @@ static void selinux_bprm_apply_creds(str
- 		/* Check for ptracing, and update the task SID if ok.
- 		   Otherwise, leave SID unchanged and kill. */
- 		if (unsafe & (LSM_UNSAFE_PTRACE | LSM_UNSAFE_PTRACE_CAP)) {
--			rc = avc_has_perm(tsec->ptrace_sid, sid,
--					  SECCLASS_PROCESS, PROCESS__PTRACE,
--					  NULL);
--			if (rc) {
--				bsec->unsafe = 1;
--				return;
-+			struct task_struct *tracer;
-+			struct task_security_struct *sec;
-+			u32 ptsid = 0;
-+
-+			rcu_read_lock();
-+			tracer = tracehook_tracer_task(current);
-+			if (likely(tracer != NULL)) {
-+				sec = tracer->security;
-+				ptsid = sec->sid;
-+			}
-+			rcu_read_unlock();
 +
-+			if (ptsid != 0) {
-+				rc = avc_has_perm(ptsid, sid, SECCLASS_PROCESS,
-+						  PROCESS__PTRACE, NULL);
-+				if (rc) {
-+					bsec->unsafe = 1;
-+					return;
-+				}
- 			}
- 		}
- 		tsec->sid = sid;
-@@ -2207,7 +2214,7 @@ static void selinux_bprm_post_apply_cred
- 
- 	/* Wake up the parent if it is waiting so that it can
- 	   recheck wait permission to the new task SID. */
--	wake_up_interruptible(&current->parent->signal->wait_chldexit);
-+	wake_up_interruptible(&current->real_parent->signal->wait_chldexit);
- }
- 
- /* superblock security operations */
-@@ -3080,11 +3087,6 @@ static int selinux_task_alloc_security(s
- 	tsec2->keycreate_sid = tsec1->keycreate_sid;
- 	tsec2->sockcreate_sid = tsec1->sockcreate_sid;
- 
--	/* Retain ptracer SID across fork, if any.
--	   This will be reset by the ptrace hook upon any
--	   subsequent ptrace_attach operations. */
--	tsec2->ptrace_sid = tsec1->ptrace_sid;
--
- 	return 0;
- }
- 
-@@ -5050,6 +5052,7 @@ static int selinux_setprocattr(struct ta
- 			       char *name, void *value, size_t size)
- {
- 	struct task_security_struct *tsec;
-+	struct task_struct *tracer;
- 	u32 sid = 0;
- 	int error;
- 	char *str = value;
-@@ -5138,18 +5141,24 @@ static int selinux_setprocattr(struct ta
- 		/* Check for ptracing, and update the task SID if ok.
- 		   Otherwise, leave SID unchanged and fail. */
- 		task_lock(p);
--		if (p->ptrace & PT_PTRACED) {
--			error = avc_has_perm_noaudit(tsec->ptrace_sid, sid,
-+		rcu_read_lock();
-+		tracer = tracehook_tracer_task(p);
-+		if (tracer != NULL) {
-+			struct task_security_struct *ptsec = tracer->security;
-+			u32 ptsid = ptsec->sid;
-+			rcu_read_unlock();
-+			error = avc_has_perm_noaudit(ptsid, sid,
- 						     SECCLASS_PROCESS,
- 						     PROCESS__PTRACE, 0, &avd);
- 			if (!error)
- 				tsec->sid = sid;
- 			task_unlock(p);
--			avc_audit(tsec->ptrace_sid, sid, SECCLASS_PROCESS,
-+			avc_audit(ptsid, sid, SECCLASS_PROCESS,
- 				  PROCESS__PTRACE, &avd, error, NULL);
- 			if (error)
- 				return error;
- 		} else {
-+			rcu_read_unlock();
- 			tsec->sid = sid;
- 			task_unlock(p);
- 		}
-diff --git a/security/selinux/include/objsec.h b/security/selinux/include/objsec.h
-index c6c2bb4..1db31c2 100644  
---- a/security/selinux/include/objsec.h
-+++ b/security/selinux/include/objsec.h
-@@ -35,7 +35,6 @@ struct task_security_struct {
- 	u32 create_sid;      /* fscreate SID */
- 	u32 keycreate_sid;   /* keycreate SID */
- 	u32 sockcreate_sid;  /* fscreate SID */
--	u32 ptrace_sid;      /* SID of ptrace parent */
- };
- 
- struct inode_security_struct {
++/*
++ * 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)" : "");
++}

linux-2.6-wireless-pending.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.54 -r 1.55 linux-2.6-wireless-pending.patch
Index: linux-2.6-wireless-pending.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-wireless-pending.patch,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -r1.54 -r1.55
--- linux-2.6-wireless-pending.patch	1 Aug 2008 15:28:05 -0000	1.54
+++ linux-2.6-wireless-pending.patch	8 Aug 2008 18:56:00 -0000	1.55
@@ -1,1314 +1,3 @@
-commit 56a6d13dfd49d90d72a1a962246206719dd9d143
-Author: Luis Carlos Cobo <luisca at cozybit.com>
-Date:   Tue Jul 29 19:59:31 2008 +0200
-
-    mac80211: fix mesh beaconing
-    
-    This patch fixes mesh beaconing, which was broken by "mac80211: revamp
-    beacon configuration".
-    
-    Signed-off-by: Luis Carlos Cobo <luisca at cozybit.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 77bbadd5ea893f364a0d1879723037678a03725c
-Author: Vegard Nossum <vegard.nossum at gmail.com>
-Date:   Tue Jul 29 13:31:47 2008 +0200
-
-    PS3: gelic: use unsigned long for irqflags
-    
-    The semantic patch I used was this:
-    
-    @@
-    expression lock;
-    identifier flags;
-    expression subclass;
-    @@
-    
-    - unsigned int flags;
-    + unsigned long flags;
-    
-    ...
-    
-    <+...
-    
-    (
-     spin_lock_irqsave(lock, flags)
-    |
-     _spin_lock_irqsave(lock)
-    |
-     spin_unlock_irqrestore(lock, flags)
-    |
-     _spin_unlock_irqrestore(lock, flags)
-    |
-     read_lock_irqsave(lock, flags)
-    |
-     _read_lock_irqsave(lock)
-    |
-     read_unlock_irqrestore(lock, flags)
-    |
-     _read_unlock_irqrestore(lock, flags)
-    |
-     write_lock_irqsave(lock, flags)
-    |
-     _write_lock_irqsave(lock)
-    |
-     write_unlock_irqrestore(lock, flags)
-    |
-     _write_unlock_irqrestore(lock, flags)
-    |
-     spin_lock_irqsave_nested(lock, flags, subclass)
-    |
-     _spin_lock_irqsave_nested(lock, subclass)
-    |
-     spin_unlock_irqrestore(lock, flags)
-    |
-     _spin_unlock_irqrestore(lock, flags)
-    |
-     _raw_spin_lock_flags(lock, flags)
-    |
-     __raw_spin_lock_flags(lock, flags)
-    )
-    
-    ...+>
-    
-    This patch was generated using the Coccinelle framework.
-    
-    Cc: Masakazu Mokuno <mokuno at sm.sony.co.jp>
-    Cc: Julia Lawall <julia at diku.dk>
-    Cc: Alexey Dobriyan <adobriyan at gmail.com>
-    Signed-off-by: Vegard Nossum <vegard.nossum at gmail.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 14db74bcc3f7a779cf395a47e26b06a28207571a
-Author: Johannes Berg <johannes at sipsolutions.net>
-Date:   Tue Jul 29 13:22:52 2008 +0200
-
-    mac80211: fix cfg80211 hooks for master interface
-    
-    The master interface is a virtual interface that is registered
-    to mac80211, changing that does not seem like a good idea at
-    the moment. However, since it has no sdata, we cannot accept
-    any configuration for it. This patch makes the cfg80211 hooks
-    reject any such attempt.
-    
-    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit bba95fefb8e31f4799652666d05a4a9aad56e492
-Author: Johannes Berg <johannes at sipsolutions.net>
-Date:   Tue Jul 29 13:22:51 2008 +0200
-
-    nl80211: fix dump callbacks
-    
-    Julius Volz pointed out that the dump callbacks in nl80211 were
-    broken and fixed one of them. This patch fixes the other three
-    and also addresses the TODOs there.
-    
-    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
-    Cc: Julius Volz <juliusv at google.com>
-    Cc: Thomas Graf <tgraf at suug.ch>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit d0f09804144fd9471a13cf4d80e66842c7fa114f
-Author: Johannes Berg <johannes at sipsolutions.net>
-Date:   Tue Jul 29 11:32:07 2008 +0200
-
-    mac80211: partially fix skb->cb use
-    
-    This patch fixes mac80211 to not use the skb->cb over the queue step
-    from virtual interfaces to the master. The patch also, for now,
-    disables aggregation because that would still require requeuing,
-    will fix that in a separate patch. There are two other places (software
-    requeue and powersaving stations) where requeue can happen, but that is
-    not currently used by any drivers/not possible to use respectively.
-    
-    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 0ccd58fc03f40529f66190b1a41e92a732d2bda8
-Author: Larry Finger <Larry.Finger at lwfinger.net>
-Date:   Mon Jul 28 22:25:08 2008 -0500
-
-    rtl8187: Improve wireless statistics for RTL8187B
-    
-    Wireless statistics produced by the RTL8187B driver are not particularly
-    informative about the strength of the received signal. From the data sheet
-    provided by Realtek, I discovered that certain parts of the RX header
-    should have the information necessary to calculate signal quality and
-    strength. With testing, it became clear that most of these quantities were
-    very jittery - only the AGC correlated with the signals expected from nearby
-    AP's. As a result, the quality and strength are derived from the agc value.
-    The scaling has been determined so that the numbers are close to those
-    obtained by b43 under the same conditions. The results are qualitatively
-    correct.
-    
-    Statistics derived for the RTL8187 have not been changed.
-    
-    The RX header variables have been renamed to match the quantites described
-    in the Realtek data sheet.
-    
-    Signed-off-by: Larry Finger <Larry.Finger at lwfinger.net>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 1f690d7b549ef9c7424536475501885dd5b54930
-Author: Larry Finger <Larry.Finger at lwfinger.net>
-Date:   Mon Jul 28 22:08:18 2008 -0500
-
-    rtl8187: Fix for TX sequence number problem
-    
-    "mac80211: fix TX sequence numbers" broke rtl8187. This
-    patch makes the same kind of fix that was done for rt2x00. Note that
-    this code will have to be reworked for proper sequence numbers on beacons.
-    In addition, the sequence number has been placed in the hardware state,
-    not the vif state.
-    
-    Signed-off-by: Larry Finger <Larry.Finger at lwfinger.net>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 5422399518e8142198df888aab00acdac251f754
-Author: Rami Rosen <ramirose at gmail.com>
-Date:   Thu Jul 24 10:40:37 2008 +0300
-
-    mac80211: append CONFIG_ to MAC80211_VERBOSE_PS_DEBUG in net/mac80211/tx.c.
-    
-    In net/mac80211/tx.c, there are some #ifdef which checks
-    MAC80211_VERBOSE_PS_DEBUG
-    (which in fact is never set) instead of
-    CONFIG_MAC80211_VERBOSE_PS_DEBUG, as should be.
-    
-    This patch replaces MAC80211_VERBOSE_PS_DEBUG with
-    CONFIG_MAC80211_VERBOSE_PS_DEBUG in these #ifdef commands in
-    net/mac80211/tx.c.
-    
-    Signed-off-by: Rami Rosen <ramirose at gmail.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 0b06b2ae0e474fc6378117c832bcd94785a9e975
-Author: Harvey Harrison <harvey.harrison at gmail.com>
-Date:   Wed Jul 23 18:36:38 2008 -0700
-
-    mac80211: fix sparse integer as NULL pointer warning
-    
[...22028 lines suppressed...]
- 				&params.station_flags))
- 		return -EINVAL;
- 
--	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
-+	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
- 	if (err)
- 		return err;
- 
-@@ -1202,7 +1225,7 @@ static int nl80211_del_station(struct sk
- 	if (info->attrs[NL80211_ATTR_MAC])
- 		mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
- 
--	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
-+	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
- 	if (err)
- 		return err;
- 
-@@ -1271,68 +1294,78 @@ static int nl80211_send_mpath(struct sk_
- }
- 
- static int nl80211_dump_mpath(struct sk_buff *skb,
--		struct netlink_callback *cb)
-+			      struct netlink_callback *cb)
- {
--	int wp_idx = 0;
--	int if_idx = 0;
--	int sta_idx = cb->args[2];
--	int wp_start = cb->args[0];
--	int if_start = cb->args[1];
- 	struct mpath_info pinfo;
- 	struct cfg80211_registered_device *dev;
--	struct wireless_dev *wdev;
-+	struct net_device *netdev;
- 	u8 dst[ETH_ALEN];
- 	u8 next_hop[ETH_ALEN];
-+	int ifidx = cb->args[0];
-+	int path_idx = cb->args[1];
- 	int err;
--	int exit = 0;
- 
--	/* TODO: filter by device */
--	mutex_lock(&cfg80211_drv_mutex);
--	list_for_each_entry(dev, &cfg80211_drv_list, list) {
--		if (exit)
-+	if (!ifidx) {
-+		err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize,
-+				  nl80211_fam.attrbuf, nl80211_fam.maxattr,
-+				  nl80211_policy);
-+		if (err)
-+			return err;
-+
-+		if (!nl80211_fam.attrbuf[NL80211_ATTR_IFINDEX])
-+			return -EINVAL;
-+
-+		ifidx = nla_get_u32(nl80211_fam.attrbuf[NL80211_ATTR_IFINDEX]);
-+		if (!ifidx)
-+			return -EINVAL;
-+	}
-+
-+	netdev = dev_get_by_index(&init_net, ifidx);
-+	if (!netdev)
-+		return -ENODEV;
-+
-+	dev = cfg80211_get_dev_from_ifindex(ifidx);
-+	if (IS_ERR(dev)) {
-+		err = PTR_ERR(dev);
-+		goto out_put_netdev;
-+	}
-+
-+	if (!dev->ops->dump_mpath) {
-+		err = -ENOSYS;
-+		goto out_err;
-+	}
-+
-+	rtnl_lock();
-+
-+	while (1) {
-+		err = dev->ops->dump_mpath(&dev->wiphy, netdev, path_idx,
-+					   dst, next_hop, &pinfo);
-+		if (err == -ENOENT)
- 			break;
--		if (++wp_idx < wp_start)
--			continue;
--		if_idx = 0;
-+		if (err)
-+			goto out_err_rtnl;
- 
--		mutex_lock(&dev->devlist_mtx);
--		list_for_each_entry(wdev, &dev->netdev_list, list) {
--			if (exit)
--				break;
--			if (++if_idx < if_start)
--				continue;
--			if (!dev->ops->dump_mpath)
--				continue;
-+		if (nl80211_send_mpath(skb, NETLINK_CB(cb->skb).pid,
-+				       cb->nlh->nlmsg_seq, NLM_F_MULTI,
-+				       netdev, dst, next_hop,
-+				       &pinfo) < 0)
-+			goto out;
- 
--			for (;; ++sta_idx) {
--				rtnl_lock();
--				err = dev->ops->dump_mpath(&dev->wiphy,
--						wdev->netdev, sta_idx, dst,
--						next_hop, &pinfo);
--				rtnl_unlock();
--				if (err) {
--					sta_idx = 0;
--					break;
--				}
--				if (nl80211_send_mpath(skb,
--						NETLINK_CB(cb->skb).pid,
--						cb->nlh->nlmsg_seq, NLM_F_MULTI,
--						wdev->netdev, dst, next_hop,
--						&pinfo) < 0) {
--					exit = 1;
--					break;
--				}
--			}
--		}
--		mutex_unlock(&dev->devlist_mtx);
-+		path_idx++;
- 	}
--	mutex_unlock(&cfg80211_drv_mutex);
- 
--	cb->args[0] = wp_idx;
--	cb->args[1] = if_idx;
--	cb->args[2] = sta_idx;
- 
--	return skb->len;
-+ out:
-+	cb->args[1] = path_idx;
-+	err = skb->len;
-+ out_err_rtnl:
-+	rtnl_unlock();
-+ out_err:
-+	cfg80211_put_dev(dev);
-+ out_put_netdev:
-+	dev_put(netdev);
-+
-+	return err;
- }
- 
- static int nl80211_get_mpath(struct sk_buff *skb, struct genl_info *info)
-@@ -1352,7 +1385,7 @@ static int nl80211_get_mpath(struct sk_b
- 
- 	dst = nla_data(info->attrs[NL80211_ATTR_MAC]);
- 
--	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
-+	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
- 	if (err)
- 		return err;
- 
-@@ -1405,7 +1438,7 @@ static int nl80211_set_mpath(struct sk_b
- 	dst = nla_data(info->attrs[NL80211_ATTR_MAC]);
- 	next_hop = nla_data(info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]);
- 
--	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
-+	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
- 	if (err)
- 		return err;
- 
-@@ -1440,7 +1473,7 @@ static int nl80211_new_mpath(struct sk_b
- 	dst = nla_data(info->attrs[NL80211_ATTR_MAC]);
- 	next_hop = nla_data(info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]);
- 
--	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
-+	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
- 	if (err)
- 		return err;
- 
-@@ -1469,7 +1502,7 @@ static int nl80211_del_mpath(struct sk_b
- 	if (info->attrs[NL80211_ATTR_MAC])
- 		dst = nla_data(info->attrs[NL80211_ATTR_MAC]);
- 
--	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
-+	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
- 	if (err)
- 		return err;
- 
 diff -up linux-2.6.25.noarch/net/wireless/radiotap.c.orig linux-2.6.25.noarch/net/wireless/radiotap.c
---- linux-2.6.25.noarch/net/wireless/radiotap.c.orig	2008-07-30 15:19:01.000000000 -0400
-+++ linux-2.6.25.noarch/net/wireless/radiotap.c	2008-07-30 15:19:25.000000000 -0400
+--- linux-2.6.25.noarch/net/wireless/radiotap.c.orig	2008-07-08 16:10:33.000000000 -0400
++++ linux-2.6.25.noarch/net/wireless/radiotap.c	2008-07-08 16:10:54.000000000 -0400
 @@ -59,23 +59,21 @@ int ieee80211_radiotap_iterator_init(
  		return -EINVAL;
  
@@ -88451,8 +81818,8 @@
  			} else
  				/* no more bitmaps: end */
 diff -up linux-2.6.25.noarch/net/wireless/wext.c.orig linux-2.6.25.noarch/net/wireless/wext.c
---- linux-2.6.25.noarch/net/wireless/wext.c.orig	2008-07-30 15:19:01.000000000 -0400
-+++ linux-2.6.25.noarch/net/wireless/wext.c	2008-07-30 15:19:25.000000000 -0400
+--- linux-2.6.25.noarch/net/wireless/wext.c.orig	2008-07-08 16:10:33.000000000 -0400
++++ linux-2.6.25.noarch/net/wireless/wext.c	2008-07-08 16:10:54.000000000 -0400
 @@ -500,7 +500,7 @@ static int call_commit_handler(struct ne
  /*
   * Calculate size of private arguments

linux-2.6-wireless.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.48 -r 1.49 linux-2.6-wireless.patch
Index: linux-2.6-wireless.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-wireless.patch,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -r1.48 -r1.49
--- linux-2.6-wireless.patch	11 Jul 2008 19:06:48 -0000	1.48
+++ linux-2.6-wireless.patch	8 Aug 2008 18:56:00 -0000	1.49
@@ -154,130878 +154,368 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 7b58ccfe32f40eca8c8ca29aa723a5d0e814f0c9
-Author: andrey at cozybit.com <andrey at cozybit.com>
-Date:   Tue Jul 1 11:43:53 2008 -0700
-
-    libertas: support USB persistence on suspend/resume (resend)
-    
-    Handle .reset_resume() so that libertas can survive suspend/resume without
-    reloading the firmware.
-    
-    Signed-off-by: Andrey Yurovsky <andrey at cozybit.com>
-    Acked-by: Deepak Saxena <dsaxena at laptop.org>
-    Acked-by: Dan Williams <dcbw at redhat.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 6afe6828b19b4567768264831d101026cb5510ff
-Author: Zhu Yi <yi.zhu at intel.com>
-Date:   Tue Jul 1 09:20:34 2008 +0800
-
-    iwlwifi: drop skb silently for Tx request in monitor mode
-    
-    This patch fixes the problem to keep mac80211 resubmitting SKBs
-    when Tx request cannot be met in monitor mode.
-    
-    Signed-off-by: Zhu Yi <yi.zhu at intel.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit ec04fd60fd74a9db9c63fe11d519be3642cabfdd
-Author: Rick Farrington <rickdic at hotmail.com>
-Date:   Tue Jul 1 09:20:33 2008 +0800
-
-    iwlwifi: fix incorrect 5GHz rates reported in monitor mode
-    
-    This patch fixes the rates reported in monitor mode operation
-    (Wireshark) for iwlwifi.
-    
-    Previously, packets with rates of 6M..24M would be reported
-    incorrectly and packets with rates of 36M..54M would not passed
-    up the stack.
-    
-    Signed-off-by: Rick Farrington <rickdic at hotmail.com>
-    Signed-off-by: Zhu Yi <yi.zhu at intel.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 23976efedd5ecb420b87455787c537eb4aed1981
-Author: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
-Date:   Sat Jun 28 02:50:13 2008 +0300
-
-    mac80211: don't accept WEP keys other than WEP40 and WEP104
-    
-    This patch makes mac80211 refuse a WEP key whose length is not WEP40 nor
-    WEP104.
-    
-    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
-    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 1bcca3c463e4930cef9986b05165bb0b3eb46f63
-Author: Pavel Roskin <proski at gnu.org>
-Date:   Fri Jun 27 16:19:58 2008 -0400
-
-    hostap: fix sparse warnings
-    
-    Rewrite AID calculation in handle_pspoll() to avoid truncating bits.
-    Make hostap_80211_header_parse() static, don't export it.  Avoid
-    shadowing variables.
-    
-    Signed-off-by: Pavel Roskin <proski at gnu.org>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 15ea0ebc5b7305cc75189cb6b7924d0db5278e0c
-Author: Pavel Roskin <proski at gnu.org>
-Date:   Fri Jun 27 16:19:52 2008 -0400
-
-    hostap: don't report useless WDS frames by default
-    
-    DEBUG_EXTRA is reported to the kernel log by default, but DEBUG_EXTRA2
-    is not.  Unrelated WDS frames pollute the log unnecessarily.
-    
-    Signed-off-by: Pavel Roskin <proski at gnu.org>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 00eb7fe77eb455f807c396f9917f0f623d4c84bb
-Author: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
-Date:   Thu Jun 26 12:13:46 2008 +0300
-
-    mac80211: fix an oops in several failure paths in key allocation
-    
-    This patch fixes an oops in several failure paths in key allocation. This
-    Oops occurs when freeing a key that has not been linked yet, so the
-    key->sdata is not set.
-    
-    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
-    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
-    Acked-by: Johannes Berg <johannes at sipsolutions.net>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 5f4a6fae46a214c4dce3bd63a6219a5f1c818c78
-Author: Harvey Harrison <harvey.harrison at gmail.com>
-Date:   Wed Jun 25 14:20:37 2008 -0700
-
-    prism: islpci_eth.c endianness fix
-    
-    clock is already cpu-endian (see le32_to_cpu slightly before), so
-    le64_to_cpu doesn't make much sense.
-    
-    Signed-off-by: Harvey Harrison <harvey.harrison at gmail.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 980dfcb93232907034a2c92d62d3a7d6ac7bef44
-Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Wed Jun 25 21:27:00 2008 +0200
-
-    rt2x00: Fix lock dependency errror
-    
-    This fixes a circular locking dependency in the workqueue handling.
-    The interface work task uses the mac80211 function
-    ieee80211_iterate_active_interfaces() which grabs the RTNL lock.
-    
-    However when the interface is brough down, this happens under the RTNL
-    lock as well, this causes problems because mac80211 will flush the workqueue
-    during the ifdown event. This causes mac80211 to wait until the driver has
-    completed all work which can't finish because it is waiting on the RTNL lock.
-    
-    This is fixed by moving rt2x00 workqueue tasks on a different workqueue,
-    this workqueue can be flushed when the ieee80211_hw structure is removed
-    by the driver (when the driver is unloaded) which does not happen under the
-    RTNL lock.
-    
-    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 66b5004d85164a6439d3ba1e7757734472ee2cac
-Author: Ron Rindjunsky <ron.rindjunsky at intel.com>
-Date:   Wed Jun 25 16:46:31 2008 +0800
-
-    iwlwifi: improve scanning band selection management
-    
-    This patch modifies the band selection management when scanning, so
-    bands are now scanned according to HW band support.
-    
-    Signed-off-by: Ron Rindjunsky <ron.rindjunsky at intel.com>
-    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
-    Signed-off-by: Zhu Yi <yi.zhu at intel.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 99ade2597e3f7f0ad463c489aaccd6cc605e242c
-Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Fri Jun 20 22:11:00 2008 +0200
-
-    rt2x00: Fix unbalanced mutex locking
-    
-    The usb_cache_mutex was not correctly released
-    under all circumstances. Both rt73usb as rt2500usb
-    didn't release the mutex under certain conditions
-    when the register access failed. Obviously such
-    failure would lead to deadlocks.
-    
-    In addition under similar circumstances when the
-    bbp register couldn't be read the value must be
-    set to 0xff to indicate that the value is wrong.
-    This too didn't happen under all circumstances.
-    
-    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 2f9ec47d0954f9d2e5a00209c2689cbc477a8c89
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Fri Jun 20 11:40:46 2008 +0200
-
-    b43legacy: Fix possible NULL pointer dereference in DMA code
-    
-    This fixes a possible NULL pointer dereference in an error path of the
-    DMA allocation error checking code. This is also necessary for a future
-    DMA API change that is on its way into the mainline kernel that adds
-    an additional dev parameter to dma_mapping_error().
-    
-    Signed-off-by: Michael Buesch <mb at bu3sch.de>
-    Cc: stable <stable at kernel.org>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 7b3abfc87ec13a81b255012b6e1bd4caeeb05aec
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Sun Jun 15 16:01:24 2008 +0200
-
-    b43: Fix possible MMIO access while device is down
-    
-    This fixes a possible MMIO access while the device is still down
-    from a suspend cycle. MMIO accesses with the device powered down
[...130808 lines suppressed...]
-+	};
-+	static const struct ieee80211_regdomain regdom_world = REGDOM(world);
-+	int i;
-+
-+	for (i = 0; i < ARRAY_SIZE(ieee80211_regdoms); i++)
-+		if (strcmp(ieee80211_regdom, ieee80211_regdoms[i].code) == 0)
-+			return &ieee80211_regdoms[i];
-+
-+	return &regdom_world;
-+}
-+
-+
-+static void handle_channel(struct ieee80211_channel *chan,
-+			   const struct ieee80211_regdomain *rd)
-+{
-+	int i;
-+	u32 flags = chan->orig_flags;
-+	const struct ieee80211_channel_range *rg = NULL;
-+
-+	for (i = 0; i < rd->n_ranges; i++) {
-+		if (rd->ranges[i].start_freq <= chan->center_freq &&
-+		    chan->center_freq <= rd->ranges[i].end_freq) {
-+			rg = &rd->ranges[i];
-+			break;
-+		}
-+	}
-+
-+	if (!rg) {
-+		/* not found */
-+		flags |= IEEE80211_CHAN_DISABLED;
-+		chan->flags = flags;
-+		return;
-+	}
-+
-+	chan->flags = flags;
-+	chan->max_antenna_gain = min(chan->orig_mag,
-+					 rg->max_antenna_gain);
-+	if (chan->orig_mpwr)
-+		chan->max_power = min(chan->orig_mpwr, rg->max_power);
-+	else
-+		chan->max_power = rg->max_power;
-+}
-+
-+static void handle_band(struct ieee80211_supported_band *sband,
-+			const struct ieee80211_regdomain *rd)
-+{
-+	int i;
-+
-+	for (i = 0; i < sband->n_channels; i++)
-+		handle_channel(&sband->channels[i], rd);
-+}
-+
-+void wiphy_update_regulatory(struct wiphy *wiphy)
-+{
-+	enum ieee80211_band band;
-+	const struct ieee80211_regdomain *rd = get_regdom();
-+
-+	for (band = 0; band < IEEE80211_NUM_BANDS; band++)
-+		if (wiphy->bands[band])
-+			handle_band(wiphy->bands[band], rd);
-+}
-diff -up /dev/null linux-2.6.25.noarch/net/wireless/util.c
---- /dev/null	2008-07-10 09:23:32.996002867 -0400
-+++ linux-2.6.25.noarch/net/wireless/util.c	2008-07-10 13:43:34.000000000 -0400
-@@ -0,0 +1,121 @@
-+/*
-+ * Wireless utility functions
-+ *
-+ * Copyright 2007	Johannes Berg <johannes at sipsolutions.net>
-+ */
-+#include <net/wireless.h>
-+#include <asm/bitops.h>
-+#include "core.h"
-+
-+int ieee80211_channel_to_frequency(int chan)
-+{
-+	if (chan < 14)
-+		return 2407 + chan * 5;
-+
-+	if (chan == 14)
-+		return 2484;
-+
-+	/* FIXME: 802.11j 17.3.8.3.2 */
-+	return (chan + 1000) * 5;
-+}
-+EXPORT_SYMBOL(ieee80211_channel_to_frequency);
-+
-+int ieee80211_frequency_to_channel(int freq)
-+{
-+	if (freq == 2484)
-+		return 14;
-+
-+	if (freq < 2484)
-+		return (freq - 2407) / 5;
-+
-+	/* FIXME: 802.11j 17.3.8.3.2 */
-+	return freq/5 - 1000;
-+}
-+EXPORT_SYMBOL(ieee80211_frequency_to_channel);
-+
-+struct ieee80211_channel *__ieee80211_get_channel(struct wiphy *wiphy,
-+						  int freq)
-+{
-+	enum ieee80211_band band;
-+	struct ieee80211_supported_band *sband;
-+	int i;
-+
-+	for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
-+		sband = wiphy->bands[band];
-+
-+		if (!sband)
-+			continue;
-+
-+		for (i = 0; i < sband->n_channels; i++) {
-+			if (sband->channels[i].center_freq == freq)
-+				return &sband->channels[i];
-+		}
-+	}
-+
-+	return NULL;
-+}
-+EXPORT_SYMBOL(__ieee80211_get_channel);
-+
-+static void set_mandatory_flags_band(struct ieee80211_supported_band *sband,
-+				     enum ieee80211_band band)
-+{
-+	int i, want;
-+
-+	switch (band) {
-+	case IEEE80211_BAND_5GHZ:
-+		want = 3;
-+		for (i = 0; i < sband->n_bitrates; i++) {
-+			if (sband->bitrates[i].bitrate == 60 ||
-+			    sband->bitrates[i].bitrate == 120 ||
-+			    sband->bitrates[i].bitrate == 240) {
-+				sband->bitrates[i].flags |=
-+					IEEE80211_RATE_MANDATORY_A;
-+				want--;
-+			}
-+		}
-+		WARN_ON(want);
-+		break;
-+	case IEEE80211_BAND_2GHZ:
-+		want = 7;
-+		for (i = 0; i < sband->n_bitrates; i++) {
-+			if (sband->bitrates[i].bitrate == 10) {
-+				sband->bitrates[i].flags |=
-+					IEEE80211_RATE_MANDATORY_B |
-+					IEEE80211_RATE_MANDATORY_G;
-+				want--;
-+			}
-+
-+			if (sband->bitrates[i].bitrate == 20 ||
-+			    sband->bitrates[i].bitrate == 55 ||
-+			    sband->bitrates[i].bitrate == 110 ||
-+			    sband->bitrates[i].bitrate == 60 ||
-+			    sband->bitrates[i].bitrate == 120 ||
-+			    sband->bitrates[i].bitrate == 240) {
-+				sband->bitrates[i].flags |=
-+					IEEE80211_RATE_MANDATORY_G;
-+				want--;
-+			}
-+
-+			if (sband->bitrates[i].bitrate != 10 &&
-+			    sband->bitrates[i].bitrate != 20 &&
-+			    sband->bitrates[i].bitrate != 55 &&
-+			    sband->bitrates[i].bitrate != 110)
-+				sband->bitrates[i].flags |=
-+					IEEE80211_RATE_ERP_G;
-+		}
-+		WARN_ON(want != 0 && want != 3 && want != 6);
-+		break;
-+	case IEEE80211_NUM_BANDS:
-+		WARN_ON(1);
-+		break;
-+	}
-+}
-+
-+void ieee80211_set_bitrate_flags(struct wiphy *wiphy)
-+{
-+	enum ieee80211_band band;
-+
-+	for (band = 0; band < IEEE80211_NUM_BANDS; band++)
-+		if (wiphy->bands[band])
-+			set_mandatory_flags_band(wiphy->bands[band], band);
-+}
-diff -up linux-2.6.25.noarch/net/wireless/wext.c.orig linux-2.6.25.noarch/net/wireless/wext.c
---- linux-2.6.25.noarch/net/wireless/wext.c.orig	2008-07-10 13:43:11.000000000 -0400
-+++ linux-2.6.25.noarch/net/wireless/wext.c	2008-07-10 13:43:34.000000000 -0400
-@@ -1157,7 +1157,7 @@ static void rtmsg_iwinfo(struct net_devi
- 	struct sk_buff *skb;
- 	int err;
- 
--	if (dev->nd_net != &init_net)
-+	if (dev_net(dev) != &init_net)
- 		return;
+ 	/* Rates information. */
+ 	struct rc_pid_rateinfo *rinfo;
  
- 	skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);

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

Index: linux-2.6-x86-apic-dump-all-regs-v3.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-x86-apic-dump-all-regs-v3.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-x86-apic-dump-all-regs-v3.patch	21 Jul 2008 05:21:03 -0000	1.2
+++ linux-2.6-x86-apic-dump-all-regs-v3.patch	8 Aug 2008 18:56:01 -0000	1.3
@@ -104,8 +104,8 @@
 --- linux-next-2.6.26-rc9-20080711.macro/arch/x86/pci/acpi.c	2008-07-11 15:56:32.000000000 +0000
 +++ linux-next-2.6.26-rc9-20080711/arch/x86/pci/acpi.c	2008-07-15 23:10:13.000000000 +0000
 @@ -281,11 +281,6 @@ int __init pci_acpi_init(void)
- 	} else
- 		printk(KERN_INFO "PCI: If a device doesn't work, try \"pci=routeirq\".  If it helps, post a report\n");
+ 			acpi_pci_irq_enable(dev);
+ 	}
  
 -#ifdef CONFIG_X86_IO_APIC
 -	if (acpi_ioapic)


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/sources,v
retrieving revision 1.694
retrieving revision 1.695
diff -u -r1.694 -r1.695
--- sources	1 Aug 2008 21:36:30 -0000	1.694
+++ sources	8 Aug 2008 18:56:01 -0000	1.695
@@ -1,2 +1,2 @@
-db95a49a656a3247d4995a797d333153  linux-2.6.25.tar.bz2
-5b3f6ce9a5c787859413758ea214a89d  patch-2.6.25.14.bz2
+5169d01c405bc3f866c59338e217968c  linux-2.6.26.tar.bz2
+5e0b0853ab6e968f7a09597c11b8e0c7  patch-2.6.26.2.bz2


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/upstream,v
retrieving revision 1.614
retrieving revision 1.615
diff -u -r1.614 -r1.615
--- upstream	1 Aug 2008 21:36:30 -0000	1.614
+++ upstream	8 Aug 2008 18:56:01 -0000	1.615
@@ -1,2 +1,2 @@
-linux-2.6.25.tar.bz2
-patch-2.6.25.14.bz2
+linux-2.6.26.tar.bz2
+patch-2.6.26.2.bz2


--- linux-2.6-acpi-eeepc-hotkey.patch DELETED ---


--- linux-2.6-acpi-fix-error-with-external-methods.patch DELETED ---


--- linux-2.6-acpi-fix-sizeof.patch DELETED ---


--- linux-2.6-alsa-hda-codec-add-AD1884A-mobile.patch DELETED ---


--- linux-2.6-alsa-hda-codec-add-AD1884A-x300.patch DELETED ---


--- linux-2.6-alsa-hda-codec-add-AD1884A.patch DELETED ---


--- linux-2.6-alsa-kill-annoying-messages.patch DELETED ---


--- linux-2.6-bluetooth-signal-userspace-for-socket-errors.patch DELETED ---


--- linux-2.6-devmem.patch DELETED ---


--- linux-2.6-efika-not-chrp.patch DELETED ---


--- linux-2.6-fs-fat-cleanup-code.patch DELETED ---


--- linux-2.6-fs-fat-fix-setattr.patch DELETED ---


--- linux-2.6-fs-fat-relax-permission-check-of-fat_setattr.patch DELETED ---


--- linux-2.6-libata-acpi-fix-invalid-context-acpi.patch DELETED ---


--- linux-2.6-libata-acpi-handle-bay-devices-in-dock-stations.patch DELETED ---


--- linux-2.6-libata-acpi-hotplug-fixups.patch DELETED ---


--- linux-2.6-libata-ata_piix-dont-attach-to-ich6m-in-ahci-mode.patch DELETED ---


--- linux-2.6-libata-be-a-bit-more-slack-about-early-devices.patch DELETED ---


--- linux-2.6-ppc-rtc.patch DELETED ---


--- linux-2.6-stable-queue.patch DELETED ---


--- linux-2.6-sysrq-add-show-backtrace-on-all-cpus-function.patch DELETED ---


--- linux-2.6-uvcvideo.patch DELETED ---


--- linux-2.6-windfarm-pm121-fix.patch DELETED ---


--- linux-2.6-windfarm-pm121.patch DELETED ---


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


--- linux-2.6-x86-dont-map-vdso-when-disabled.patch DELETED ---


--- linux-2.6-x86-dont-use-disabled-vdso-for-signals.patch DELETED ---


--- linux-2.6-x86-mm-ioremap-64-bit-resource-on-32-bit-kernel.patch DELETED ---


--- linux-2.6.25-utrace-bugon.patch DELETED ---


--- linux-2.6.25-utrace-i386-syscall-trace.patch DELETED ---


--- linux-2.6.25.tar.bz2.sign DELETED ---


--- patch-2.6.25.14.bz2.sign DELETED ---




More information about the fedora-extras-commits mailing list