diff options
author | Andrew Lunn <andrew@lunn.ch> | 2017-12-02 12:11:04 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2017-12-28 06:26:35 -0500 |
commit | 39c3fd58952d7599d367c84c1330b785d91d6088 (patch) | |
tree | 156853f464f0148928514478abf3aeca86e30397 /kernel/irq/generic-chip.c | |
parent | beacbc68ac3e23821a681adb30b45dc55b17488d (diff) |
kernel/irq: Extend lockdep class for request mutex
The IRQ code already has support for lockdep class for the lock mutex
in an interrupt descriptor. Extend this to add a second class for the
request mutex in the descriptor. Not having a class is resulting in
false positive splats in some code paths.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: linus.walleij@linaro.org
Cc: grygorii.strashko@ti.com
Cc: f.fainelli@gmail.com
Link: https://lkml.kernel.org/r/1512234664-21555-1-git-send-email-andrew@lunn.ch
Diffstat (limited to 'kernel/irq/generic-chip.c')
-rw-r--r-- | kernel/irq/generic-chip.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/kernel/irq/generic-chip.c b/kernel/irq/generic-chip.c index c26c5bb6b491..508c03dfef25 100644 --- a/kernel/irq/generic-chip.c +++ b/kernel/irq/generic-chip.c | |||
@@ -364,10 +364,11 @@ irq_get_domain_generic_chip(struct irq_domain *d, unsigned int hw_irq) | |||
364 | EXPORT_SYMBOL_GPL(irq_get_domain_generic_chip); | 364 | EXPORT_SYMBOL_GPL(irq_get_domain_generic_chip); |
365 | 365 | ||
366 | /* | 366 | /* |
367 | * Separate lockdep class for interrupt chip which can nest irq_desc | 367 | * Separate lockdep classes for interrupt chip which can nest irq_desc |
368 | * lock. | 368 | * lock and request mutex. |
369 | */ | 369 | */ |
370 | static struct lock_class_key irq_nested_lock_class; | 370 | static struct lock_class_key irq_nested_lock_class; |
371 | static struct lock_class_key irq_nested_request_class; | ||
371 | 372 | ||
372 | /* | 373 | /* |
373 | * irq_map_generic_chip - Map a generic chip for an irq domain | 374 | * irq_map_generic_chip - Map a generic chip for an irq domain |
@@ -409,7 +410,8 @@ int irq_map_generic_chip(struct irq_domain *d, unsigned int virq, | |||
409 | set_bit(idx, &gc->installed); | 410 | set_bit(idx, &gc->installed); |
410 | 411 | ||
411 | if (dgc->gc_flags & IRQ_GC_INIT_NESTED_LOCK) | 412 | if (dgc->gc_flags & IRQ_GC_INIT_NESTED_LOCK) |
412 | irq_set_lockdep_class(virq, &irq_nested_lock_class); | 413 | irq_set_lockdep_class(virq, &irq_nested_lock_class, |
414 | &irq_nested_request_class); | ||
413 | 415 | ||
414 | if (chip->irq_calc_mask) | 416 | if (chip->irq_calc_mask) |
415 | chip->irq_calc_mask(data); | 417 | chip->irq_calc_mask(data); |
@@ -479,7 +481,8 @@ void irq_setup_generic_chip(struct irq_chip_generic *gc, u32 msk, | |||
479 | continue; | 481 | continue; |
480 | 482 | ||
481 | if (flags & IRQ_GC_INIT_NESTED_LOCK) | 483 | if (flags & IRQ_GC_INIT_NESTED_LOCK) |
482 | irq_set_lockdep_class(i, &irq_nested_lock_class); | 484 | irq_set_lockdep_class(i, &irq_nested_lock_class, |
485 | &irq_nested_request_class); | ||
483 | 486 | ||
484 | if (!(flags & IRQ_GC_NO_MASK)) { | 487 | if (!(flags & IRQ_GC_NO_MASK)) { |
485 | struct irq_data *d = irq_get_irq_data(i); | 488 | struct irq_data *d = irq_get_irq_data(i); |