[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAD=FV=X0wjOYC9u1y=fhDTVSW+jd5G8ydSYJEE-a8BTfnhRgTA@mail.gmail.com>
Date: Tue, 8 Sep 2020 12:05:21 -0700
From: Doug Anderson <dianders@...omium.org>
To: Thomas Gleixner <tglx@...utronix.de>
Cc: Maulik Shah <mkshah@...eaurora.org>,
Stephen Boyd <swboyd@...omium.org>,
Bjorn Andersson <bjorn.andersson@...aro.org>,
Evan Green <evgreen@...omium.org>,
LinusW <linus.walleij@...aro.org>, Marc Zyngier <maz@...nel.org>,
Matthias Kaehlcke <mka@...omium.org>,
LKML <linux-kernel@...r.kernel.org>,
linux-arm-msm <linux-arm-msm@...r.kernel.org>,
"open list:GPIO SUBSYSTEM" <linux-gpio@...r.kernel.org>,
Andy Gross <agross@...nel.org>,
Jason Cooper <jason@...edaemon.net>,
Rajendra Nayak <rnayak@...eaurora.org>,
Lina Iyer <ilina@...eaurora.org>,
Srinivas Rao L <lsrao@...eaurora.org>,
"Rafael J. Wysocki" <rafael@...nel.org>
Subject: Re: [PATCH v5 3/6] genirq/PM: Introduce IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND
flag
Hi,
On Fri, Sep 4, 2020 at 2:54 AM Thomas Gleixner <tglx@...utronix.de> wrote:
>
> Doug,
>
> On Thu, Sep 03 2020 at 16:19, Doug Anderson wrote:
> > On Thu, Sep 3, 2020 at 5:57 AM Thomas Gleixner <tglx@...utronix.de> wrote:
> >> That pending interrupt will not prevent the machine from going into
> >> suspend and if it's an edge interrupt then an unmask in
> >> suspend_device_irq() won't help. Edge interrupts are not resent in
> >> hardware. They are fire and forget from the POV of the device
> >> hardware.
> >
> > Ah, interesting. I didn't think about this case exactly. I might
> > have a fix for it anyway. At some point in time I was thinking that
> > the world could be solved by relying on lazily-disabled interrupts and
> > I wrote up a patch to make sure that they woke things up. If you're
> > willing to check out our gerrit you can look at:
> >
> > https://crrev.com/c/2314693
> >
> > ...if not I can post it as a RFC for you.
>
> I actually tried despite my usual aversion against web
> interfaces. Aversion confirmed :)
>
> You could have included the 5 lines of patch into your reply to spare me
> the experience. :)
Sorry! :( Inline patches are a bit of a pain for me since I'm
certifiably insane and use the gmail web interface for kernel mailing
lists. Everyone has their pet aversions, I guess. ;-)
> > I'm sure I've solved the problem in a completely incorrect and broken
> > way, but hopefully the idea makes sense. In discussion we decided not
> > to go this way because it looked like IRQ clients could request an IRQ
> > with IRQ_DISABLE_UNLAZY and then that'd break us. :( ...but even so I
> > think the patch is roughly right and would address your point #1.
>
> Kinda :) But that's still incomplete because it does not handle the case
> where the interrupt arrives between disable_irq() and enable_irq_wake().
> See below.
Huh, I thought I'd handled this with the code in irq_set_irq_wake()
which checked if it was pending and did a wakeup. In any case, I
trust your understanding of this code far better than I trust mine.
How should we proceed then? Do you want to post up an official patch?
At the moment I don't have any test cases that need your patch since
the interrupts I'm dealing with are not lazily disabled. However, I
still do agree that it's the right thing to do.
> >> 2) irq chip has a irq_disable() callback or has IRQ_DISABLE_UNLAZY set
> >>
> >> In that case disable_irq() will mask it at the hardware level and it
> >> stays that way until enable_irq() is invoked.
> >>
> >> #1 kinda works and the gap is reasonably trivial to fix in
> >> suspend_device_irq() by checking the pending state and telling the PM
> >> core that there is a wakeup pending.
> >>
> >> #2 Needs an indication from the chip flags that an interrupt which is
> >> masked has to be unmasked when it is a enabled wakeup source.
> >>
> >> I assume your problem is #2, right? If it's #1 then UNMASK_IF_WAKEUP is
> >> the wrong answer.
> >
> > Right, the problem is #2. We're not in the lazy mode.
>
> Right and that's where we want the new chip flag with the unmask if
> armed.
OK, so we're back in Maulik's court to spin, right? I think the last
word before our tangent was at:
http://lore.kernel.org/r/87y2m1vhkm.fsf@nanos.tec.linutronix.de
There you were leaning towards #2 ("a new function
disable_wakeup_irq_for_suspend()"). Presumably you'd now be
suggesting #1 ("Do the symmetric thing") since I've pointed out the
bunch of drivers that would need to change.
-Doug
Powered by blists - more mailing lists