From: Greg Kroah-Hartman Date: Wed, 16 Dec 2009 19:27:57 +0000 (-0800) Subject: more .27 patches X-Git-Tag: v2.6.27.42~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c6be88222df3fbf0e7c0476a2ebd24fa45c49d4f;p=thirdparty%2Fkernel%2Fstable-queue.git more .27 patches --- diff --git a/queue-2.6.27/fix-csum_ipv6_magic.patch b/queue-2.6.27/fix-csum_ipv6_magic.patch new file mode 100644 index 00000000000..da92cc837bc --- /dev/null +++ b/queue-2.6.27/fix-csum_ipv6_magic.patch @@ -0,0 +1,52 @@ +From 5afe18d2f58812f3924edbd215464e5e3e8545e7 Mon Sep 17 00:00:00 2001 +From: Jiri Bohac +Date: Wed, 2 Sep 2009 11:00:46 +0200 +Subject: [IA64] fix csum_ipv6_magic() + +From: Jiri Bohac + +commit 5afe18d2f58812f3924edbd215464e5e3e8545e7 upstream. + +The 32-bit parameters (len and csum) of csum_ipv6_magic() are passed in 64-bit +registers in2 and in4. The high order 32 bits of the registers were never +cleared, and garbage was sometimes calculated into the checksum. + +Fix this by clearing the high order 32 bits of these registers. + +Signed-off-by: Jiri Bohac +Signed-off-by: Tony Luck +Cc: Dennis Schridde +Signed-off-by: Greg Kroah-Hartman + +--- + arch/ia64/lib/ip_fast_csum.S | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +--- a/arch/ia64/lib/ip_fast_csum.S ++++ b/arch/ia64/lib/ip_fast_csum.S +@@ -96,20 +96,22 @@ END(ip_fast_csum) + GLOBAL_ENTRY(csum_ipv6_magic) + ld4 r20=[in0],4 + ld4 r21=[in1],4 +- dep r15=in3,in2,32,16 ++ zxt4 in2=in2 + ;; + ld4 r22=[in0],4 + ld4 r23=[in1],4 +- mux1 r15=r15,@rev ++ dep r15=in3,in2,32,16 + ;; + ld4 r24=[in0],4 + ld4 r25=[in1],4 +- shr.u r15=r15,16 ++ mux1 r15=r15,@rev + add r16=r20,r21 + add r17=r22,r23 ++ zxt4 in4=in4 + ;; + ld4 r26=[in0],4 + ld4 r27=[in1],4 ++ shr.u r15=r15,16 + add r18=r24,r25 + add r8=r16,r17 + ;; diff --git a/queue-2.6.27/series b/queue-2.6.27/series index 2f06465f62d..7fb5f28766e 100644 --- a/queue-2.6.27/series +++ b/queue-2.6.27/series @@ -11,3 +11,5 @@ x86-asus-p4s800-reboot-bios-quirk.patch x86-calgary-iommu-quirk-find-nearest-matching-calgary-while-walking-up-the-pci-tree.patch x86-fix-iommu-nodac-parameter-handling.patch x86-gart-pci-gart_64.c-use-correct-length-in-strncmp.patch +fix-csum_ipv6_magic.patch +usb-fix-mos7840-problem-with-minor-numbers.patch diff --git a/queue-2.6.27/usb-fix-mos7840-problem-with-minor-numbers.patch b/queue-2.6.27/usb-fix-mos7840-problem-with-minor-numbers.patch new file mode 100644 index 00000000000..9691686393e --- /dev/null +++ b/queue-2.6.27/usb-fix-mos7840-problem-with-minor-numbers.patch @@ -0,0 +1,65 @@ +From linux-kernel.bfrz@manchmal.in-ulm.de Wed Dec 16 11:26:00 2009 +From: Tony Cook +Date: Tue, 8 Dec 2009 23:25:47 +0100 +Subject: USB: fix mos7840 problem with minor numbers +To: Greg KH +Cc: stable@kernel.org +Message-ID: <1260310880@msgid.manchmal.in-ulm.de> + +From: Tony Cook + +commit 37768adf9a1d49aeac0db1ba3dc28b3274b7b789 upstream + +This patch fixes a problem with any mos7840 device where the use of the +field "minor" before it is initialised results in all the devices being +overlaid in memory (minor = 0 for all instances) + +Contributed by: Phillip Branch + +Backported to .27 by Christoph Biedl + +Signed-off-by: Tony Cook +Signed-off-by: Greg Kroah-Hartman + + +--- + drivers/usb/serial/mos7840.c | 21 ++++++++++++++------- + 1 file changed, 14 insertions(+), 7 deletions(-) + +--- a/drivers/usb/serial/mos7840.c ++++ b/drivers/usb/serial/mos7840.c +@@ -2453,9 +2453,14 @@ static int mos7840_startup(struct usb_se + mos7840_set_port_private(serial->port[i], mos7840_port); + spin_lock_init(&mos7840_port->pool_lock); + +- mos7840_port->port_num = ((serial->port[i]->number - +- (serial->port[i]->serial->minor)) + +- 1); ++ /* minor is not initialised until later by ++ * usb-serial.c:get_free_serial() and cannot therefore be used ++ * to index device instances */ ++ mos7840_port->port_num = i + 1; ++ dbg ("serial->port[i]->number = %d", serial->port[i]->number); ++ dbg ("serial->port[i]->serial->minor = %d", serial->port[i]->serial->minor); ++ dbg ("mos7840_port->port_num = %d", mos7840_port->port_num); ++ dbg ("serial->minor = %d", serial->minor); + + if (mos7840_port->port_num == 1) { + mos7840_port->SpRegOffset = 0x0; +@@ -2666,10 +2671,12 @@ static void mos7840_disconnect(struct us + + for (i = 0; i < serial->num_ports; ++i) { + mos7840_port = mos7840_get_port_private(serial->port[i]); +- spin_lock_irqsave(&mos7840_port->pool_lock, flags); +- mos7840_port->zombie = 1; +- spin_unlock_irqrestore(&mos7840_port->pool_lock, flags); +- usb_kill_urb(mos7840_port->control_urb); ++ if (mos7840_port) { ++ spin_lock_irqsave(&mos7840_port->pool_lock, flags); ++ mos7840_port->zombie = 1; ++ spin_unlock_irqrestore(&mos7840_port->pool_lock, flags); ++ usb_kill_urb(mos7840_port->control_urb); ++ } + } + + dbg("%s\n", "Thank u ::");