From ab9819779de6b4d79cf72f3bb2eea9775c931441 Mon Sep 17 00:00:00 2001 From: Chris Wright Date: Fri, 8 Dec 2006 12:52:32 -0800 Subject: [PATCH] batch of -stable patches (mostly things from akpm) --- queue-2.6.19/add-bottom_half.h.patch | 75 +++++++ ...ix-error-code-path-in-autofs_fill_sb.patch | 137 +++++++++++++ ...pat_sys_mount-when-data_page-is-null.patch | 74 +++++++ queue-2.6.19/drm-sis-linkage-fix.patch | 34 ++++ ...-intx-when-enabling-msi-in-forcedeth.patch | 60 ++++++ ...rda-incorrect-ttp-header-reservation.patch | 42 ++++ ...erspace-headers-platform-independent.patch | 187 ++++++++++++++++++ .../pm-fix-swsusp-debug-mode-testproc.patch | 34 ++++ ...bility-of-address-and-neighbour-bits.patch | 26 +++ queue-2.6.19/series | 11 ++ ...ug_ons-which-can-incorrectly-trigger.patch | 49 +++++ ...t-hang-due-to-nmi-watchdog-init-code.patch | 58 ++++++ 12 files changed, 787 insertions(+) create mode 100644 queue-2.6.19/add-bottom_half.h.patch create mode 100644 queue-2.6.19/autofs-fix-error-code-path-in-autofs_fill_sb.patch create mode 100644 queue-2.6.19/compat-skip-data-conversion-in-compat_sys_mount-when-data_page-is-null.patch create mode 100644 queue-2.6.19/drm-sis-linkage-fix.patch create mode 100644 queue-2.6.19/forcedeth-disable-intx-when-enabling-msi-in-forcedeth.patch create mode 100644 queue-2.6.19/irda-incorrect-ttp-header-reservation.patch create mode 100644 queue-2.6.19/m32r-make-userspace-headers-platform-independent.patch create mode 100644 queue-2.6.19/pm-fix-swsusp-debug-mode-testproc.patch create mode 100644 queue-2.6.19/restore-api-compatibility-of-address-and-neighbour-bits.patch create mode 100644 queue-2.6.19/softirq-remove-bug_ons-which-can-incorrectly-trigger.patch create mode 100644 queue-2.6.19/x86_64-fix-boot-hang-due-to-nmi-watchdog-init-code.patch diff --git a/queue-2.6.19/add-bottom_half.h.patch b/queue-2.6.19/add-bottom_half.h.patch new file mode 100644 index 00000000000..79b8bf958f5 --- /dev/null +++ b/queue-2.6.19/add-bottom_half.h.patch @@ -0,0 +1,75 @@ +From stable-bounces@linux.kernel.org Wed Dec 6 20:37:11 2006 +Message-Id: <200612070431.kB74VVj5028746@shell0.pdx.osdl.net> +To: torvalds@osdl.org +From: akpm@osdl.org +Date: Wed, 06 Dec 2006 20:31:30 -0800 +Cc: akpm@osdl.org, mingo@elte.hu, rdunlap@xenotime.net, ak@suse.de, stable@kernel.org +Subject: add bottom_half.h + +From: Andrew Morton + +With CONFIG_SMP=n: + +drivers/input/ff-memless.c:384: warning: implicit declaration of function 'local_bh_disable' +drivers/input/ff-memless.c:393: warning: implicit declaration of function 'local_bh_enable' + +Really linux/spinlock.h should include linux/interrupt.h. But interrupt.h +includes sched.h which will need spinlock.h. + +So the patch breaks the _bh declarations out into a separate header and +includes it in bothj interrupt.h and spinlock.h. + +Cc: "Randy.Dunlap" +Cc: Andi Kleen +Cc: +Cc: Ingo Molnar +Signed-off-by: Andrew Morton +Signed-off-by: Chris Wright +--- + + include/linux/bottom_half.h | 5 +++++ + include/linux/interrupt.h | 7 +------ + include/linux/spinlock.h | 1 + + 3 files changed, 7 insertions(+), 6 deletions(-) + +--- /dev/null ++++ linux-2.6.19/include/linux/bottom_half.h +@@ -0,0 +1,5 @@ ++extern void local_bh_disable(void); ++extern void __local_bh_enable(void); ++extern void _local_bh_enable(void); ++extern void local_bh_enable(void); ++extern void local_bh_enable_ip(unsigned long ip); +--- linux-2.6.19.orig/include/linux/interrupt.h ++++ linux-2.6.19/include/linux/interrupt.h +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -217,12 +218,6 @@ static inline void __deprecated save_and + #define save_and_cli(x) save_and_cli(&x) + #endif /* CONFIG_SMP */ + +-extern void local_bh_disable(void); +-extern void __local_bh_enable(void); +-extern void _local_bh_enable(void); +-extern void local_bh_enable(void); +-extern void local_bh_enable_ip(unsigned long ip); +- + /* PLEASE, avoid to allocate new softirqs, if you need not _really_ high + frequency threaded job scheduling. For almost all the purposes + tasklets are more than enough. F.e. all serial device BHs et +--- linux-2.6.19.orig/include/linux/spinlock.h ++++ linux-2.6.19/include/linux/spinlock.h +@@ -52,6 +52,7 @@ + #include + #include + #include ++#include + + #include + diff --git a/queue-2.6.19/autofs-fix-error-code-path-in-autofs_fill_sb.patch b/queue-2.6.19/autofs-fix-error-code-path-in-autofs_fill_sb.patch new file mode 100644 index 00000000000..fb9fff282cc --- /dev/null +++ b/queue-2.6.19/autofs-fix-error-code-path-in-autofs_fill_sb.patch @@ -0,0 +1,137 @@ +From stable-bounces@linux.kernel.org Wed Dec 6 20:45:03 2006 +Message-Id: <200612070439.kB74dcGc030054@shell0.pdx.osdl.net> +To: torvalds@osdl.org +From: akpm@osdl.org +Date: Wed, 06 Dec 2006 20:39:38 -0800 +Cc: akpm@osdl.org, jkosina@suse.cz, stable@kernel.org, raven@themaw.net +Subject: autofs: fix error code path in autofs_fill_sb() + +From: Jiri Kosina + +When kernel is compiled with old version of autofs (CONFIG_AUTOFS_FS), and +new (observed at least with 5.x.x) automount deamon is started, kernel +correctly reports incompatible version of kernel and userland daemon, but +then screws things up instead of correct handling of the error: + + autofs: kernel does not match daemon version + ===================================== + [ BUG: bad unlock balance detected! ] + ------------------------------------- + automount/4199 is trying to release lock (&type->s_umount_key) at: + [] get_sb_nodev+0x76/0xa4 + but there are no more locks to release! + + other info that might help us debug this: + no locks held by automount/4199. + + stack backtrace: + [] dump_trace+0x68/0x1b2 + [] show_trace_log_lvl+0x18/0x2c + [] show_trace+0xf/0x11 + [] dump_stack+0x12/0x14 + [] print_unlock_inbalance_bug+0xe7/0xf3 + [] lock_release+0x8d/0x164 + [] up_write+0x14/0x27 + [] get_sb_nodev+0x76/0xa4 + [] vfs_kern_mount+0x83/0xf6 + [] do_kern_mount+0x2d/0x3e + [] do_mount+0x607/0x67a + [] sys_mount+0x72/0xa4 + [] sysenter_past_esp+0x5f/0x99 + DWARF2 unwinder stuck at sysenter_past_esp+0x5f/0x99 + Leftover inexact backtrace: + ======================= + +and then deadlock comes. + +The problem: autofs_fill_super() returns EINVAL to get_sb_nodev(), but +before that, it calls kill_anon_super() to destroy the superblock which +won't be needed. This is however way too soon to call kill_anon_super(), +because get_sb_nodev() has to perform its own cleanup of the superblock +first (deactivate_super(), etc.). The correct time to call +kill_anon_super() is in the autofs_kill_sb() callback, which is called by +deactivate_super() at proper time, when the superblock is ready to be +killed. + +I can see the same faulty codepath also in autofs4. This patch solves +issues in both filesystems in a same way - it postpones the +kill_anon_super() until the proper time is signalized by deactivate_super() +calling the kill_sb() callback. + +[raven@themaw.net: update comment] +Signed-off-by: Jiri Kosina +Acked-by: Ian Kent +Cc: +Signed-off-by: Ian Kent +Signed-off-by: Andrew Morton +Signed-off-by: Chris Wright +--- + + fs/autofs/inode.c | 7 ++++--- + fs/autofs4/inode.c | 7 ++++--- + 2 files changed, 8 insertions(+), 6 deletions(-) + +--- linux-2.6.19.orig/fs/autofs/inode.c ++++ linux-2.6.19/fs/autofs/inode.c +@@ -28,10 +28,11 @@ void autofs_kill_sb(struct super_block * + /* + * In the event of a failure in get_sb_nodev the superblock + * info is not present so nothing else has been setup, so +- * just exit when we are called from deactivate_super. ++ * just call kill_anon_super when we are called from ++ * deactivate_super. + */ + if (!sbi) +- return; ++ goto out_kill_sb; + + if ( !sbi->catatonic ) + autofs_catatonic_mode(sbi); /* Free wait queues, close pipe */ +@@ -44,6 +45,7 @@ void autofs_kill_sb(struct super_block * + + kfree(sb->s_fs_info); + ++out_kill_sb: + DPRINTK(("autofs: shutting down\n")); + kill_anon_super(sb); + } +@@ -209,7 +211,6 @@ fail_iput: + fail_free: + kfree(sbi); + s->s_fs_info = NULL; +- kill_anon_super(s); + fail_unlock: + return -EINVAL; + } +--- linux-2.6.19.orig/fs/autofs4/inode.c ++++ linux-2.6.19/fs/autofs4/inode.c +@@ -152,10 +152,11 @@ void autofs4_kill_sb(struct super_block + /* + * In the event of a failure in get_sb_nodev the superblock + * info is not present so nothing else has been setup, so +- * just exit when we are called from deactivate_super. ++ * just call kill_anon_super when we are called from ++ * deactivate_super. + */ + if (!sbi) +- return; ++ goto out_kill_sb; + + sb->s_fs_info = NULL; + +@@ -167,6 +168,7 @@ void autofs4_kill_sb(struct super_block + + kfree(sbi); + ++out_kill_sb: + DPRINTK("shutting down"); + kill_anon_super(sb); + } +@@ -426,7 +428,6 @@ fail_ino: + fail_free: + kfree(sbi); + s->s_fs_info = NULL; +- kill_anon_super(s); + fail_unlock: + return -EINVAL; + } diff --git a/queue-2.6.19/compat-skip-data-conversion-in-compat_sys_mount-when-data_page-is-null.patch b/queue-2.6.19/compat-skip-data-conversion-in-compat_sys_mount-when-data_page-is-null.patch new file mode 100644 index 00000000000..1159209bcbc --- /dev/null +++ b/queue-2.6.19/compat-skip-data-conversion-in-compat_sys_mount-when-data_page-is-null.patch @@ -0,0 +1,74 @@ +From stable-bounces@linux.kernel.org Wed Dec 6 20:37:02 2006 +Message-Id: <200612070431.kB74Vaup028758@shell0.pdx.osdl.net> +To: torvalds@osdl.org +From: akpm@osdl.org +Date: Wed, 06 Dec 2006 20:31:35 -0800 +Cc: akpm@osdl.org, amirkin@openvz.org, stable@kernel.org +Subject: compat: skip data conversion in compat_sys_mount when data_page is NULL + +From: Andrey Mirkin + +OpenVZ Linux kernel team has found a problem with mounting in compat mode. + +Simple command "mount -t smbfs ..." on Fedora Core 5 distro in 32-bit mode +leads to oops: + +Unable to handle kernel NULL pointer dereference at 0000000000000000 RIP: +[] compat_sys_mount+0xd6/0x290 +PGD 34d48067 PUD 34d03067 PMD 0 +Oops: 0000 [1] SMP +CPU: 0 +Modules linked in: iptable_nat simfs smbfs ip_nat ip_conntrack vzdquota +parport_pc lp parport 8021q bridge llc vznetdev vzmon nfs lockd sunrpc vzdev +iptable_filter af_packet xt_length ipt_ttl xt_tcpmss ipt_TCPMSS +iptable_mangle xt_limit ipt_tos ipt_REJECT ip_tables x_tables thermal +processor fan button battery asus_acpi ac uhci_hcd ehci_hcd usbcore i2c_i801 +i2c_core e100 mii floppy ide_cd cdrom +Pid: 14656, comm: mount +RIP: 0060:[] [] +compat_sys_mount+0xd6/0x290 +RSP: 0000:ffff810034d31f38 EFLAGS: 00010292 +RAX: 000000000000002c RBX: 0000000000000000 RCX: 0000000000000000 +RDX: ffff810034c86bc0 RSI: 0000000000000096 RDI: ffffffff8061fc90 +RBP: ffff810034d31f78 R08: 0000000000000000 R09: 000000000000000d +R10: ffff810034d31e58 R11: 0000000000000001 R12: ffff810039dc3000 +R13: 000000000805ea48 R14: 0000000000000000 R15: 00000000c0ed0000 +FS: 0000000000000000(0000) GS:ffffffff80749000(0033) knlGS:00000000b7d556b0 +CS: 0060 DS: 007b ES: 007b CR0: 000000008005003b +CR2: 0000000000000000 CR3: 0000000034d43000 CR4: 00000000000006e0 +Process mount (pid: 14656, veid=300, threadinfo ffff810034d30000, task +ffff810034c86bc0) +Stack: 0000000000000000 ffff810034dd0000 ffff810034e4a000 000000000805ea48 + 0000000000000000 0000000000000000 0000000000000000 0000000000000000 + 000000000805ea48 ffffffff8021e64e 0000000000000000 0000000000000000 +Call Trace: + [] ia32_sysret+0x0/0xa + +Code: 83 3b 06 0f 85 41 01 00 00 0f b7 43 0c 89 43 14 0f b7 43 0a +RIP [] compat_sys_mount+0xd6/0x290 + RSP +CR2: 0000000000000000 + +The problem is that data_page pointer can be NULL, so we should skip data +conversion in this case. + +Signed-off-by: Andrey Mirkin +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Chris Wright +--- + + fs/compat.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.19.orig/fs/compat.c ++++ linux-2.6.19/fs/compat.c +@@ -869,7 +869,7 @@ asmlinkage long compat_sys_mount(char __ + + retval = -EINVAL; + +- if (type_page) { ++ if (type_page && data_page) { + if (!strcmp((char *)type_page, SMBFS_NAME)) { + do_smb_super_data_conv((void *)data_page); + } else if (!strcmp((char *)type_page, NCPFS_NAME)) { diff --git a/queue-2.6.19/drm-sis-linkage-fix.patch b/queue-2.6.19/drm-sis-linkage-fix.patch new file mode 100644 index 00000000000..642785799ee --- /dev/null +++ b/queue-2.6.19/drm-sis-linkage-fix.patch @@ -0,0 +1,34 @@ +From stable-bounces@linux.kernel.org Wed Dec 6 20:37:09 2006 +Message-Id: <200612070431.kB74VX7u028754@shell0.pdx.osdl.net> +To: torvalds@osdl.org +From: akpm@osdl.org +Date: Wed, 06 Dec 2006 20:31:33 -0800 +Cc: akpm@osdl.org, airlied@linux.ie, stable@kernel.org, daniel-silveira@gee.inatel.br +Subject: drm-sis linkage fix + +From: Andrew Morton + +Fix http://bugzilla.kernel.org/show_bug.cgi?id=7606 + +WARNING: "drm_sman_set_manager" [drivers/char/drm/sis.ko] undefined! + +Cc: +Cc: Dave Airlie +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Chris Wright +--- + + drivers/char/drm/drm_sman.c | 1 + + 1 file changed, 1 insertion(+) + +--- linux-2.6.19.orig/drivers/char/drm/drm_sman.c ++++ linux-2.6.19/drivers/char/drm/drm_sman.c +@@ -162,6 +162,7 @@ drm_sman_set_manager(drm_sman_t * sman, + + return 0; + } ++EXPORT_SYMBOL(drm_sman_set_manager); + + static drm_owner_item_t *drm_sman_get_owner_item(drm_sman_t * sman, + unsigned long owner) diff --git a/queue-2.6.19/forcedeth-disable-intx-when-enabling-msi-in-forcedeth.patch b/queue-2.6.19/forcedeth-disable-intx-when-enabling-msi-in-forcedeth.patch new file mode 100644 index 00000000000..312ce15f63f --- /dev/null +++ b/queue-2.6.19/forcedeth-disable-intx-when-enabling-msi-in-forcedeth.patch @@ -0,0 +1,60 @@ +From stable-bounces@linux.kernel.org Fri Dec 8 09:03:45 2006 +Date: Fri, 8 Dec 2006 11:58:15 -0500 (EST) +From: Daniel Barkalow +To: stable@kernel.org +Message-ID: +Cc: Linus Torvalds , Greg KH , Jeff Garzik +Subject: forcedeth: Disable INTx when enabling MSI in forcedeth + +At least some nforce cards continue to send legacy interrupts when MSI +is enabled, and these interrupts are treated as unhandled by the +kernel. This patch disables legacy interrupts explicitly when enabling +MSI mode. + +The correct fix is to change the MSI infrastructure to disable legacy +interrupts when enabling MSI, but this is potentially risky if the +device isn't PCI-2.3 or is quirky, so the correct fix is going into +mainline, while patches like this one go into -stable. + +Legend has it that it is most correct to disable legacy interrupts +before enabling MSI, but the mainline patch does it in the other +order, and this patch is "obviously" the same as mainline. + +Signed-off-by: Daniel Barkalow +Cc: Jeff Garzik +Cc: Greg KH +Signed-off-by: Chris Wright +--- + +The general patch got into mainline last night, and this patch is clearly +the same as that one, limited to the case of forcedeth (the pci_intx() +calls are lifted from {enable,disable}_msi_mode to all of the indirect +callers in forcedeth). + + drivers/net/forcedeth.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- linux-2.6.19.orig/drivers/net/forcedeth.c ++++ linux-2.6.19/drivers/net/forcedeth.c +@@ -2815,11 +2815,13 @@ static int nv_request_irq(struct net_dev + } + if (ret != 0 && np->msi_flags & NV_MSI_CAPABLE) { + if ((ret = pci_enable_msi(np->pci_dev)) == 0) { ++ pci_intx(np->pci_dev, 0); + np->msi_flags |= NV_MSI_ENABLED; + if ((!intr_test && request_irq(np->pci_dev->irq, &nv_nic_irq, IRQF_SHARED, dev->name, dev) != 0) || + (intr_test && request_irq(np->pci_dev->irq, &nv_nic_irq_test, IRQF_SHARED, dev->name, dev) != 0)) { + printk(KERN_INFO "forcedeth: request_irq failed %d\n", ret); + pci_disable_msi(np->pci_dev); ++ pci_intx(np->pci_dev, 1); + np->msi_flags &= ~NV_MSI_ENABLED; + goto out_err; + } +@@ -2862,6 +2864,7 @@ static void nv_free_irq(struct net_devic + free_irq(np->pci_dev->irq, dev); + if (np->msi_flags & NV_MSI_ENABLED) { + pci_disable_msi(np->pci_dev); ++ pci_intx(np->pci_dev, 1); + np->msi_flags &= ~NV_MSI_ENABLED; + } + } diff --git a/queue-2.6.19/irda-incorrect-ttp-header-reservation.patch b/queue-2.6.19/irda-incorrect-ttp-header-reservation.patch new file mode 100644 index 00000000000..10f3974bd04 --- /dev/null +++ b/queue-2.6.19/irda-incorrect-ttp-header-reservation.patch @@ -0,0 +1,42 @@ +From stable-bounces@linux.kernel.org Thu Dec 7 15:37:55 2006 +Date: Fri, 8 Dec 2006 01:32:22 +0200 +From: Samuel Ortiz +To: stable@kernel.org +Message-ID: <20061207233222.GA4549@sortiz.org> +Cc: "David S. Miller" +Subject: IrDA: Incorrect TTP header reservation + +From: Jeet Chaudhuri + +We must reserve SAR + MAX_HEADER bytes for IrLMP to fit in. +This fixes an oops reported (and fixed) by Jeet Chaudhuri, when max_sdu_size +is greater than 0. + +Signed-off-by: Samuel Ortiz +Signed-off-by: David S. Miller +Signed-off-by: Chris Wright + +--- + net/irda/irttp.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- linux-2.6.19.orig/net/irda/irttp.c ++++ linux-2.6.19/net/irda/irttp.c +@@ -1099,7 +1099,7 @@ int irttp_connect_request(struct tsap_cb + return -ENOMEM; + + /* Reserve space for MUX_CONTROL and LAP header */ +- skb_reserve(tx_skb, TTP_MAX_HEADER); ++ skb_reserve(tx_skb, TTP_MAX_HEADER + TTP_SAR_HEADER); + } else { + tx_skb = userdata; + /* +@@ -1348,7 +1348,7 @@ int irttp_connect_response(struct tsap_c + return -ENOMEM; + + /* Reserve space for MUX_CONTROL and LAP header */ +- skb_reserve(tx_skb, TTP_MAX_HEADER); ++ skb_reserve(tx_skb, TTP_MAX_HEADER + TTP_SAR_HEADER); + } else { + tx_skb = userdata; + /* diff --git a/queue-2.6.19/m32r-make-userspace-headers-platform-independent.patch b/queue-2.6.19/m32r-make-userspace-headers-platform-independent.patch new file mode 100644 index 00000000000..192c96ac68b --- /dev/null +++ b/queue-2.6.19/m32r-make-userspace-headers-platform-independent.patch @@ -0,0 +1,187 @@ +From stable-bounces@linux.kernel.org Fri Dec 8 02:41:46 2006 +Message-Id: <200612081035.kB8AZsUb016365@shell0.pdx.osdl.net> +To: torvalds@osdl.org +From: akpm@osdl.org +Date: Fri, 08 Dec 2006 02:35:54 -0800 +Cc: akpm@osdl.org, takata@linux-m32r.org, stable@kernel.org +Subject: m32r: make userspace headers platform-independent + +From: Hirokazu Takata + +The m32r kernel 2.6.18-rc1 or after cause build errors of "unknown isa +configuration" for userspace application programs, such as glibc, gdb, etc. + +This is because the recent kernel do not include linux/config.h not to expose +kernel headers for userspace. + +To fix the above compile errors, this patch fixes two headers ptrace.h and +sigcontext.h for m32r and makes them platform-independent. + +Signed-off-by: Hirokazu Takata +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Chris Wright +--- + + arch/m32r/kernel/entry.S | 65 ++++++++++++++++++------------------------ + include/asm-m32r/ptrace.h | 28 ++---------------- + include/asm-m32r/sigcontext.h | 13 +------- + 3 files changed, 35 insertions(+), 71 deletions(-) + +--- linux-2.6.19.orig/arch/m32r/kernel/entry.S ++++ linux-2.6.19/arch/m32r/kernel/entry.S +@@ -23,35 +23,35 @@ + * updated in fork.c:copy_thread, signal.c:do_signal, + * ptrace.c and ptrace.h + * +- * M32Rx/M32R2 M32R +- * @(sp) - r4 ditto +- * @(0x04,sp) - r5 ditto +- * @(0x08,sp) - r6 ditto +- * @(0x0c,sp) - *pt_regs ditto +- * @(0x10,sp) - r0 ditto +- * @(0x14,sp) - r1 ditto +- * @(0x18,sp) - r2 ditto +- * @(0x1c,sp) - r3 ditto +- * @(0x20,sp) - r7 ditto +- * @(0x24,sp) - r8 ditto +- * @(0x28,sp) - r9 ditto +- * @(0x2c,sp) - r10 ditto +- * @(0x30,sp) - r11 ditto +- * @(0x34,sp) - r12 ditto +- * @(0x38,sp) - syscall_nr ditto +- * @(0x3c,sp) - acc0h @(0x3c,sp) - acch +- * @(0x40,sp) - acc0l @(0x40,sp) - accl +- * @(0x44,sp) - acc1h @(0x44,sp) - dummy_acc1h +- * @(0x48,sp) - acc1l @(0x48,sp) - dummy_acc1l +- * @(0x4c,sp) - psw ditto +- * @(0x50,sp) - bpc ditto +- * @(0x54,sp) - bbpsw ditto +- * @(0x58,sp) - bbpc ditto +- * @(0x5c,sp) - spu (cr3) ditto +- * @(0x60,sp) - fp (r13) ditto +- * @(0x64,sp) - lr (r14) ditto +- * @(0x68,sp) - spi (cr2) ditto +- * @(0x6c,sp) - orig_r0 ditto ++ * M32R/M32Rx/M32R2 ++ * @(sp) - r4 ++ * @(0x04,sp) - r5 ++ * @(0x08,sp) - r6 ++ * @(0x0c,sp) - *pt_regs ++ * @(0x10,sp) - r0 ++ * @(0x14,sp) - r1 ++ * @(0x18,sp) - r2 ++ * @(0x1c,sp) - r3 ++ * @(0x20,sp) - r7 ++ * @(0x24,sp) - r8 ++ * @(0x28,sp) - r9 ++ * @(0x2c,sp) - r10 ++ * @(0x30,sp) - r11 ++ * @(0x34,sp) - r12 ++ * @(0x38,sp) - syscall_nr ++ * @(0x3c,sp) - acc0h ++ * @(0x40,sp) - acc0l ++ * @(0x44,sp) - acc1h ; ISA_DSP_LEVEL2 only ++ * @(0x48,sp) - acc1l ; ISA_DSP_LEVEL2 only ++ * @(0x4c,sp) - psw ++ * @(0x50,sp) - bpc ++ * @(0x54,sp) - bbpsw ++ * @(0x58,sp) - bbpc ++ * @(0x5c,sp) - spu (cr3) ++ * @(0x60,sp) - fp (r13) ++ * @(0x64,sp) - lr (r14) ++ * @(0x68,sp) - spi (cr2) ++ * @(0x6c,sp) - orig_r0 + */ + + #include +@@ -95,17 +95,10 @@ + #define R11(reg) @(0x30,reg) + #define R12(reg) @(0x34,reg) + #define SYSCALL_NR(reg) @(0x38,reg) +-#if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2) + #define ACC0H(reg) @(0x3C,reg) + #define ACC0L(reg) @(0x40,reg) + #define ACC1H(reg) @(0x44,reg) + #define ACC1L(reg) @(0x48,reg) +-#elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R) +-#define ACCH(reg) @(0x3C,reg) +-#define ACCL(reg) @(0x40,reg) +-#else +-#error unknown isa configuration +-#endif + #define PSW(reg) @(0x4C,reg) + #define BPC(reg) @(0x50,reg) + #define BBPSW(reg) @(0x54,reg) +--- linux-2.6.19.orig/include/asm-m32r/ptrace.h ++++ linux-2.6.19/include/asm-m32r/ptrace.h +@@ -33,21 +33,10 @@ + #define PT_R15 PT_SP + + /* processor status and miscellaneous context registers. */ +-#if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2) + #define PT_ACC0H 15 + #define PT_ACC0L 16 +-#define PT_ACC1H 17 +-#define PT_ACC1L 18 +-#define PT_ACCH PT_ACC0H +-#define PT_ACCL PT_ACC0L +-#elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R) +-#define PT_ACCH 15 +-#define PT_ACCL 16 +-#define PT_DUMMY_ACC1H 17 +-#define PT_DUMMY_ACC1L 18 +-#else +-#error unknown isa conifiguration +-#endif ++#define PT_ACC1H 17 /* ISA_DSP_LEVEL2 only */ ++#define PT_ACC1L 18 /* ISA_DSP_LEVEL2 only */ + #define PT_PSW 19 + #define PT_BPC 20 + #define PT_BBPSW 21 +@@ -103,19 +92,10 @@ struct pt_regs { + long syscall_nr; + + /* Saved main processor status and miscellaneous context registers. */ +-#if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2) + unsigned long acc0h; + unsigned long acc0l; +- unsigned long acc1h; +- unsigned long acc1l; +-#elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R) +- unsigned long acch; +- unsigned long accl; +- unsigned long dummy_acc1h; +- unsigned long dummy_acc1l; +-#else +-#error unknown isa configuration +-#endif ++ unsigned long acc1h; /* ISA_DSP_LEVEL2 only */ ++ unsigned long acc1l; /* ISA_DSP_LEVEL2 only */ + unsigned long psw; + unsigned long bpc; /* saved PC for TRAP syscalls */ + unsigned long bbpsw; +--- linux-2.6.19.orig/include/asm-m32r/sigcontext.h ++++ linux-2.6.19/include/asm-m32r/sigcontext.h +@@ -23,19 +23,10 @@ struct sigcontext { + unsigned long sc_r12; + + /* Saved main processor status and miscellaneous context registers. */ +-#if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2) + unsigned long sc_acc0h; + unsigned long sc_acc0l; +- unsigned long sc_acc1h; +- unsigned long sc_acc1l; +-#elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R) +- unsigned long sc_acch; +- unsigned long sc_accl; +- unsigned long sc_dummy_acc1h; +- unsigned long sc_dummy_acc1l; +-#else +-#error unknown isa configuration +-#endif ++ unsigned long sc_acc1h; /* ISA_DSP_LEVEL2 only */ ++ unsigned long sc_acc1l; /* ISA_DSP_LEVEL2 only */ + unsigned long sc_psw; + unsigned long sc_bpc; /* saved PC for TRAP syscalls */ + unsigned long sc_bbpsw; diff --git a/queue-2.6.19/pm-fix-swsusp-debug-mode-testproc.patch b/queue-2.6.19/pm-fix-swsusp-debug-mode-testproc.patch new file mode 100644 index 00000000000..063d6d23eec --- /dev/null +++ b/queue-2.6.19/pm-fix-swsusp-debug-mode-testproc.patch @@ -0,0 +1,34 @@ +From stable-bounces@linux.kernel.org Wed Dec 6 20:40:11 2006 +Message-Id: <200612070434.kB74YlSL029177@shell0.pdx.osdl.net> +To: torvalds@osdl.org +From: akpm@osdl.org +Date: Wed, 06 Dec 2006 20:34:47 -0800 +Cc: akpm@osdl.org, rjw@sisk.pl, stable@kernel.org, pavel@ucw.cz +Subject: PM: Fix swsusp debug mode testproc + +From: "Rafael J. Wysocki" + +The 'testproc' swsusp debug mode thaws tasks twice in a row, which is _very_ +confusing. Fix that. + +Signed-off-by: Rafael J. Wysocki +Acked-by: Pavel Machek +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Chris Wright +--- + + kernel/power/disk.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.19.orig/kernel/power/disk.c ++++ linux-2.6.19/kernel/power/disk.c +@@ -127,7 +127,7 @@ int pm_suspend_disk(void) + return error; + + if (pm_disk_mode == PM_DISK_TESTPROC) +- goto Thaw; ++ return 0; + + suspend_console(); + error = device_suspend(PMSG_FREEZE); diff --git a/queue-2.6.19/restore-api-compatibility-of-address-and-neighbour-bits.patch b/queue-2.6.19/restore-api-compatibility-of-address-and-neighbour-bits.patch new file mode 100644 index 00000000000..a3858e62d50 --- /dev/null +++ b/queue-2.6.19/restore-api-compatibility-of-address-and-neighbour-bits.patch @@ -0,0 +1,26 @@ +From 283e36529e3b1308fc46b6d28bcf63d45ee061c3 Mon Sep 17 00:00:00 2001 +From: Thomas Graf +Date: Thu, 7 Dec 2006 23:49:45 -0800 +Subject: NETLINK: Restore API compatibility of address and neighbour bits + +Restore API compatibility due to bits moved from rtnetlink.h to +separate headers. + +Signed-off-by: Thomas Graf +Signed-off-by: David S. Miller +Signed-off-by: Chris Wright +--- + include/linux/rtnetlink.h | 2 ++ + 1 file changed, 2 insertions(+) + +--- linux-2.6.19.orig/include/linux/rtnetlink.h ++++ linux-2.6.19/include/linux/rtnetlink.h +@@ -3,6 +3,8 @@ + + #include + #include ++#include ++#include + + /**** + * Routing/neighbour discovery messages. diff --git a/queue-2.6.19/series b/queue-2.6.19/series index 8ce1f9ea299..73b63b46f3f 100644 --- a/queue-2.6.19/series +++ b/queue-2.6.19/series @@ -19,3 +19,14 @@ tokenring-remote-memory-corruptor-in-ibmtr.c.patch xfrm-use-output-device-disable_xfrm-for-forwarded-packets.patch usb-fix-oops-in-phidgetservo.patch ipsec-fix-inetpeer-leak-in-ipv4-xfrm-dst-entries.patch +irda-incorrect-ttp-header-reservation.patch +restore-api-compatibility-of-address-and-neighbour-bits.patch +add-bottom_half.h.patch +drm-sis-linkage-fix.patch +compat-skip-data-conversion-in-compat_sys_mount-when-data_page-is-null.patch +pm-fix-swsusp-debug-mode-testproc.patch +autofs-fix-error-code-path-in-autofs_fill_sb.patch +softirq-remove-bug_ons-which-can-incorrectly-trigger.patch +m32r-make-userspace-headers-platform-independent.patch +x86_64-fix-boot-hang-due-to-nmi-watchdog-init-code.patch +forcedeth-disable-intx-when-enabling-msi-in-forcedeth.patch diff --git a/queue-2.6.19/softirq-remove-bug_ons-which-can-incorrectly-trigger.patch b/queue-2.6.19/softirq-remove-bug_ons-which-can-incorrectly-trigger.patch new file mode 100644 index 00000000000..28f87ea71a1 --- /dev/null +++ b/queue-2.6.19/softirq-remove-bug_ons-which-can-incorrectly-trigger.patch @@ -0,0 +1,49 @@ +From stable-bounces@linux.kernel.org Wed Dec 6 20:45:28 2006 +Message-Id: <200612070439.kB74ddJq030058@shell0.pdx.osdl.net> +To: torvalds@osdl.org +From: akpm@osdl.org +Date: Wed, 06 Dec 2006 20:39:39 -0800 +Cc: akpm@osdl.org, zach@vmware.com, mingo@elte.hu, stable@kernel.org, caglar@pardus.org.tr +Subject: softirq: remove BUG_ONs which can incorrectly trigger + +From: Zachary Amsden + +It is possible to have tasklets get scheduled before softirqd has had a chance +to spawn on all CPUs. This is totally harmless; after success during action +CPU_UP_PREPARE, action CPU_ONLINE will be called, which immediately wakes +softirqd on the appropriate CPU to process the already pending tasklets. So +there is no danger of having a missed wakeup for any tasklets that were +already pending. + +In particular, i386 is affected by this during startup, and is visible when +using a very large initrd; during the time it takes for the initrd to be +decompressed, a timer IRQ can come in and schedule RCU callbacks. It is also +possible that resending of a hardware IRQ via a softirq triggers the same bug. + +Because of different timing conditions, this shows up in all emulators and +virtual machines tested, including Xen, VMware, Virtual PC, and Qemu. It is +also possible to trigger on native hardware with a large enough initrd, +although I don't have a reliable case demonstrating that. + +Signed-off-by: Zachary Amsden +Cc: +Cc: Ingo Molnar +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Chris Wright +--- + + kernel/softirq.c | 2 -- + 1 file changed, 2 deletions(-) + +--- linux-2.6.19.orig/kernel/softirq.c ++++ linux-2.6.19/kernel/softirq.c +@@ -574,8 +574,6 @@ static int __cpuinit cpu_callback(struct + + switch (action) { + case CPU_UP_PREPARE: +- BUG_ON(per_cpu(tasklet_vec, hotcpu).list); +- BUG_ON(per_cpu(tasklet_hi_vec, hotcpu).list); + p = kthread_create(ksoftirqd, hcpu, "ksoftirqd/%d", hotcpu); + if (IS_ERR(p)) { + printk("ksoftirqd for %i failed\n", hotcpu); diff --git a/queue-2.6.19/x86_64-fix-boot-hang-due-to-nmi-watchdog-init-code.patch b/queue-2.6.19/x86_64-fix-boot-hang-due-to-nmi-watchdog-init-code.patch new file mode 100644 index 00000000000..3661d6db89e --- /dev/null +++ b/queue-2.6.19/x86_64-fix-boot-hang-due-to-nmi-watchdog-init-code.patch @@ -0,0 +1,58 @@ +From stable-bounces@linux.kernel.org Fri Dec 8 03:26:13 2006 +Message-Id: <200612081120.kB8BKZqK019065@shell0.pdx.osdl.net> +To: ak@muc.de +From: akpm@osdl.org +Date: Fri, 08 Dec 2006 03:20:34 -0800 +Cc: akpm@osdl.org, shai@scalex86.org, stable@kernel.org, kiran@scalex86.org +Subject: x86_64: fix boot hang due to nmi watchdog init code + +From: Ravikiran G Thirumalai + +2.6.19 stopped booting (or booted based on build/config) on our x86_64 +systems due to a bug introduced in 2.6.19. check_nmi_watchdog schedules an +IPI on all cpus to busy wait on a flag, but fails to set the busywait flag +if NMI functionality is disabled. + +This causes the secondary cpus to spin in an endless loop, causing the +kernel bootup to hang. + +Depending upon the build, the busywait flag got overwritten (stack +variable) and caused the kernel to bootup on certain builds. Following +patch fixes the bug by setting the busywait flag before returning from +check_nmi_watchdog. + +I guess using a stack variable is not good here as the calling function +could potentially return while the busy wait loop is still spinning on the +flag. I would think this is a good candidate for 2.6.19 stable as well. + +[akpm@osdl.org: cleanups] +Signed-off-by: Ravikiran Thirumalai +Signed-off-by: Shai Fultheim +Cc: Andi Kleen +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Chris Wright +--- + + arch/x86_64/kernel/nmi.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- linux-2.6.19.orig/arch/x86_64/kernel/nmi.c ++++ linux-2.6.19/arch/x86_64/kernel/nmi.c +@@ -212,7 +212,7 @@ static __init void nmi_cpu_busy(void *da + + int __init check_nmi_watchdog (void) + { +- volatile int endflag = 0; ++ static int __initdata endflag; + int *counts; + int cpu; + +@@ -253,6 +253,7 @@ int __init check_nmi_watchdog (void) + if (!atomic_read(&nmi_active)) { + kfree(counts); + atomic_set(&nmi_active, -1); ++ endflag = 1; + return -1; + } + endflag = 1; -- 2.47.3