Skip to content

Commit 1196f12

Browse files
svens-s390Vasily Gorbik
authored andcommitted
s390: don't trace preemption in percpu macros
Since commit a21ee60 ("lockdep: Change hardirq{s_enabled,_context} to per-cpu variables") the lockdep code itself uses percpu variables. This leads to recursions because the percpu macros are calling preempt_enable() which might call trace_preempt_on(). Signed-off-by: Sven Schnelle <[email protected]> Reviewed-by: Vasily Gorbik <[email protected]> Signed-off-by: Vasily Gorbik <[email protected]>
1 parent d012a71 commit 1196f12

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

arch/s390/include/asm/percpu.h

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@
2929
typedef typeof(pcp) pcp_op_T__; \
3030
pcp_op_T__ old__, new__, prev__; \
3131
pcp_op_T__ *ptr__; \
32-
preempt_disable(); \
32+
preempt_disable_notrace(); \
3333
ptr__ = raw_cpu_ptr(&(pcp)); \
3434
prev__ = *ptr__; \
3535
do { \
3636
old__ = prev__; \
3737
new__ = old__ op (val); \
3838
prev__ = cmpxchg(ptr__, old__, new__); \
3939
} while (prev__ != old__); \
40-
preempt_enable(); \
40+
preempt_enable_notrace(); \
4141
new__; \
4242
})
4343

@@ -68,7 +68,7 @@
6868
typedef typeof(pcp) pcp_op_T__; \
6969
pcp_op_T__ val__ = (val); \
7070
pcp_op_T__ old__, *ptr__; \
71-
preempt_disable(); \
71+
preempt_disable_notrace(); \
7272
ptr__ = raw_cpu_ptr(&(pcp)); \
7373
if (__builtin_constant_p(val__) && \
7474
((szcast)val__ > -129) && ((szcast)val__ < 128)) { \
@@ -84,7 +84,7 @@
8484
: [val__] "d" (val__) \
8585
: "cc"); \
8686
} \
87-
preempt_enable(); \
87+
preempt_enable_notrace(); \
8888
}
8989

9090
#define this_cpu_add_4(pcp, val) arch_this_cpu_add(pcp, val, "laa", "asi", int)
@@ -95,14 +95,14 @@
9595
typedef typeof(pcp) pcp_op_T__; \
9696
pcp_op_T__ val__ = (val); \
9797
pcp_op_T__ old__, *ptr__; \
98-
preempt_disable(); \
98+
preempt_disable_notrace(); \
9999
ptr__ = raw_cpu_ptr(&(pcp)); \
100100
asm volatile( \
101101
op " %[old__],%[val__],%[ptr__]\n" \
102102
: [old__] "=d" (old__), [ptr__] "+Q" (*ptr__) \
103103
: [val__] "d" (val__) \
104104
: "cc"); \
105-
preempt_enable(); \
105+
preempt_enable_notrace(); \
106106
old__ + val__; \
107107
})
108108

@@ -114,14 +114,14 @@
114114
typedef typeof(pcp) pcp_op_T__; \
115115
pcp_op_T__ val__ = (val); \
116116
pcp_op_T__ old__, *ptr__; \
117-
preempt_disable(); \
117+
preempt_disable_notrace(); \
118118
ptr__ = raw_cpu_ptr(&(pcp)); \
119119
asm volatile( \
120120
op " %[old__],%[val__],%[ptr__]\n" \
121121
: [old__] "=d" (old__), [ptr__] "+Q" (*ptr__) \
122122
: [val__] "d" (val__) \
123123
: "cc"); \
124-
preempt_enable(); \
124+
preempt_enable_notrace(); \
125125
}
126126

127127
#define this_cpu_and_4(pcp, val) arch_this_cpu_to_op(pcp, val, "lan")
@@ -136,10 +136,10 @@
136136
typedef typeof(pcp) pcp_op_T__; \
137137
pcp_op_T__ ret__; \
138138
pcp_op_T__ *ptr__; \
139-
preempt_disable(); \
139+
preempt_disable_notrace(); \
140140
ptr__ = raw_cpu_ptr(&(pcp)); \
141141
ret__ = cmpxchg(ptr__, oval, nval); \
142-
preempt_enable(); \
142+
preempt_enable_notrace(); \
143143
ret__; \
144144
})
145145

@@ -152,10 +152,10 @@
152152
({ \
153153
typeof(pcp) *ptr__; \
154154
typeof(pcp) ret__; \
155-
preempt_disable(); \
155+
preempt_disable_notrace(); \
156156
ptr__ = raw_cpu_ptr(&(pcp)); \
157157
ret__ = xchg(ptr__, nval); \
158-
preempt_enable(); \
158+
preempt_enable_notrace(); \
159159
ret__; \
160160
})
161161

@@ -171,11 +171,11 @@
171171
typeof(pcp1) *p1__; \
172172
typeof(pcp2) *p2__; \
173173
int ret__; \
174-
preempt_disable(); \
174+
preempt_disable_notrace(); \
175175
p1__ = raw_cpu_ptr(&(pcp1)); \
176176
p2__ = raw_cpu_ptr(&(pcp2)); \
177177
ret__ = __cmpxchg_double(p1__, p2__, o1__, o2__, n1__, n2__); \
178-
preempt_enable(); \
178+
preempt_enable_notrace(); \
179179
ret__; \
180180
})
181181

0 commit comments

Comments
 (0)