Messages in this thread Patch in this message | | | From | Jan Kiszka <> | Subject | [PATCH 1/5] genirq: Pass descriptor to __free_irq | Date | Sat, 4 Dec 2010 00:37:27 +0100 |
| |
From: Jan Kiszka <jan.kiszka@siemens.com>
One caller of __free_free already has to resolve and check the irq descriptor. So this small cleanup consistently pushes irq_to_desc and the NULL check to the call site to avoid redundant work.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> --- kernel/irq/manage.c | 16 +++++++++------- 1 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 5f92acc..6341765 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -879,17 +879,14 @@ EXPORT_SYMBOL_GPL(setup_irq); * Internal function to unregister an irqaction - used to free * regular and special interrupts that are part of the architecture. */ -static struct irqaction *__free_irq(unsigned int irq, void *dev_id) +static struct irqaction *__free_irq(struct irq_desc *desc, void *dev_id) { - struct irq_desc *desc = irq_to_desc(irq); struct irqaction *action, **action_ptr; + unsigned int irq = desc->irq_data.irq; unsigned long flags; WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq); - if (!desc) - return NULL; - raw_spin_lock_irqsave(&desc->lock, flags); /* @@ -977,7 +974,12 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id) */ void remove_irq(unsigned int irq, struct irqaction *act) { - __free_irq(irq, act->dev_id); + struct irq_desc *desc = irq_to_desc(irq); + + if (!desc) + return; + + __free_irq(desc, act->dev_id); } EXPORT_SYMBOL_GPL(remove_irq); @@ -1003,7 +1005,7 @@ void free_irq(unsigned int irq, void *dev_id) return; chip_bus_lock(desc); - kfree(__free_irq(irq, dev_id)); + kfree(__free_irq(desc, dev_id)); chip_bus_sync_unlock(desc); } EXPORT_SYMBOL(free_irq); -- 1.7.1
| |