aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/irq/manage.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/irq/manage.c')
-rw-r--r--kernel/irq/manage.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index ae1c90f20381..070be980c37a 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -1559,7 +1559,7 @@ void remove_irq(unsigned int irq, struct irqaction *act)
1559 struct irq_desc *desc = irq_to_desc(irq); 1559 struct irq_desc *desc = irq_to_desc(irq);
1560 1560
1561 if (desc && !WARN_ON(irq_settings_is_per_cpu_devid(desc))) 1561 if (desc && !WARN_ON(irq_settings_is_per_cpu_devid(desc)))
1562 __free_irq(irq, act->dev_id); 1562 __free_irq(irq, act->dev_id);
1563} 1563}
1564EXPORT_SYMBOL_GPL(remove_irq); 1564EXPORT_SYMBOL_GPL(remove_irq);
1565 1565
@@ -1576,20 +1576,27 @@ EXPORT_SYMBOL_GPL(remove_irq);
1576 * have completed. 1576 * have completed.
1577 * 1577 *
1578 * This function must not be called from interrupt context. 1578 * This function must not be called from interrupt context.
1579 *
1580 * Returns the devname argument passed to request_irq.
1579 */ 1581 */
1580void free_irq(unsigned int irq, void *dev_id) 1582const void *free_irq(unsigned int irq, void *dev_id)
1581{ 1583{
1582 struct irq_desc *desc = irq_to_desc(irq); 1584 struct irq_desc *desc = irq_to_desc(irq);
1585 struct irqaction *action;
1586 const char *devname;
1583 1587
1584 if (!desc || WARN_ON(irq_settings_is_per_cpu_devid(desc))) 1588 if (!desc || WARN_ON(irq_settings_is_per_cpu_devid(desc)))
1585 return; 1589 return NULL;
1586 1590
1587#ifdef CONFIG_SMP 1591#ifdef CONFIG_SMP
1588 if (WARN_ON(desc->affinity_notify)) 1592 if (WARN_ON(desc->affinity_notify))
1589 desc->affinity_notify = NULL; 1593 desc->affinity_notify = NULL;
1590#endif 1594#endif
1591 1595
1592 kfree(__free_irq(irq, dev_id)); 1596 action = __free_irq(irq, dev_id);
1597 devname = action->name;
1598 kfree(action);
1599 return devname;
1593} 1600}
1594EXPORT_SYMBOL(free_irq); 1601EXPORT_SYMBOL(free_irq);
1595 1602