diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2025-04-29 09:55:26 +0300 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2025-05-07 10:08:14 +0300 |
commit | 5cd05f3e23152b97e0be09938c78058395c3ee19 (patch) | |
tree | a6c9668ce9850f77305ae0f281f7d025726a5dc5 | |
parent | b3801ddc6883169a2e020dbf06da3723446808ee (diff) | |
download | linux-5cd05f3e23152b97e0be09938c78058395c3ee19.tar.xz |
genirq/chip: Rework irq_set_handler() variants
Use the new guards to get and lock the interrupt descriptor and tidy up the
code.
Fixup the kernel doc comment while at it.
No functional change.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/all/20250429065421.590753128@linutronix.de
-rw-r--r-- | kernel/irq/chip.c | 34 |
1 files changed, 11 insertions, 23 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 2041225332fd..7f1c640bff07 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -941,35 +941,23 @@ __irq_do_set_handler(struct irq_desc *desc, irq_flow_handler_t handle, } } -void -__irq_set_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained, - const char *name) +void __irq_set_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained, + const char *name) { - unsigned long flags; - struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, 0); - - if (!desc) - return; - - __irq_do_set_handler(desc, handle, is_chained, name); - irq_put_desc_busunlock(desc, flags); + scoped_irqdesc_get_and_lock(irq, 0) + __irq_do_set_handler(scoped_irqdesc, handle, is_chained, name); } EXPORT_SYMBOL_GPL(__irq_set_handler); -void -irq_set_chained_handler_and_data(unsigned int irq, irq_flow_handler_t handle, - void *data) +void irq_set_chained_handler_and_data(unsigned int irq, irq_flow_handler_t handle, + void *data) { - unsigned long flags; - struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, 0); + scoped_irqdesc_get_and_buslock(irq, 0) { + struct irq_desc *desc = scoped_irqdesc; - if (!desc) - return; - - desc->irq_common_data.handler_data = data; - __irq_do_set_handler(desc, handle, 1, NULL); - - irq_put_desc_busunlock(desc, flags); + desc->irq_common_data.handler_data = data; + __irq_do_set_handler(desc, handle, 1, NULL); + } } EXPORT_SYMBOL_GPL(irq_set_chained_handler_and_data); |