early_init_irq_lock_class() is called way before anything touches the irq descriptors. In case of SPARSE_IRQ=y this is a NOP operation because the radix tree is empty at this point. For the SPARSE_IRQ=n case it's sufficient to set the lock class in early_init_irq().
Unified · Split
| @@ -424,14 +424,6 @@ do { \ · 423 unmodified lines | ||
| 424 | 424 | |
| 425 | 425 | #endif /* CONFIG_LOCKDEP */ |
| 426 | 426 | |
| 427 | −#ifdef CONFIG_GENERIC_HARDIRQS | |
| 428 | −extern void early_init_irq_lock_class(void); | |
| 429 | −#else | |
| 430 | −static inline void early_init_irq_lock_class(void) | |
| 431 | −{ | |
| 432 | −} | |
| 433 | −#endif | |
| 434 | − | |
| 435 | 427 | #ifdef CONFIG_TRACE_IRQFLAGS |
| 436 | 428 | extern void early_boot_irqs_off(void); |
| 437 | 429 | extern void early_boot_irqs_on(void); |
| @@ -556,7 +556,6 @@ asmlinkage void __init start_kernel(void) · 555 unmodified lines | ||
| 556 | 556 | |
| 557 | 557 | local_irq_disable(); |
| 558 | 558 | early_boot_irqs_off(); |
| 559 | − early_init_irq_lock_class(); | |
| 560 | 559 | |
| 561 | 560 | /* |
| 562 | 561 | * Interrupts are still disabled. Do necessary setups, then |
| @@ -231,6 +231,7 @@ int __init early_irq_init(void) · 230 unmodified lines | ||
| 231 | 231 | alloc_desc_masks(&desc[i], 0, true); |
| 232 | 232 | init_desc_masks(&desc[i]); |
| 233 | 233 | desc[i].kstat_irqs = kstat_irqs_all[i]; |
| 234 | + lockdep_set_class(&desc[i].lock, &irq_desc_lock_class); | |
| 234 | 235 | } |
| 235 | 236 | return arch_early_irq_init(); |
| 236 | 237 | } |
| @@ -251,16 +252,6 @@ void clear_kstat_irqs(struct irq_desc *desc) · 14 unmodified lines | ||
| 251 | 252 | memset(desc->kstat_irqs, 0, nr_cpu_ids * sizeof(*(desc->kstat_irqs))); |
| 252 | 253 | } |
| 253 | 254 | |
| 254 | −void early_init_irq_lock_class(void) | |
| 255 | −{ | |
| 256 | − struct irq_desc *desc; | |
| 257 | − int i; | |
| 258 | − | |
| 259 | − for_each_irq_desc(i, desc) { | |
| 260 | − lockdep_set_class(&desc->lock, &irq_desc_lock_class); | |
| 261 | − } | |
| 262 | −} | |
| 263 | − | |
| 264 | 255 | unsigned int kstat_irqs_cpu(unsigned int irq, int cpu) |
| 265 | 256 | { |
| 266 | 257 | struct irq_desc *desc = irq_to_desc(irq); |