Skip to content

Commit f16beaa

Browse files
lumagdlezcano
authored andcommitted
thermal/drivers/qcom/lmh: Remove false lockdep backtrace
Annotate LMH IRQs with lockdep classes so that the lockdep doesn't report possible recursive locking issue between LMH and GIC interrupts. For the reference: CPU0 ---- lock(&irq_desc_lock_class); lock(&irq_desc_lock_class); *** DEADLOCK *** Call trace: dump_backtrace+0x98/0xf0 show_stack+0x18/0x24 dump_stack_lvl+0x90/0xd0 dump_stack+0x18/0x24 print_deadlock_bug+0x258/0x348 __lock_acquire+0x1078/0x1f44 lock_acquire+0x1fc/0x32c _raw_spin_lock_irqsave+0x60/0x88 __irq_get_desc_lock+0x58/0x98 enable_irq+0x38/0xa0 lmh_enable_interrupt+0x2c/0x38 irq_enable+0x40/0x8c __irq_startup+0x78/0xa4 irq_startup+0x78/0x168 __enable_irq+0x70/0x7c enable_irq+0x4c/0xa0 qcom_cpufreq_ready+0x20/0x2c cpufreq_online+0x2a8/0x988 cpufreq_add_dev+0x80/0x98 subsys_interface_register+0x104/0x134 cpufreq_register_driver+0x150/0x234 qcom_cpufreq_hw_driver_probe+0x2a8/0x388 platform_probe+0x68/0xc0 really_probe+0xbc/0x298 __driver_probe_device+0x78/0x12c driver_probe_device+0x3c/0x160 __device_attach_driver+0xb8/0x138 bus_for_each_drv+0x84/0xe0 __device_attach+0x9c/0x188 device_initial_probe+0x14/0x20 bus_probe_device+0xac/0xb0 deferred_probe_work_func+0x8c/0xc8 process_one_work+0x20c/0x62c worker_thread+0x1bc/0x36c kthread+0x120/0x124 ret_from_fork+0x10/0x20 Fixes: 53bca37 ("thermal/drivers/qcom: Add support for LMh driver") Cc: [email protected] Signed-off-by: Dmitry Baryshkov <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Daniel Lezcano <[email protected]>
1 parent 59b723c commit f16beaa

File tree

1 file changed

+7
-0
lines changed
  • drivers/thermal/qcom

1 file changed

+7
-0
lines changed

drivers/thermal/qcom/lmh.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,14 @@ static struct irq_chip lmh_irq_chip = {
7373
static int lmh_irq_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw)
7474
{
7575
struct lmh_hw_data *lmh_data = d->host_data;
76+
static struct lock_class_key lmh_lock_key;
77+
static struct lock_class_key lmh_request_key;
7678

79+
/*
80+
* This lock class tells lockdep that GPIO irqs are in a different
81+
* category than their parents, so it won't report false recursion.
82+
*/
83+
irq_set_lockdep_class(irq, &lmh_lock_key, &lmh_request_key);
7784
irq_set_chip_and_handler(irq, &lmh_irq_chip, handle_simple_irq);
7885
irq_set_chip_data(irq, lmh_data);
7986

0 commit comments

Comments
 (0)