--- /dev/null
+From 5afe18d2f58812f3924edbd215464e5e3e8545e7 Mon Sep 17 00:00:00 2001
+From: Jiri Bohac <jbohac@suse.cz>
+Date: Wed, 2 Sep 2009 11:00:46 +0200
+Subject: [IA64] fix csum_ipv6_magic()
+
+From: Jiri Bohac <jbohac@suse.cz>
+
+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 <jbohac@suse.cz>
+Signed-off-by: Tony Luck <tony.luck@intel.com>
+Cc: Dennis Schridde <devurandom@gmx.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
+ ;;
--- /dev/null
+From linux-kernel.bfrz@manchmal.in-ulm.de Wed Dec 16 11:26:00 2009
+From: Tony Cook <tony-cook@bigpond.com>
+Date: Tue, 8 Dec 2009 23:25:47 +0100
+Subject: USB: fix mos7840 problem with minor numbers
+To: Greg KH <greg@kroah.com>
+Cc: stable@kernel.org
+Message-ID: <1260310880@msgid.manchmal.in-ulm.de>
+
+From: Tony Cook <tony-cook@bigpond.com>
+
+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 <linux-kernel.bfrz@manchmal.in-ulm.de>
+
+Signed-off-by: Tony Cook <tony-cook@bigpond.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ 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 ::");