diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2006-02-12 02:28:40 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-03-20 04:12:29 -0500 |
commit | 6241e5cc6afe2c5b75b51e1c890df18f05838cf6 (patch) | |
tree | 557eb4d7f530b9229a87c0a8d9f6013b9987f6f5 | |
parent | 1a7a242c898dd131f2df005c492e9b44fb8900e0 (diff) |
[SPARC64]: Fix branch signedness bug in all code patching.
The bug that hit SUN4V TLB patching exists elsewhere.
Make sure we cure all such cases.
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | arch/sparc64/lib/NGpage.S | 3 | ||||
-rw-r--r-- | arch/sparc64/lib/NGpatch.S | 3 | ||||
-rw-r--r-- | arch/sparc64/lib/U3patch.S | 3 |
3 files changed, 6 insertions, 3 deletions
diff --git a/arch/sparc64/lib/NGpage.S b/arch/sparc64/lib/NGpage.S index 0e6152c28b01..7d7c3bb8dcbf 100644 --- a/arch/sparc64/lib/NGpage.S +++ b/arch/sparc64/lib/NGpage.S | |||
@@ -75,7 +75,8 @@ NGclear_user_page: /* %o0=dest, %o1=vaddr */ | |||
75 | or %g2, %lo(OLD), %g2; \ | 75 | or %g2, %lo(OLD), %g2; \ |
76 | sub %g1, %g2, %g1; \ | 76 | sub %g1, %g2, %g1; \ |
77 | sethi %hi(BRANCH_ALWAYS), %g3; \ | 77 | sethi %hi(BRANCH_ALWAYS), %g3; \ |
78 | srl %g1, 2, %g1; \ | 78 | sll %g1, 11, %g1; \ |
79 | srl %g1, 11 + 2, %g1; \ | ||
79 | or %g3, %lo(BRANCH_ALWAYS), %g3; \ | 80 | or %g3, %lo(BRANCH_ALWAYS), %g3; \ |
80 | or %g3, %g1, %g3; \ | 81 | or %g3, %g1, %g3; \ |
81 | stw %g3, [%g2]; \ | 82 | stw %g3, [%g2]; \ |
diff --git a/arch/sparc64/lib/NGpatch.S b/arch/sparc64/lib/NGpatch.S index f13ec9e4c8a3..3b0674fc3366 100644 --- a/arch/sparc64/lib/NGpatch.S +++ b/arch/sparc64/lib/NGpatch.S | |||
@@ -12,7 +12,8 @@ | |||
12 | or %g2, %lo(OLD), %g2; \ | 12 | or %g2, %lo(OLD), %g2; \ |
13 | sub %g1, %g2, %g1; \ | 13 | sub %g1, %g2, %g1; \ |
14 | sethi %hi(BRANCH_ALWAYS), %g3; \ | 14 | sethi %hi(BRANCH_ALWAYS), %g3; \ |
15 | srl %g1, 2, %g1; \ | 15 | sll %g1, 11, %g1; \ |
16 | srl %g1, 11 + 2, %g1; \ | ||
16 | or %g3, %lo(BRANCH_ALWAYS), %g3; \ | 17 | or %g3, %lo(BRANCH_ALWAYS), %g3; \ |
17 | or %g3, %g1, %g3; \ | 18 | or %g3, %g1, %g3; \ |
18 | stw %g3, [%g2]; \ | 19 | stw %g3, [%g2]; \ |
diff --git a/arch/sparc64/lib/U3patch.S b/arch/sparc64/lib/U3patch.S index e2b6c5e4b95a..ecc302619a6e 100644 --- a/arch/sparc64/lib/U3patch.S +++ b/arch/sparc64/lib/U3patch.S | |||
@@ -12,7 +12,8 @@ | |||
12 | or %g2, %lo(OLD), %g2; \ | 12 | or %g2, %lo(OLD), %g2; \ |
13 | sub %g1, %g2, %g1; \ | 13 | sub %g1, %g2, %g1; \ |
14 | sethi %hi(BRANCH_ALWAYS), %g3; \ | 14 | sethi %hi(BRANCH_ALWAYS), %g3; \ |
15 | srl %g1, 2, %g1; \ | 15 | sll %g1, 11, %g1; \ |
16 | srl %g1, 11 + 2, %g1; \ | ||
16 | or %g3, %lo(BRANCH_ALWAYS), %g3; \ | 17 | or %g3, %lo(BRANCH_ALWAYS), %g3; \ |
17 | or %g3, %g1, %g3; \ | 18 | or %g3, %g1, %g3; \ |
18 | stw %g3, [%g2]; \ | 19 | stw %g3, [%g2]; \ |