summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-05-10 11:00:46 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-05-21 09:40:01 -0700
commit1c1cb5756a8d296bbc33fc844f97048dc09ee172 (patch)
treef2b9110ef1391ab7923c17a41c7b7024d98a8b40
parent6f6f21eceec3a60d2066bb3b5e31dc14f9168fa7 (diff)
downloadlinux-stable-1c1cb5756a8d296bbc33fc844f97048dc09ee172.tar.gz
linux-stable-1c1cb5756a8d296bbc33fc844f97048dc09ee172.tar.bz2
linux-stable-1c1cb5756a8d296bbc33fc844f97048dc09ee172.zip
sparc64: Do not clobber %g2 in xcall_fetch_glob_regs().
[ Upstream commit a5a737e090e25981e99d69f01400e3a80356581c ] %g2 is meant to hold the CPUID number throughout this routine, since at the very beginning, and at the very end, we use %g2 to calculate indexes into per-cpu arrays. However we erroneously clobber it in order to hold the %cwp register value mid-stream. Fix this code to use %g3 for the %cwp read and related calulcations instead. Reported-by: Meelis Roos <mroos@linux.ee> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--arch/sparc/kernel/central.c2
-rw-r--r--arch/sparc/mm/ultra.S6
2 files changed, 4 insertions, 4 deletions
diff --git a/arch/sparc/kernel/central.c b/arch/sparc/kernel/central.c
index 7eef3f741963..f5ddc0bae38d 100644
--- a/arch/sparc/kernel/central.c
+++ b/arch/sparc/kernel/central.c
@@ -268,4 +268,4 @@ static int __init sunfire_init(void)
return 0;
}
-subsys_initcall(sunfire_init);
+fs_initcall(sunfire_init);
diff --git a/arch/sparc/mm/ultra.S b/arch/sparc/mm/ultra.S
index b57a5942ba64..874162a11ceb 100644
--- a/arch/sparc/mm/ultra.S
+++ b/arch/sparc/mm/ultra.S
@@ -495,11 +495,11 @@ xcall_fetch_glob_regs:
stx %o7, [%g1 + GR_SNAP_O7]
stx %i7, [%g1 + GR_SNAP_I7]
/* Don't try this at home kids... */
- rdpr %cwp, %g2
- sub %g2, 1, %g7
+ rdpr %cwp, %g3
+ sub %g3, 1, %g7
wrpr %g7, %cwp
mov %i7, %g7
- wrpr %g2, %cwp
+ wrpr %g3, %cwp
stx %g7, [%g1 + GR_SNAP_RPC]
sethi %hi(trap_block), %g7
or %g7, %lo(trap_block), %g7