From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934090AbcHaMms (ORCPT ); Wed, 31 Aug 2016 08:42:48 -0400 Received: from mail-wm0-f41.google.com ([74.125.82.41]:37816 "EHLO mail-wm0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933204AbcHaMmq (ORCPT ); Wed, 31 Aug 2016 08:42:46 -0400 Date: Wed, 31 Aug 2016 13:44:32 +0100 From: Lee Jones To: Charles Keepax Cc: linux-kernel@vger.kernel.org, patches@opensource.wolfsonmicro.com Subject: Re: [PATCH] mfd: arizona: Use suspend_noirq inplace of suspend_late Message-ID: <20160831124432.GH9415@dell> References: <1472549590-4345-1-git-send-email-ckeepax@opensource.wolfsonmicro.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1472549590-4345-1-git-send-email-ckeepax@opensource.wolfsonmicro.com> User-Agent: Mutt/1.6.2 (2016-07-01) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 30 Aug 2016, Charles Keepax wrote: > As runtime PM doesn't function whilst processing system suspend/resume > operations and the Arizona IRQ handlers need runtime PM to function > we must disable IRQs during these operations. Whilst this is > already done in the driver we are using suspend/suspend_late and > resume/resume_noirq to do so which has two problems. Firstly, as > suspend_late is before suspend_noirq that means we still have a > small window where an IRQ can cause issues. Secondly, if another > suspend_late handler fails after ours has run then (as resume_noirq > will not run) we will make unbalanced calls to enable_irq. > > This is all simply fixed by using the suspend_noirq callback rather > than suspend_late. Whilst we are doing this tidy the code up a little, > and use the appropriate helper macros. > > Signed-off-by: Charles Keepax > --- > drivers/mfd/arizona-core.c | 10 ++++------ > 1 file changed, 4 insertions(+), 6 deletions(-) Applied, thanks. > diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c > index 34a2c26..fe2277d 100644 > --- a/drivers/mfd/arizona-core.c > +++ b/drivers/mfd/arizona-core.c > @@ -735,7 +735,7 @@ static int arizona_suspend(struct device *dev) > return 0; > } > > -static int arizona_suspend_late(struct device *dev) > +static int arizona_suspend_noirq(struct device *dev) > { > struct arizona *arizona = dev_get_drvdata(dev); > > @@ -759,7 +759,7 @@ static int arizona_resume(struct device *dev) > { > struct arizona *arizona = dev_get_drvdata(dev); > > - dev_dbg(arizona->dev, "Late resume, reenabling IRQ\n"); > + dev_dbg(arizona->dev, "Resume, reenabling IRQ\n"); > enable_irq(arizona->irq); > > return 0; > @@ -771,10 +771,8 @@ const struct dev_pm_ops arizona_pm_ops = { > arizona_runtime_resume, > NULL) > SET_SYSTEM_SLEEP_PM_OPS(arizona_suspend, arizona_resume) > -#ifdef CONFIG_PM_SLEEP > - .suspend_late = arizona_suspend_late, > - .resume_noirq = arizona_resume_noirq, > -#endif > + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(arizona_suspend_noirq, > + arizona_resume_noirq) > }; > EXPORT_SYMBOL_GPL(arizona_pm_ops); > -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog