diff options
Diffstat (limited to 'kernel/irq/manage.c')
-rw-r--r-- | kernel/irq/manage.c | 15 |
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 | } |
1564 | EXPORT_SYMBOL_GPL(remove_irq); | 1564 | EXPORT_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 | */ |
1580 | void free_irq(unsigned int irq, void *dev_id) | 1582 | const 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 | } |
1594 | EXPORT_SYMBOL(free_irq); | 1601 | EXPORT_SYMBOL(free_irq); |
1595 | 1602 | ||