From: Chris Wright Date: Fri, 15 Dec 2006 00:48:16 +0000 (-0800) Subject: few more 2.6.18 patches X-Git-Tag: v2.6.18.6~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cd269a9ddd398fd082273c43194428f226d8c618;p=thirdparty%2Fkernel%2Fstable-queue.git few more 2.6.18 patches --- diff --git a/queue-2.6.18/forcedeth-disable-intx-when-enabling-msi-in-forcedeth.patch b/queue-2.6.18/forcedeth-disable-intx-when-enabling-msi-in-forcedeth.patch new file mode 100644 index 00000000000..ad11dc0fe80 --- /dev/null +++ b/queue-2.6.18/forcedeth-disable-intx-when-enabling-msi-in-forcedeth.patch @@ -0,0 +1,58 @@ +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: torvalds@osdl.org, gregkh@suse.de, jeff@garzik.org +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 +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.18.5.orig/drivers/net/forcedeth.c ++++ linux-2.6.18.5/drivers/net/forcedeth.c +@@ -2692,11 +2692,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; + } +@@ -2739,6 +2741,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.18/m32r-make-userspace-headers-platform-independent.patch b/queue-2.6.18/m32r-make-userspace-headers-platform-independent.patch new file mode 100644 index 00000000000..0b5ccc2f858 --- /dev/null +++ b/queue-2.6.18/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.18.5.orig/arch/m32r/kernel/entry.S ++++ linux-2.6.18.5/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.18.5.orig/include/asm-m32r/ptrace.h ++++ linux-2.6.18.5/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.18.5.orig/include/asm-m32r/sigcontext.h ++++ linux-2.6.18.5/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.18/series b/queue-2.6.18/series index 9928fc5f33d..243d03f6bd1 100644 --- a/queue-2.6.18/series +++ b/queue-2.6.18/series @@ -17,3 +17,7 @@ dvb-lgdt330x-fix-signal-lock-status-detection-bug.patch v4l-fix-broken-tuner_lg_ntsc_tape-radio-support.patch ieee1394-ohci1394-add-ppc_pmac-platform-code-to-driver-probe.patch arm-add-sys_-at-syscalls.patch +skip-data-conversion-in-compat_sys_mount-when-data_page-is-null.patch +softirq-remove-bug_ons-which-can-incorrectly-trigger.patch +m32r-make-userspace-headers-platform-independent.patch +forcedeth-disable-intx-when-enabling-msi-in-forcedeth.patch diff --git a/queue-2.6.18/skip-data-conversion-in-compat_sys_mount-when-data_page-is-null.patch b/queue-2.6.18/skip-data-conversion-in-compat_sys_mount-when-data_page-is-null.patch new file mode 100644 index 00000000000..4b56864acfc --- /dev/null +++ b/queue-2.6.18/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: 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.18.5.orig/fs/compat.c ++++ linux-2.6.18.5/fs/compat.c +@@ -873,7 +873,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.18/softirq-remove-bug_ons-which-can-incorrectly-trigger.patch b/queue-2.6.18/softirq-remove-bug_ons-which-can-incorrectly-trigger.patch new file mode 100644 index 00000000000..a8e974eba20 --- /dev/null +++ b/queue-2.6.18/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.18.5.orig/kernel/softirq.c ++++ linux-2.6.18.5/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);