Commit 0f58189d4a3ca96d7959501ecb203177efdbc5bd

Authored by David S. Miller
1 parent 6ec274750c

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