Commit 0f58189d4a3ca96d7959501ecb203177efdbc5bd
1 parent
6ec274750c
Exists in
master
and in
39 other branches
sparc64: Make lock backoff really a NOP on UP builds.
As noticed by Mikulas Patocka, the backoff macros don't completely nop out for UP builds, we still get a branch always and a delay slot nop. Fix this by making the branch to the backoff spin loop selective, then we can nop out the spin loop completely. Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 3 changed files with 22 additions and 17 deletions Side-by-side Diff
arch/sparc/include/asm/backoff.h
... | ... | @@ -8,6 +8,9 @@ |
8 | 8 | #define BACKOFF_SETUP(reg) \ |
9 | 9 | mov 1, reg |
10 | 10 | |
11 | +#define BACKOFF_LABEL(spin_label, continue_label) \ | |
12 | + spin_label | |
13 | + | |
11 | 14 | #define BACKOFF_SPIN(reg, tmp, label) \ |
12 | 15 | mov reg, tmp; \ |
13 | 16 | 88: brnz,pt tmp, 88b; \ |
... | ... | @@ -22,9 +25,11 @@ |
22 | 25 | #else |
23 | 26 | |
24 | 27 | #define BACKOFF_SETUP(reg) |
25 | -#define BACKOFF_SPIN(reg, tmp, label) \ | |
26 | - ba,pt %xcc, label; \ | |
27 | - nop; | |
28 | + | |
29 | +#define BACKOFF_LABEL(spin_label, continue_label) \ | |
30 | + continue_label | |
31 | + | |
32 | +#define BACKOFF_SPIN(reg, tmp, label) | |
28 | 33 | |
29 | 34 | #endif |
30 | 35 |
arch/sparc/lib/atomic_64.S
... | ... | @@ -21,7 +21,7 @@ |
21 | 21 | add %g1, %o0, %g7 |
22 | 22 | cas [%o1], %g1, %g7 |
23 | 23 | cmp %g1, %g7 |
24 | - bne,pn %icc, 2f | |
24 | + bne,pn %icc, BACKOFF_LABEL(2f, 1b) | |
25 | 25 | nop |
26 | 26 | retl |
27 | 27 | nop |
... | ... | @@ -36,7 +36,7 @@ |
36 | 36 | sub %g1, %o0, %g7 |
37 | 37 | cas [%o1], %g1, %g7 |
38 | 38 | cmp %g1, %g7 |
39 | - bne,pn %icc, 2f | |
39 | + bne,pn %icc, BACKOFF_LABEL(2f, 1b) | |
40 | 40 | nop |
41 | 41 | retl |
42 | 42 | nop |
... | ... | @@ -51,7 +51,7 @@ |
51 | 51 | add %g1, %o0, %g7 |
52 | 52 | cas [%o1], %g1, %g7 |
53 | 53 | cmp %g1, %g7 |
54 | - bne,pn %icc, 2f | |
54 | + bne,pn %icc, BACKOFF_LABEL(2f, 1b) | |
55 | 55 | add %g1, %o0, %g1 |
56 | 56 | retl |
57 | 57 | sra %g1, 0, %o0 |
... | ... | @@ -66,7 +66,7 @@ |
66 | 66 | sub %g1, %o0, %g7 |
67 | 67 | cas [%o1], %g1, %g7 |
68 | 68 | cmp %g1, %g7 |
69 | - bne,pn %icc, 2f | |
69 | + bne,pn %icc, BACKOFF_LABEL(2f, 1b) | |
70 | 70 | sub %g1, %o0, %g1 |
71 | 71 | retl |
72 | 72 | sra %g1, 0, %o0 |
... | ... | @@ -81,7 +81,7 @@ |
81 | 81 | add %g1, %o0, %g7 |
82 | 82 | casx [%o1], %g1, %g7 |
83 | 83 | cmp %g1, %g7 |
84 | - bne,pn %xcc, 2f | |
84 | + bne,pn %xcc, BACKOFF_LABEL(2f, 1b) | |
85 | 85 | nop |
86 | 86 | retl |
87 | 87 | nop |
... | ... | @@ -96,7 +96,7 @@ |
96 | 96 | sub %g1, %o0, %g7 |
97 | 97 | casx [%o1], %g1, %g7 |
98 | 98 | cmp %g1, %g7 |
99 | - bne,pn %xcc, 2f | |
99 | + bne,pn %xcc, BACKOFF_LABEL(2f, 1b) | |
100 | 100 | nop |
101 | 101 | retl |
102 | 102 | nop |
... | ... | @@ -111,7 +111,7 @@ |
111 | 111 | add %g1, %o0, %g7 |
112 | 112 | casx [%o1], %g1, %g7 |
113 | 113 | cmp %g1, %g7 |
114 | - bne,pn %xcc, 2f | |
114 | + bne,pn %xcc, BACKOFF_LABEL(2f, 1b) | |
115 | 115 | nop |
116 | 116 | retl |
117 | 117 | add %g1, %o0, %o0 |
... | ... | @@ -126,7 +126,7 @@ |
126 | 126 | sub %g1, %o0, %g7 |
127 | 127 | casx [%o1], %g1, %g7 |
128 | 128 | cmp %g1, %g7 |
129 | - bne,pn %xcc, 2f | |
129 | + bne,pn %xcc, BACKOFF_LABEL(2f, 1b) | |
130 | 130 | nop |
131 | 131 | retl |
132 | 132 | sub %g1, %o0, %o0 |
arch/sparc/lib/bitops.S
... | ... | @@ -22,7 +22,7 @@ |
22 | 22 | or %g7, %o2, %g1 |
23 | 23 | casx [%o1], %g7, %g1 |
24 | 24 | cmp %g7, %g1 |
25 | - bne,pn %xcc, 2f | |
25 | + bne,pn %xcc, BACKOFF_LABEL(2f, 1b) | |
26 | 26 | and %g7, %o2, %g2 |
27 | 27 | clr %o0 |
28 | 28 | movrne %g2, 1, %o0 |
... | ... | @@ -45,7 +45,7 @@ |
45 | 45 | andn %g7, %o2, %g1 |
46 | 46 | casx [%o1], %g7, %g1 |
47 | 47 | cmp %g7, %g1 |
48 | - bne,pn %xcc, 2f | |
48 | + bne,pn %xcc, BACKOFF_LABEL(2f, 1b) | |
49 | 49 | and %g7, %o2, %g2 |
50 | 50 | clr %o0 |
51 | 51 | movrne %g2, 1, %o0 |
... | ... | @@ -68,7 +68,7 @@ |
68 | 68 | xor %g7, %o2, %g1 |
69 | 69 | casx [%o1], %g7, %g1 |
70 | 70 | cmp %g7, %g1 |
71 | - bne,pn %xcc, 2f | |
71 | + bne,pn %xcc, BACKOFF_LABEL(2f, 1b) | |
72 | 72 | and %g7, %o2, %g2 |
73 | 73 | clr %o0 |
74 | 74 | movrne %g2, 1, %o0 |
... | ... | @@ -91,7 +91,7 @@ |
91 | 91 | or %g7, %o2, %g1 |
92 | 92 | casx [%o1], %g7, %g1 |
93 | 93 | cmp %g7, %g1 |
94 | - bne,pn %xcc, 2f | |
94 | + bne,pn %xcc, BACKOFF_LABEL(2f, 1b) | |
95 | 95 | nop |
96 | 96 | retl |
97 | 97 | nop |
... | ... | @@ -112,7 +112,7 @@ |
112 | 112 | andn %g7, %o2, %g1 |
113 | 113 | casx [%o1], %g7, %g1 |
114 | 114 | cmp %g7, %g1 |
115 | - bne,pn %xcc, 2f | |
115 | + bne,pn %xcc, BACKOFF_LABEL(2f, 1b) | |
116 | 116 | nop |
117 | 117 | retl |
118 | 118 | nop |
... | ... | @@ -133,7 +133,7 @@ |
133 | 133 | xor %g7, %o2, %g1 |
134 | 134 | casx [%o1], %g7, %g1 |
135 | 135 | cmp %g7, %g1 |
136 | - bne,pn %xcc, 2f | |
136 | + bne,pn %xcc, BACKOFF_LABEL(2f, 1b) | |
137 | 137 | nop |
138 | 138 | retl |
139 | 139 | nop |