]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
sparc .26 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Sat, 16 Aug 2008 22:19:46 +0000 (15:19 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sat, 16 Aug 2008 22:19:46 +0000 (15:19 -0700)
queue-2.6.26/series
queue-2.6.26/sparc64-do-not-clobber-g7-in-setcontext-trap.patch [new file with mode: 0644]
queue-2.6.26/sparc64-fix-global-reg-snapshotting-on-self-cpu.patch [new file with mode: 0644]
queue-2.6.26/sparc64-futex_op_andn-fix.patch [new file with mode: 0644]

index c7355ed431ba2924346925d13a2af296ce79b243..1ed9aae7e835b6a2340bb1ebac6f644eecfb96fd 100644 (file)
@@ -25,3 +25,6 @@ dccp-change-l-r-must-have-at-least-one-byte-in-the-dccpsf_val-field.patch
 syncookies-make-sure-ecn-is-disabled.patch
 random32-seeding-improvement.patch
 ipv6-fix-ip6_xmit-to-send-fragments-if-ipfragok-is-true.patch
+sparc64-futex_op_andn-fix.patch
+sparc64-fix-global-reg-snapshotting-on-self-cpu.patch
+sparc64-do-not-clobber-g7-in-setcontext-trap.patch
diff --git a/queue-2.6.26/sparc64-do-not-clobber-g7-in-setcontext-trap.patch b/queue-2.6.26/sparc64-do-not-clobber-g7-in-setcontext-trap.patch
new file mode 100644 (file)
index 0000000..a2ece0d
--- /dev/null
@@ -0,0 +1,44 @@
+From b66a039e1e22b58e1932dc46ee9ae66df86d3727 Mon Sep 17 00:00:00 2001
+From: David S. Miller <davem@davemloft.net>
+Date: Thu, 31 Jul 2008 20:40:46 -0700
+Subject: sparc64: Do not clobber %g7 in setcontext() trap.
+Message-Id: <20080805.183554.264179375.davem@davemloft.net>
+
+From: David S. Miller <davem@davemloft.net>
+
+[ Upstream commit 0a4949c4414af2eb91414bcd8e2a8ac3706f7dde ]
+
+That's the userland thread register, so we should never try to change
+it like this.
+
+Based upon glibc bug nptl/6577 and suggestions by Jakub Jelinek.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/sparc64/kernel/signal.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/arch/sparc64/kernel/signal.c
++++ b/arch/sparc64/kernel/signal.c
+@@ -2,7 +2,7 @@
+  *  arch/sparc64/kernel/signal.c
+  *
+  *  Copyright (C) 1991, 1992  Linus Torvalds
+- *  Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
++ *  Copyright (C) 1995, 2008 David S. Miller (davem@davemloft.net)
+  *  Copyright (C) 1996 Miguel de Icaza (miguel@nuclecu.unam.mx)
+  *  Copyright (C) 1997 Eddie C. Dost   (ecd@skynet.be)
+  *  Copyright (C) 1997,1998 Jakub Jelinek   (jj@sunsite.mff.cuni.cz)
+@@ -89,7 +89,9 @@ asmlinkage void sparc64_set_context(stru
+       err |= __get_user(regs->u_regs[UREG_G4], (&(*grp)[MC_G4]));
+       err |= __get_user(regs->u_regs[UREG_G5], (&(*grp)[MC_G5]));
+       err |= __get_user(regs->u_regs[UREG_G6], (&(*grp)[MC_G6]));
+-      err |= __get_user(regs->u_regs[UREG_G7], (&(*grp)[MC_G7]));
++
++      /* Skip %g7 as that's the thread register in userspace.  */
++
+       err |= __get_user(regs->u_regs[UREG_I0], (&(*grp)[MC_O0]));
+       err |= __get_user(regs->u_regs[UREG_I1], (&(*grp)[MC_O1]));
+       err |= __get_user(regs->u_regs[UREG_I2], (&(*grp)[MC_O2]));
diff --git a/queue-2.6.26/sparc64-fix-global-reg-snapshotting-on-self-cpu.patch b/queue-2.6.26/sparc64-fix-global-reg-snapshotting-on-self-cpu.patch
new file mode 100644 (file)
index 0000000..b1bc07f
--- /dev/null
@@ -0,0 +1,31 @@
+From d7e47cb59e78f13f893b5f57fc6f6f1b9eb9bda9 Mon Sep 17 00:00:00 2001
+From: David S. Miller <davem@davemloft.net>
+Date: Mon, 28 Jul 2008 00:44:29 -0700
+Subject: sparc64: Fix global reg snapshotting on self-cpu.
+Message-Id: <20080805.183554.264179375.davem@davemloft.net>
+
+From: David S. Miller <davem@davemloft.net>
+
+[ Upstream commit 17b6f586b8e27914b36c9ed7f3e4d289e6274a80 ]
+
+We were picking %i7 out of the wrong register window
+stack slot.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/sparc64/kernel/process.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/sparc64/kernel/process.c
++++ b/arch/sparc64/kernel/process.c
+@@ -320,7 +320,7 @@ static void __global_reg_self(struct thr
+               rw = (struct reg_window *)
+                       (regs->u_regs[UREG_FP] + STACK_BIAS);
+-              global_reg_snapshot[this_cpu].i7 = rw->ins[6];
++              global_reg_snapshot[this_cpu].i7 = rw->ins[7];
+       } else
+               global_reg_snapshot[this_cpu].i7 = 0;
diff --git a/queue-2.6.26/sparc64-futex_op_andn-fix.patch b/queue-2.6.26/sparc64-futex_op_andn-fix.patch
new file mode 100644 (file)
index 0000000..41d29e2
--- /dev/null
@@ -0,0 +1,40 @@
+From 01afb9d27432885d44398c80292a88ac8db7ea7a Mon Sep 17 00:00:00 2001
+From: Mikael Pettersson <mikpe@it.uu.se>
+Date: Wed, 30 Jul 2008 15:40:50 -0700
+Subject: sparc64: FUTEX_OP_ANDN fix
+Message-Id: <20080805.183554.264179375.davem@davemloft.net>
+
+From: Mikael Pettersson <mikpe@it.uu.se>
+
+[ Upstream commit d72609e17fd93bb2f7e0f7e1bdc70b6d20e43843 ]
+
+Correct sparc64's implementation of FUTEX_OP_ANDN to do a
+bitwise negate of the oparg parameter before applying the
+AND operation. All other archs that support FUTEX_OP_ANDN
+either negate oparg explicitly (frv, ia64, mips, sh, x86),
+or do so indirectly by using an and-not instruction (powerpc).
+Since sparc64 has and-not, I chose to use that solution.
+
+I've not found any use of FUTEX_OP_ANDN in glibc so the
+impact of this bug is probably minor. But other user-space
+components may try to use it so it should still get fixed.
+
+Signed-off-by: Mikael Pettersson <mikpe@it.uu.se>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/asm-sparc64/futex.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/include/asm-sparc64/futex.h
++++ b/include/asm-sparc64/futex.h
+@@ -59,7 +59,7 @@ static inline int futex_atomic_op_inuser
+               __futex_cas_op("or\t%2, %4, %1", ret, oldval, uaddr, oparg);
+               break;
+       case FUTEX_OP_ANDN:
+-              __futex_cas_op("and\t%2, %4, %1", ret, oldval, uaddr, oparg);
++              __futex_cas_op("andn\t%2, %4, %1", ret, oldval, uaddr, oparg);
+               break;
+       case FUTEX_OP_XOR:
+               __futex_cas_op("xor\t%2, %4, %1", ret, oldval, uaddr, oparg);