@@ -113,14 +113,7 @@ static inline void __hard_RI_enable(void)
113
113
114
114
static inline notrace unsigned long irq_soft_mask_return (void )
115
115
{
116
- unsigned long flags ;
117
-
118
- asm volatile (
119
- "lbz %0,%1(13)"
120
- : "=r" (flags )
121
- : "i" (offsetof(struct paca_struct , irq_soft_mask )));
122
-
123
- return flags ;
116
+ return READ_ONCE (local_paca -> irq_soft_mask );
124
117
}
125
118
126
119
/*
@@ -148,46 +141,24 @@ static inline notrace void irq_soft_mask_set(unsigned long mask)
148
141
WARN_ON (mask && !(mask & IRQS_DISABLED ));
149
142
#endif
150
143
151
- asm volatile (
152
- "stb %0,%1(13)"
153
- :
154
- : "r" (mask ),
155
- "i" (offsetof(struct paca_struct , irq_soft_mask ))
156
- : "memory" );
144
+ WRITE_ONCE (local_paca -> irq_soft_mask , mask );
145
+ barrier ();
157
146
}
158
147
159
148
static inline notrace unsigned long irq_soft_mask_set_return (unsigned long mask )
160
149
{
161
- unsigned long flags ;
162
-
163
- #ifdef CONFIG_PPC_IRQ_SOFT_MASK_DEBUG
164
- WARN_ON (mask && !(mask & IRQS_DISABLED ));
165
- #endif
150
+ unsigned long flags = irq_soft_mask_return ();
166
151
167
- asm volatile (
168
- "lbz %0,%1(13); stb %2,%1(13)"
169
- : "=&r" (flags )
170
- : "i" (offsetof(struct paca_struct , irq_soft_mask )),
171
- "r" (mask )
172
- : "memory" );
152
+ irq_soft_mask_set (mask );
173
153
174
154
return flags ;
175
155
}
176
156
177
157
static inline notrace unsigned long irq_soft_mask_or_return (unsigned long mask )
178
158
{
179
- unsigned long flags , tmp ;
180
-
181
- asm volatile (
182
- "lbz %0,%2(13); or %1,%0,%3; stb %1,%2(13)"
183
- : "=&r" (flags ), "=r" (tmp )
184
- : "i" (offsetof(struct paca_struct , irq_soft_mask )),
185
- "r" (mask )
186
- : "memory" );
159
+ unsigned long flags = irq_soft_mask_return ();
187
160
188
- #ifdef CONFIG_PPC_IRQ_SOFT_MASK_DEBUG
189
- WARN_ON ((mask | flags ) && !((mask | flags ) & IRQS_DISABLED ));
190
- #endif
161
+ irq_soft_mask_set (flags | mask );
191
162
192
163
return flags ;
193
164
}
0 commit comments