From: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> 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@xxxxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html