@@ -50,7 +50,7 @@ void __iomem *mips_gic_base;
5050
5151static DEFINE_PER_CPU_READ_MOSTLY (unsigned long [GIC_MAX_LONGS ], pcpu_masks ) ;
5252
53- static DEFINE_SPINLOCK (gic_lock );
53+ static DEFINE_RAW_SPINLOCK (gic_lock );
5454static struct irq_domain * gic_irq_domain ;
5555static int gic_shared_intrs ;
5656static unsigned int gic_cpu_pin ;
@@ -210,7 +210,7 @@ static int gic_set_type(struct irq_data *d, unsigned int type)
210210
211211 irq = GIC_HWIRQ_TO_SHARED (d -> hwirq );
212212
213- spin_lock_irqsave (& gic_lock , flags );
213+ raw_spin_lock_irqsave (& gic_lock , flags );
214214 switch (type & IRQ_TYPE_SENSE_MASK ) {
215215 case IRQ_TYPE_EDGE_FALLING :
216216 pol = GIC_POL_FALLING_EDGE ;
@@ -250,7 +250,7 @@ static int gic_set_type(struct irq_data *d, unsigned int type)
250250 else
251251 irq_set_chip_handler_name_locked (d , & gic_level_irq_controller ,
252252 handle_level_irq , NULL );
253- spin_unlock_irqrestore (& gic_lock , flags );
253+ raw_spin_unlock_irqrestore (& gic_lock , flags );
254254
255255 return 0 ;
256256}
@@ -268,7 +268,7 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *cpumask,
268268 return - EINVAL ;
269269
270270 /* Assumption : cpumask refers to a single CPU */
271- spin_lock_irqsave (& gic_lock , flags );
271+ raw_spin_lock_irqsave (& gic_lock , flags );
272272
273273 /* Re-route this IRQ */
274274 write_gic_map_vp (irq , BIT (mips_cm_vp_id (cpu )));
@@ -279,7 +279,7 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *cpumask,
279279 set_bit (irq , per_cpu_ptr (pcpu_masks , cpu ));
280280
281281 irq_data_update_effective_affinity (d , cpumask_of (cpu ));
282- spin_unlock_irqrestore (& gic_lock , flags );
282+ raw_spin_unlock_irqrestore (& gic_lock , flags );
283283
284284 return IRQ_SET_MASK_OK ;
285285}
@@ -357,12 +357,12 @@ static void gic_mask_local_irq_all_vpes(struct irq_data *d)
357357 cd = irq_data_get_irq_chip_data (d );
358358 cd -> mask = false;
359359
360- spin_lock_irqsave (& gic_lock , flags );
360+ raw_spin_lock_irqsave (& gic_lock , flags );
361361 for_each_online_cpu (cpu ) {
362362 write_gic_vl_other (mips_cm_vp_id (cpu ));
363363 write_gic_vo_rmask (BIT (intr ));
364364 }
365- spin_unlock_irqrestore (& gic_lock , flags );
365+ raw_spin_unlock_irqrestore (& gic_lock , flags );
366366}
367367
368368static void gic_unmask_local_irq_all_vpes (struct irq_data * d )
@@ -375,12 +375,12 @@ static void gic_unmask_local_irq_all_vpes(struct irq_data *d)
375375 cd = irq_data_get_irq_chip_data (d );
376376 cd -> mask = true;
377377
378- spin_lock_irqsave (& gic_lock , flags );
378+ raw_spin_lock_irqsave (& gic_lock , flags );
379379 for_each_online_cpu (cpu ) {
380380 write_gic_vl_other (mips_cm_vp_id (cpu ));
381381 write_gic_vo_smask (BIT (intr ));
382382 }
383- spin_unlock_irqrestore (& gic_lock , flags );
383+ raw_spin_unlock_irqrestore (& gic_lock , flags );
384384}
385385
386386static void gic_all_vpes_irq_cpu_online (void )
@@ -393,19 +393,21 @@ static void gic_all_vpes_irq_cpu_online(void)
393393 unsigned long flags ;
394394 int i ;
395395
396- spin_lock_irqsave (& gic_lock , flags );
396+ raw_spin_lock_irqsave (& gic_lock , flags );
397397
398398 for (i = 0 ; i < ARRAY_SIZE (local_intrs ); i ++ ) {
399399 unsigned int intr = local_intrs [i ];
400400 struct gic_all_vpes_chip_data * cd ;
401401
402+ if (!gic_local_irq_is_routable (intr ))
403+ continue ;
402404 cd = & gic_all_vpes_chip_data [intr ];
403405 write_gic_vl_map (mips_gic_vx_map_reg (intr ), cd -> map );
404406 if (cd -> mask )
405407 write_gic_vl_smask (BIT (intr ));
406408 }
407409
408- spin_unlock_irqrestore (& gic_lock , flags );
410+ raw_spin_unlock_irqrestore (& gic_lock , flags );
409411}
410412
411413static struct irq_chip gic_all_vpes_local_irq_controller = {
@@ -435,11 +437,11 @@ static int gic_shared_irq_domain_map(struct irq_domain *d, unsigned int virq,
435437
436438 data = irq_get_irq_data (virq );
437439
438- spin_lock_irqsave (& gic_lock , flags );
440+ raw_spin_lock_irqsave (& gic_lock , flags );
439441 write_gic_map_pin (intr , GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin );
440442 write_gic_map_vp (intr , BIT (mips_cm_vp_id (cpu )));
441443 irq_data_update_effective_affinity (data , cpumask_of (cpu ));
442- spin_unlock_irqrestore (& gic_lock , flags );
444+ raw_spin_unlock_irqrestore (& gic_lock , flags );
443445
444446 return 0 ;
445447}
@@ -531,12 +533,12 @@ static int gic_irq_domain_map(struct irq_domain *d, unsigned int virq,
531533 if (!gic_local_irq_is_routable (intr ))
532534 return - EPERM ;
533535
534- spin_lock_irqsave (& gic_lock , flags );
536+ raw_spin_lock_irqsave (& gic_lock , flags );
535537 for_each_online_cpu (cpu ) {
536538 write_gic_vl_other (mips_cm_vp_id (cpu ));
537539 write_gic_vo_map (mips_gic_vx_map_reg (intr ), map );
538540 }
539- spin_unlock_irqrestore (& gic_lock , flags );
541+ raw_spin_unlock_irqrestore (& gic_lock , flags );
540542
541543 return 0 ;
542544}
0 commit comments