[glsdk/meta-ti-glsdk.git] / recipes-kernel / linux / linux-ti33x-psp-3.2 / 3.2.18 / 0030-sparc64-Do-not-clobber-g2-in-xcall_fetch_glob_regs.patch
1 From 03ddf7fce874ca8243c81666ca3cc742f195781b Mon Sep 17 00:00:00 2001
2 From: "David S. Miller" <davem@davemloft.net>
3 Date: Thu, 10 May 2012 11:00:46 -0700
4 Subject: [PATCH 30/56] sparc64: Do not clobber %g2 in
5 xcall_fetch_glob_regs().
7 [ Upstream commit a5a737e090e25981e99d69f01400e3a80356581c ]
9 %g2 is meant to hold the CPUID number throughout this routine, since
10 at the very beginning, and at the very end, we use %g2 to calculate
11 indexes into per-cpu arrays.
13 However we erroneously clobber it in order to hold the %cwp register
14 value mid-stream.
16 Fix this code to use %g3 for the %cwp read and related calulcations
17 instead.
19 Reported-by: Meelis Roos <mroos@linux.ee>
20 Signed-off-by: David S. Miller <davem@davemloft.net>
21 Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
22 ---
23 arch/sparc/kernel/central.c | 2 +-
24 arch/sparc/mm/ultra.S | 6 +++---
25 2 files changed, 4 insertions(+), 4 deletions(-)
27 diff --git a/arch/sparc/kernel/central.c b/arch/sparc/kernel/central.c
28 index 38d48a5..9708851 100644
29 --- a/arch/sparc/kernel/central.c
30 +++ b/arch/sparc/kernel/central.c
31 @@ -269,4 +269,4 @@ static int __init sunfire_init(void)
32 return 0;
33 }
35 -subsys_initcall(sunfire_init);
36 +fs_initcall(sunfire_init);
37 diff --git a/arch/sparc/mm/ultra.S b/arch/sparc/mm/ultra.S
38 index b57a594..874162a 100644
39 --- a/arch/sparc/mm/ultra.S
40 +++ b/arch/sparc/mm/ultra.S
41 @@ -495,11 +495,11 @@ xcall_fetch_glob_regs:
42 stx %o7, [%g1 + GR_SNAP_O7]
43 stx %i7, [%g1 + GR_SNAP_I7]
44 /* Don't try this at home kids... */
45 - rdpr %cwp, %g2
46 - sub %g2, 1, %g7
47 + rdpr %cwp, %g3
48 + sub %g3, 1, %g7
49 wrpr %g7, %cwp
50 mov %i7, %g7
51 - wrpr %g2, %cwp
52 + wrpr %g3, %cwp
53 stx %g7, [%g1 + GR_SNAP_RPC]
54 sethi %hi(trap_block), %g7
55 or %g7, %lo(trap_block), %g7
56 --
57 1.7.7.6