Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

genirq: Return the IRQ name from free_irq()

This allows callers to get back at them instead of having to store it in
another variable.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>

authored by

Christoph Hellwig and committed by
Bjorn Helgaas
25ce4be7 a7e60e55

+11 -4
+1 -1
include/linux/interrupt.h
··· 155 155 request_percpu_irq(unsigned int irq, irq_handler_t handler, 156 156 const char *devname, void __percpu *percpu_dev_id); 157 157 158 - extern void free_irq(unsigned int, void *); 158 + extern const void *free_irq(unsigned int, void *); 159 159 extern void free_percpu_irq(unsigned int, void __percpu *); 160 160 161 161 struct device;
+10 -3
kernel/irq/manage.c
··· 1574 1574 * have completed. 1575 1575 * 1576 1576 * This function must not be called from interrupt context. 1577 + * 1578 + * Returns the devname argument passed to request_irq. 1577 1579 */ 1578 - void free_irq(unsigned int irq, void *dev_id) 1580 + const void *free_irq(unsigned int irq, void *dev_id) 1579 1581 { 1580 1582 struct irq_desc *desc = irq_to_desc(irq); 1583 + struct irqaction *action; 1584 + const char *devname; 1581 1585 1582 1586 if (!desc || WARN_ON(irq_settings_is_per_cpu_devid(desc))) 1583 - return; 1587 + return NULL; 1584 1588 1585 1589 #ifdef CONFIG_SMP 1586 1590 if (WARN_ON(desc->affinity_notify)) 1587 1591 desc->affinity_notify = NULL; 1588 1592 #endif 1589 1593 1590 - kfree(__free_irq(irq, dev_id)); 1594 + action = __free_irq(irq, dev_id); 1595 + devname = action->name; 1596 + kfree(action); 1597 + return devname; 1591 1598 } 1592 1599 EXPORT_SYMBOL(free_irq); 1593 1600