From fa170aa5227eed8349397ea1f508deb3b0c5a4bb Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 16 May 2012 19:26:45 -0700 Subject: [PATCH] 3.3-stable patches added patches: sparc64-do-not-clobber-g2-in-xcall_fetch_glob_regs.patch --- queue-3.3/series | 1 + ...-clobber-g2-in-xcall_fetch_glob_regs.patch | 52 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 queue-3.3/sparc64-do-not-clobber-g2-in-xcall_fetch_glob_regs.patch diff --git a/queue-3.3/series b/queue-3.3/series index bcf3b63fa54..6afb1ac0885 100644 --- a/queue-3.3/series +++ b/queue-3.3/series @@ -4,3 +4,4 @@ alsa-hda-realtek-add-missing-cd-input-pin-for-msi-7350-mobo.patch alsa-hda-idt-fix-power-map-for-speaker-pins-with-some-hp-laptops.patch usbnet-fix-skb-traversing-races-during-unlink-v2.patch namespaces-pid_ns-fix-leakage-on-fork-failure.patch +sparc64-do-not-clobber-g2-in-xcall_fetch_glob_regs.patch diff --git a/queue-3.3/sparc64-do-not-clobber-g2-in-xcall_fetch_glob_regs.patch b/queue-3.3/sparc64-do-not-clobber-g2-in-xcall_fetch_glob_regs.patch new file mode 100644 index 00000000000..30ec2cc64eb --- /dev/null +++ b/queue-3.3/sparc64-do-not-clobber-g2-in-xcall_fetch_glob_regs.patch @@ -0,0 +1,52 @@ +From a5a737e090e25981e99d69f01400e3a80356581c Mon Sep 17 00:00:00 2001 +From: "David S. Miller" +Date: Thu, 10 May 2012 11:00:46 -0700 +Subject: sparc64: Do not clobber %g2 in xcall_fetch_glob_regs(). + +From: "David S. Miller" + +[ 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 +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + arch/sparc/kernel/central.c | 2 +- + arch/sparc/mm/ultra.S | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +--- a/arch/sparc/kernel/central.c ++++ b/arch/sparc/kernel/central.c +@@ -269,4 +269,4 @@ static int __init sunfire_init(void) + return 0; + } + +-subsys_initcall(sunfire_init); ++fs_initcall(sunfire_init); +--- 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 -- 2.47.3