@@ -103,9 +103,11 @@ static void __plic_toggle(void __iomem *enable_base, int hwirq, int enable)
103
103
104
104
static void plic_toggle (struct plic_handler * handler , int hwirq , int enable )
105
105
{
106
- raw_spin_lock (& handler -> enable_lock );
106
+ unsigned long flags ;
107
+
108
+ raw_spin_lock_irqsave (& handler -> enable_lock , flags );
107
109
__plic_toggle (handler -> enable_base , hwirq , enable );
108
- raw_spin_unlock (& handler -> enable_lock );
110
+ raw_spin_unlock_irqrestore (& handler -> enable_lock , flags );
109
111
}
110
112
111
113
static inline void plic_irq_toggle (const struct cpumask * mask ,
@@ -236,6 +238,7 @@ static int plic_irq_set_type(struct irq_data *d, unsigned int type)
236
238
static int plic_irq_suspend (void )
237
239
{
238
240
unsigned int i , cpu ;
241
+ unsigned long flags ;
239
242
u32 __iomem * reg ;
240
243
struct plic_priv * priv ;
241
244
@@ -253,12 +256,12 @@ static int plic_irq_suspend(void)
253
256
if (!handler -> present )
254
257
continue ;
255
258
256
- raw_spin_lock (& handler -> enable_lock );
259
+ raw_spin_lock_irqsave (& handler -> enable_lock , flags );
257
260
for (i = 0 ; i < DIV_ROUND_UP (priv -> nr_irqs , 32 ); i ++ ) {
258
261
reg = handler -> enable_base + i * sizeof (u32 );
259
262
handler -> enable_save [i ] = readl (reg );
260
263
}
261
- raw_spin_unlock (& handler -> enable_lock );
264
+ raw_spin_unlock_irqrestore (& handler -> enable_lock , flags );
262
265
}
263
266
264
267
return 0 ;
@@ -267,6 +270,7 @@ static int plic_irq_suspend(void)
267
270
static void plic_irq_resume (void )
268
271
{
269
272
unsigned int i , index , cpu ;
273
+ unsigned long flags ;
270
274
u32 __iomem * reg ;
271
275
struct plic_priv * priv ;
272
276
@@ -284,12 +288,12 @@ static void plic_irq_resume(void)
284
288
if (!handler -> present )
285
289
continue ;
286
290
287
- raw_spin_lock (& handler -> enable_lock );
291
+ raw_spin_lock_irqsave (& handler -> enable_lock , flags );
288
292
for (i = 0 ; i < DIV_ROUND_UP (priv -> nr_irqs , 32 ); i ++ ) {
289
293
reg = handler -> enable_base + i * sizeof (u32 );
290
294
writel (handler -> enable_save [i ], reg );
291
295
}
292
- raw_spin_unlock (& handler -> enable_lock );
296
+ raw_spin_unlock_irqrestore (& handler -> enable_lock , flags );
293
297
}
294
298
}
295
299
0 commit comments