lkml.org 
[lkml]   [2016]   [Nov]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] PM / wakeirq: report wakeup events in dedicated wake-IRQs
    * Rafael J. Wysocki <rafael@kernel.org> [161110 16:06]:
    > On Thu, Nov 10, 2016 at 7:49 PM, Brian Norris <briannorris@chromium.org> wrote:
    > > On Thu, Nov 10, 2016 at 10:13:55AM -0800, Dmitry Torokhov wrote:
    > >> On Thu, Nov 10, 2016 at 10:07 AM, Brian Norris <briannorris@chromium.org> wrote:
    > >> > It's important that user space can figure out what device woke the
    > >> > system from suspend -- e.g., for debugging, or for implementing
    > >> > conditional wake behavior. Dedicated wakeup IRQs don't currently do
    > >> > that.
    > >> >
    > >> > Let's report the event (pm_wakeup_event()) and also allow drivers to
    > >> > synchronize with these events in their resume path (hence, disable_irq()
    > >> > instead of disable_irq_nosync()).
    > >>
    > >> Hmm, dev_pm_disable_wake_irq() is called from
    > >> rpm_suspend()/rpm_resume() that take dev->power.lock spinlock and
    > >> disable interrupts. Dropping _nosync() feels dangerous.
    > >
    > > Indeed. So how do you suggest we get sane wakeup reports? Every device
    > > or bus that's going to use the dedicated wake APIs has to
    > > synchronize_irq() [1] in their resume() routine? Seems like an odd
    > > implementation detail to have to remember (and therefore most drivers
    > > will get it wrong).
    > >
    > > Brian
    > >
    > > [1] Or maybe at least create a helper API that will extract the
    > > dedicated wake IRQ number and do the synchronize_irq() for us, so
    > > drivers don't have to stash this separately (or poke at
    > > dev->power.wakeirq->irq) for no good reason.
    >
    > Well, in the first place, can anyone please refresh my memory on why
    > it is necessary to call dev_pm_disable_wake_irq() under power.lock?

    I guess no other reason except we need to manage the wakeirq
    for rpm_callback(). So we dev_pm_enable_wake_irq() before
    rpm_callback() in rpm_suspend(), then disable on resume.

    Regards,

    Tony

    \
     
     \ /
      Last update: 2016-11-11 17:32    [W:3.987 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site