1. 01 9月, 2014 1 次提交
    • T
      genirq: Simplify wakeup mechanism · 9ce7a258
      Thomas Gleixner 提交于
      Currently we suspend wakeup interrupts by lazy disabling them and
      check later whether the interrupt has fired, but that's not sufficient
      for suspend to idle as there is no way to check that once we
      transitioned into the CPU idle state.
      
      So we change the mechanism in the following way:
      
      1) Leave the wakeup interrupts enabled across suspend
      
      2) Add a check to irq_may_run() which is called at the beginning of
         each flow handler whether the interrupt is an armed wakeup source.
      
         This check is basically free as it just extends the existing check
         for IRQD_IRQ_INPROGRESS. So no new conditional in the hot path.
      
         If the IRQD_WAKEUP_ARMED flag is set, then the interrupt is
         disabled, marked as pending/suspended and the pm core is notified
         about the wakeup event.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      [ rjw: syscore.c and put irq_pm_check_wakeup() into pm.c ]
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      9ce7a258
  2. 07 6月, 2014 1 次提交
    • T
      PM / sleep: trace events for suspend/resume · bb3632c6
      Todd E Brandt 提交于
      Adds trace events that give finer resolution into suspend/resume. These
      events are graphed in the timelines generated by the analyze_suspend.py
      script. They represent large areas of time consumed that are typical to
      suspend and resume.
      
      The event is triggered by calling the function "trace_suspend_resume"
      with three arguments: a string (the name of the event to be displayed
      in the timeline), an integer (case specific number, such as the power
      state or cpu number), and a boolean (where true is used to denote the start
      of the timeline event, and false to denote the end).
      
      The suspend_resume trace event reproduces the data that the machine_suspend
      trace event did, so the latter has been removed.
      Signed-off-by: NTodd Brandt <todd.e.brandt@intel.com>
      Acked-by: NSteven Rostedt <rostedt@goodmis.org>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      bb3632c6
  3. 11 7月, 2011 1 次提交
    • C
      PM: Reintroduce dropped call to check_wakeup_irqs · 88759622
      Colin Cross 提交于
      Patch 2e711c04
      (PM: Remove sysdev suspend, resume and shutdown operations)
      deleted sysdev_suspend(), which was being relied on to call
      check_wakeup_irqs() in suspend.  If check_wakeup_irqs() is not
      called, wake interrupts that are pending when suspend is
      entered may be lost.  It also breaks IRQCHIP_MASK_ON_SUSPEND,
      which is handled in check_wakeup_irqs().
      
      This patch adds a call to check_wakeup_irqs() in syscore_suspend(),
      similar to what was deleted in sysdev_suspend().
      Signed-off-by: NColin Cross <ccross@android.com>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      88759622
  4. 20 4月, 2011 1 次提交
  5. 15 3月, 2011 1 次提交
    • R
      PM / Core: Introduce struct syscore_ops for core subsystems PM · 40dc166c
      Rafael J. Wysocki 提交于
      Some subsystems need to carry out suspend/resume and shutdown
      operations with one CPU on-line and interrupts disabled.  The only
      way to register such operations is to define a sysdev class and
      a sysdev specifically for this purpose which is cumbersome and
      inefficient.  Moreover, the arguments taken by sysdev suspend,
      resume and shutdown callbacks are practically never necessary.
      
      For this reason, introduce a simpler interface allowing subsystems
      to register operations to be executed very late during system suspend
      and shutdown and very early during resume in the form of
      strcut syscore_ops objects.
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      Acked-by: NGreg Kroah-Hartman <gregkh@suse.de>
      40dc166c