From: Greg Kroah-Hartman Date: Mon, 28 Apr 2008 20:54:07 +0000 (-0700) Subject: more .25 patches X-Git-Tag: v2.6.25.1~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3bdfe5593edab22ffa9b48b2685797e0e28466b6;p=thirdparty%2Fkernel%2Fstable-queue.git more .25 patches --- diff --git a/queue-2.6.25/alpha-unbreak-osf-1-binaries.patch b/queue-2.6.25/alpha-unbreak-osf-1-binaries.patch new file mode 100644 index 00000000000..39db2528037 --- /dev/null +++ b/queue-2.6.25/alpha-unbreak-osf-1-binaries.patch @@ -0,0 +1,40 @@ +From 2444e56b0c08e6f3e3877583841a1213e3263d98 Mon Sep 17 00:00:00 2001 +From: Ivan Kokshaysky +Date: Thu, 24 Apr 2008 16:54:50 +0400 +Subject: alpha: unbreak OSF/1 (a.out) binaries + +From: Ivan Kokshaysky + +commit 2444e56b0c08e6f3e3877583841a1213e3263d98 upstream + + +OSF/1 brk(2) was broken by following one-liner in sys_brk() +(commit 4cc6028d4040f95cdb590a87db478b42b8be0508): + +- if (brk < mm->end_code) ++ if (brk < mm->start_brk) + goto out; + +The problem is that osf_set_program_attributes() +does update mm->end_code, but not mm->start_brk, +which still contains inappropriate value left from +binary loader, so brk() always fails. + +Signed-off-by: Ivan Kokshaysky +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + arch/alpha/kernel/osf_sys.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/alpha/kernel/osf_sys.c ++++ b/arch/alpha/kernel/osf_sys.c +@@ -75,6 +75,7 @@ osf_set_program_attributes(unsigned long + lock_kernel(); + mm = current->mm; + mm->end_code = bss_start + bss_len; ++ mm->start_brk = bss_start + bss_len; + mm->brk = bss_start + bss_len; + #if 0 + printk("set_program_attributes(%lx %lx %lx %lx)\n", diff --git a/queue-2.6.25/rdma-nes-fix-adapter-reset-after-pxe-boot.patch b/queue-2.6.25/rdma-nes-fix-adapter-reset-after-pxe-boot.patch new file mode 100644 index 00000000000..3df693f8390 --- /dev/null +++ b/queue-2.6.25/rdma-nes-fix-adapter-reset-after-pxe-boot.patch @@ -0,0 +1,81 @@ +From jejb@kernel.org Mon Apr 28 13:50:10 2008 +From: Chien Tung +Date: Sun, 27 Apr 2008 18:35:11 GMT +Subject: RDMA/nes: Fix adapter reset after PXE boot +To: jejb@kernel.org, stable@kernel.org +Message-ID: <200804271835.m3RIZBh0002982@hera.kernel.org> + +From: Chien Tung + +commit: bc5698f3ecc9587e1edb343a2878f8d228c49e0e upstream + +After PXE boot, the iw_nes driver does a full reset to ensure the card +is in a clean state. However, it doesn't wait for firmware to +complete its work before issuing a port reset to enable the ports, +which leads to problems bringing up the ports. + +The solution is to wait for firmware to complete its work before +proceeding with port reset. + +This bug was flagged by Roland Dreier . + +Signed-off-by: Chien Tung +Signed-off-by: Roland Dreier +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/infiniband/hw/nes/nes_cm.c | 6 ++++-- + drivers/infiniband/hw/nes/nes_hw.c | 20 +++++++++----------- + 2 files changed, 13 insertions(+), 13 deletions(-) + +--- a/drivers/infiniband/hw/nes/nes_cm.c ++++ b/drivers/infiniband/hw/nes/nes_cm.c +@@ -1834,8 +1834,10 @@ int mini_cm_recv_pkt(struct nes_cm_core + nfo.rem_addr = ntohl(iph->saddr); + nfo.rem_port = ntohs(tcph->source); + +- nes_debug(NES_DBG_CM, "Received packet: dest=0x%08X:0x%04X src=0x%08X:0x%04X\n", +- iph->daddr, tcph->dest, iph->saddr, tcph->source); ++ nes_debug(NES_DBG_CM, "Received packet: dest=" NIPQUAD_FMT ++ ":0x%04X src=" NIPQUAD_FMT ":0x%04X\n", ++ NIPQUAD(iph->daddr), tcph->dest, ++ NIPQUAD(iph->saddr), tcph->source); + + /* note: this call is going to increment cm_node ref count */ + cm_node = find_node(cm_core, +--- a/drivers/infiniband/hw/nes/nes_hw.c ++++ b/drivers/infiniband/hw/nes/nes_hw.c +@@ -625,6 +625,15 @@ unsigned int nes_reset_adapter_ne020(str + nes_debug(NES_DBG_INIT, "Did not see full soft reset done.\n"); + return 0; + } ++ ++ i = 0; ++ while ((nes_read_indexed(nesdev, NES_IDX_INT_CPU_STATUS) != 0x80) && i++ < 10000) ++ mdelay(1); ++ if (i >= 10000) { ++ printk(KERN_ERR PFX "Internal CPU not ready, status = %02X\n", ++ nes_read_indexed(nesdev, NES_IDX_INT_CPU_STATUS)); ++ return 0; ++ } + } + + /* port reset */ +@@ -673,17 +682,6 @@ unsigned int nes_reset_adapter_ne020(str + } + } + +- +- +- i = 0; +- while ((nes_read_indexed(nesdev, NES_IDX_INT_CPU_STATUS) != 0x80) && i++ < 10000) +- mdelay(1); +- if (i >= 10000) { +- printk(KERN_ERR PFX "Internal CPU not ready, status = %02X\n", +- nes_read_indexed(nesdev, NES_IDX_INT_CPU_STATUS)); +- return 0; +- } +- + return port_count; + } + diff --git a/queue-2.6.25/scsi-qla2xxx-correct-regression-in-relogin-code.patch b/queue-2.6.25/scsi-qla2xxx-correct-regression-in-relogin-code.patch new file mode 100644 index 00000000000..504b1534000 --- /dev/null +++ b/queue-2.6.25/scsi-qla2xxx-correct-regression-in-relogin-code.patch @@ -0,0 +1,38 @@ +From jejb@kernel.org Mon Apr 28 13:50:50 2008 +From: Andrew Vasquez +Date: Sun, 27 Apr 2008 18:35:08 GMT +Subject: SCSI: qla2xxx: Correct regression in relogin code. +To: jejb@kernel.org, stable@kernel.org +Message-ID: <200804271835.m3RIZ8xe002732@hera.kernel.org> + + +From: Andrew Vasquez + +commit: 666301e673e192c87a40e07a8357d6996b57b70f upstream + + +Commit 63a8651f2548c6bb5132c0b4e7dad4f57a9274db ([SCSI] qla2xxx: +Correct infinite-login-retry issue.) introduced a small +regression where a successful relogin would result in an fcport's +loop_id to be incorrectly reset to FC_NO_LOOP_ID. Only clear-out +loopid, if retries have been 'truly' exhausted. + +Signed-off-by: Andrew Vasquez +Signed-off-by: James Bottomley +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/scsi/qla2xxx/qla_os.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/scsi/qla2xxx/qla_os.c ++++ b/drivers/scsi/qla2xxx/qla_os.c +@@ -2357,7 +2357,7 @@ qla2x00_do_dpc(void *data) + } else { + fcport->login_retry = 0; + } +- if (fcport->login_retry == 0) ++ if (fcport->login_retry == 0 && status != QLA_SUCCESS) + fcport->loop_id = FC_NO_LOOP_ID; + } + if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) diff --git a/queue-2.6.25/series b/queue-2.6.25/series index cd4ee1719eb..770b7b3af64 100644 --- a/queue-2.6.25/series +++ b/queue-2.6.25/series @@ -30,3 +30,7 @@ rtc-pcf8583-build-fix.patch dz-test-after-postfix-decrement-fails-in-dz_console_putchar.patch mm-fix-possible-off-by-one-in-walk_pte_range.patch hrtimer-timeout-too-long-when-using-hrtimer_cb_softirq.patch +rdma-nes-fix-adapter-reset-after-pxe-boot.patch +scsi-qla2xxx-correct-regression-in-relogin-code.patch +alpha-unbreak-osf-1-binaries.patch +x86-fix-32-bit-x86-msi-x-allocation-leakage.patch diff --git a/queue-2.6.25/x86-fix-32-bit-x86-msi-x-allocation-leakage.patch b/queue-2.6.25/x86-fix-32-bit-x86-msi-x-allocation-leakage.patch new file mode 100644 index 00000000000..5cf5e016e1d --- /dev/null +++ b/queue-2.6.25/x86-fix-32-bit-x86-msi-x-allocation-leakage.patch @@ -0,0 +1,41 @@ +From peter.p.waskiewicz.jr@intel.com Mon Apr 28 13:52:54 2008 +From: PJ Waskiewicz +Date: Mon, 28 Apr 2008 11:56:22 -0700 +Subject: x86: Fix 32-bit x86 MSI-X allocation leakage +To: stable@kernel.org, linux-kernel@vger.kernel.org +Cc: netdev@vger.kernel.org +Message-ID: <20080428185622.11638.29287.stgit@scrappy.jf.intel.com> + +From: PJ Waskiewicz + +commit 9d9ad4b51d2b29b5bbeb4011f5e76f7538119cf9 upstream + +This bug was introduced in the 2.6.24 i386/x86_64 tree merge, where +MSI-X vector allocation will eventually fail. The cause is the new +bit array tracking used vectors is not getting cleared properly on +IRQ destruction on the 32-bit APIC code. + +This can be seen easily using the ixgbe 10 GbE driver on multi-core +systems by simply loading and unloading the driver a few times. +Depending on the number of available vectors on the host system, the +MSI-X allocation will eventually fail, and the driver will only be +able to use legacy interrupts. + +Signed-off-by: Peter P Waskiewicz Jr +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/io_apic_32.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/x86/kernel/io_apic_32.c ++++ b/arch/x86/kernel/io_apic_32.c +@@ -2477,6 +2477,7 @@ void destroy_irq(unsigned int irq) + dynamic_irq_cleanup(irq); + + spin_lock_irqsave(&vector_lock, flags); ++ clear_bit(irq_vector[irq], used_vectors); + irq_vector[irq] = 0; + spin_unlock_irqrestore(&vector_lock, flags); + }