Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753790AbbKJP1a (ORCPT ); Tue, 10 Nov 2015 10:27:30 -0500 Received: from www.linutronix.de ([62.245.132.108]:44807 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752785AbbKJP13 (ORCPT ); Tue, 10 Nov 2015 10:27:29 -0500 Date: Tue, 10 Nov 2015 10:26:27 -0500 (EST) From: Thomas Gleixner To: Jon Hunter cc: Jason Cooper , Marc Zyngier , Stephen Warren , Thierry Reding , Kevin Hilman , Geert Uytterhoeven , LKML , linux-tegra@vger.kernel.org, Soren Brinkmann , Lars-Peter Clausen , Linus Walleij , Alexandre Courbot , Grygorii Strashko Subject: Re: [RFC PATCH 1/2] genirq: Add runtime resume/suspend support for IRQ chips In-Reply-To: <1447166377-19707-2-git-send-email-jonathanh@nvidia.com> Message-ID: References: <1447166377-19707-1-git-send-email-jonathanh@nvidia.com> <1447166377-19707-2-git-send-email-jonathanh@nvidia.com> User-Agent: Alpine 2.11 (DEB 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2606 Lines: 91 Jon, On Tue, 10 Nov 2015, Jon Hunter wrote: > void (*irq_suspend)(struct irq_data *data); > void (*irq_resume)(struct irq_data *data); > + int (*irq_runtime_suspend)(struct irq_data *data); > + int (*irq_runtime_resume)(struct irq_data *data); > void (*irq_pm_shutdown)(struct irq_data *data); So this is the second patch within a few days which adds that just with different names: http://lkml.kernel.org/r/1446668160-17522-2-git-send-email-soren.brinkmann@xilinx.com Can you folks please tell me which of the names is the correct one? > +/* Inline functions for support of irq chips that require runtime pm */ > +static inline int chip_runtime_resume(struct irq_desc *desc) > +{ > + if (!desc->irq_data.chip->irq_runtime_resume) > + return 0; > + > + return desc->irq_data.chip->irq_runtime_resume(&desc->irq_data); > +} > + > +static inline int chip_runtime_suspend(struct irq_desc *desc) > +{ > + if (!desc->irq_data.chip->irq_runtime_suspend) > + return 0; > + > + return desc->irq_data.chip->irq_runtime_suspend(&desc->irq_data); We really don't need a return value for that one. > +} > + > #define _IRQ_DESC_CHECK (1 << 0) > #define _IRQ_DESC_PERCPU (1 << 1) > > diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c > index 0eebaeef317b..66e33df73140 100644 > --- a/kernel/irq/manage.c > +++ b/kernel/irq/manage.c > @@ -1116,6 +1116,10 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) > if (!try_module_get(desc->owner)) > return -ENODEV; > > + ret = chip_runtime_resume(desc); > + if (ret < 0) > + return ret; Leaks module ref count. > + > new->irq = irq; > > /* > @@ -1393,6 +1397,7 @@ out_thread: > put_task_struct(t); > } > out_mput: > + chip_runtime_suspend(desc); > module_put(desc->owner); > return ret; > } > @@ -1506,6 +1511,7 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id) > } > } > > + chip_runtime_suspend(desc); > module_put(desc->owner); > kfree(action->secondary); > return action; > @@ -1792,6 +1798,7 @@ static struct irqaction *__free_percpu_irq(unsigned int irq, void __percpu *dev_ > > unregister_handler_proc(irq, action); > > + chip_runtime_suspend(desc); Where is the corresponding call in request_percpu_irq() ? Can you folks please agree on something which is correct and complete? Thanks, tglx -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/