1. 17 10月, 2011 3 次提交
    • M
      PM / Hibernate: Include storage keys in hibernation image on s390 · 85055dd8
      Martin Schwidefsky 提交于
      For s390 there is one additional byte associated with each page,
      the storage key. This byte contains the referenced and changed
      bits and needs to be included into the hibernation image.
      If the storage keys are not restored to their previous state all
      original pages would appear to be dirty. This can cause
      inconsistencies e.g. with read-only filesystems.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      85055dd8
    • R
      PM: Fix build issue in main.c for CONFIG_PM_SLEEP unset · ca123102
      Rafael J. Wysocki 提交于
      Suspend statistics should depend on CONFIG_PM_SLEEP, so make that
      happen.
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      ca123102
    • S
      PM / Suspend: Add statistics debugfs file for suspend to RAM · 2a77c46d
      ShuoX Liu 提交于
      Record S3 failure time about each reason and the latest two failed
      devices' names in S3 progress.
      We can check it through 'suspend_stats' entry in debugfs.
      
      The motivation of the patch:
      
      We are enabling power features on Medfield. Comparing with PC/notebook,
      a mobile enters/exits suspend-2-ram (we call it s3 on Medfield) far
      more frequently. If it can't enter suspend-2-ram in time, the power
      might be used up soon.
      
      We often find sometimes, a device suspend fails. Then, system retries
      s3 over and over again. As display is off, testers and developers
      don't know what happens.
      
      Some testers and developers complain they don't know if system
      tries suspend-2-ram, and what device fails to suspend. They need
      such info for a quick check. The patch adds suspend_stats under
      debugfs for users to check suspend to RAM statistics quickly.
      
      If not using this patch, we have other methods to get info about
      what device fails. One is to turn on  CONFIG_PM_DEBUG, but users
      would get too much info and testers need recompile the system.
      
      In addition, dynamic debug is another good tool to dump debug info.
      But it still doesn't match our utilization scenario closely.
      1) user need write a user space parser to process the syslog output;
      2) Our testing scenario is we leave the mobile for at least hours.
         Then, check its status. No serial console available during the
         testing. One is because console would be suspended, and the other
         is serial console connecting with spi or HSU devices would consume
         power. These devices are powered off at suspend-2-ram.
      Signed-off-by: NShuoX Liu <shuox.liu@intel.com>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      2a77c46d
  2. 25 8月, 2011 6 次提交
  3. 14 8月, 2011 1 次提交
  4. 16 7月, 2011 3 次提交
    • A
      PM: Improve error code of pm_notifier_call_chain() · f0c077a8
      Akinobu Mita 提交于
      This enables pm_notifier_call_chain() to get the actual error code
      in the callback rather than always assume -EINVAL by converting all
      PM notifier calls to return encapsulate error code with
      notifier_from_errno().
      Signed-off-by: NAkinobu Mita <akinobu.mita@gmail.com>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      f0c077a8
    • K
      PM / Suspend: Export suspend_set_ops, suspend_valid_only_mem · a5e4fd87
      Kevin Hilman 提交于
      Some platforms wish to implement their PM core suspend code as
      modules.  To do so, these functions need to be exported to modules.
      
      [rjw: Replaced EXPORT_SYMBOL with EXPORT_SYMBOL_GPL]
      Reported-by: NJean Pihet <j-pihet@ti.com>
      Signed-off-by: NKevin Hilman <khilman@ti.com>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      a5e4fd87
    • M
      PM / Suspend: Add .suspend_again() callback to suspend_ops · 3b5fe852
      MyungJoo Ham 提交于
      A system or a device may need to control suspend/wakeup events. It may
      want to wakeup the system after a predefined amount of time or at a
      predefined event decided while entering suspend for polling or delayed
      work. Then, it may want to enter suspend again if its predefined wakeup
      condition is the only wakeup reason and there is no outstanding events;
      thus, it does not wakeup the userspace unnecessary or unnecessary
      devices and keeps suspended as long as possible (saving the power).
      
      Enabling a system to wakeup after a specified time can be easily
      achieved by using RTC. However, to enter suspend again immediately
      without invoking userland and unrelated devices, we need additional
      features in the suspend framework.
      
      Such need comes from:
      
       1. Monitoring a critical device status without interrupts that can
      wakeup the system. (in-suspend polling)
       An example is ambient temperature monitoring that needs to shut down
      the system or a specific device function if it is too hot or cold. The
      temperature of a specific device may be needed to be monitored as well;
      e.g., a charger monitors battery temperature in order to stop charging
      if overheated.
      
       2. Execute critical "delayed work" at suspend.
       A driver or a system/board may have a delayed work (or any similar
      things) that it wants to execute at the requested time.
       For example, some chargers want to check the battery voltage some
      time (e.g., 30 seconds) after the battery is fully charged and the
      charger has stopped. Then, the charger restarts charging if the voltage
      has dropped more than a threshold, which is smaller than "restart-charger"
      voltage, which is a threshold to restart charging regardless of the
      time passed.
      
      This patch allows to add "suspend_again" callback at struct
      platform_suspend_ops and let the "suspend_again" callback return true if
      the system is required to enter suspend again after the current instance
      of wakeup. Device-wise suspend_again implemented at dev_pm_ops or
      syscore is not done because: a) suspend_again feature is usually under
      platform-wise decision and controls the behavior of the whole platform
      and b) There are very limited devices related to the usage cases of
      suspend_again; chargers and temperature sensors are mentioned so far.
      
      With suspend_again callback registered at struct platform_suspend_ops
      suspend_ops in kernel/power/suspend.c with suspend_set_ops by the
      platform, the suspend framework tries to enter suspend again by
      looping suspend_enter() if suspend_again has returned true and there has
      been no errors in the suspending sequence or pending wakeups (by
      pm_wakeup_pending).
      
      Tested at Exynos4-NURI.
      
      [rjw: Fixed up kerneldoc comment for suspend_enter().]
      Signed-off-by: NMyungJoo Ham <myungjoo.ham@samsung.com>
      Signed-off-by: NKyungmin Park <kyungmin.park@samsung.com>
      Acked-by: NPavel Machek <pavel@ucw.cz>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      3b5fe852
  5. 11 7月, 2011 1 次提交
  6. 07 7月, 2011 1 次提交
    • R
      PM / Hibernate: Fix free_unnecessary_pages() · 4d4cf23c
      Rafael J. Wysocki 提交于
      There is a bug in free_unnecessary_pages() that causes it to
      attempt to free too many pages in some cases, which triggers the
      BUG_ON() in memory_bm_clear_bit() for copy_bm.  Namely, if
      count_data_pages() is initially greater than alloc_normal, we get
      to_free_normal equal to 0 and "save" greater from 0.  In that case,
      if the sum of "save" and count_highmem_pages() is greater than
      alloc_highmem, we subtract a positive number from to_free_normal.
      Hence, since to_free_normal was 0 before the subtraction and is
      an unsigned int, the result is converted to a huge positive number
      that is used as the number of pages to free.
      
      Fix this bug by checking if to_free_normal is actually greater
      than or equal to the number we're going to subtract from it.
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      Reported-and-tested-by: NMatthew Garrett <mjg@redhat.com>
      Cc: stable@kernel.org
      4d4cf23c
  7. 02 7月, 2011 2 次提交
    • R
      PM: Allow the clocks management code to be used during system suspend · b7b95920
      Rafael J. Wysocki 提交于
      The common clocks management code in drivers/base/power/clock_ops.c
      is going to be used during system-wide power transitions as well as
      for runtime PM, so it shouldn't depend on CONFIG_PM_RUNTIME.
      However, the suspend/resume functions provided by it for
      CONFIG_PM_RUNTIME unset, to be used during system-wide power
      transitions, should not behave in the same way as their counterparts
      defined for CONFIG_PM_RUNTIME set, because in that case the clocks
      are managed differently at run time.
      
      The names of the functions still contain the word "runtime" after
      this change, but that is going to be modified by a separate patch
      later.
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      Reviewed-by: NKevin Hilman <khilman@ti.com>
      b7b95920
    • R
      PM / Domains: Support for generic I/O PM domains (v8) · f721889f
      Rafael J. Wysocki 提交于
      Introduce common headers, helper functions and callbacks allowing
      platforms to use simple generic power domains for runtime power
      management.
      
      Introduce struct generic_pm_domain to be used for representing
      power domains that each contain a number of devices and may be
      parent domains or subdomains with respect to other power domains.
      Among other things, this structure includes callbacks to be
      provided by platforms for performing specific tasks related to
      power management (i.e. ->stop_device() may disable a device's
      clocks, while ->start_device() may enable them, ->power_off() is
      supposed to remove power from the entire power domain
      and ->power_on() is supposed to restore it).
      
      Introduce functions that can be used as power domain runtime PM
      callbacks, pm_genpd_runtime_suspend() and pm_genpd_runtime_resume(),
      as well as helper functions for the initialization of a power
      domain represented by a struct generic_power_domain object,
      adding a device to or removing a device from it and adding or
      removing subdomains.
      
      Introduce configuration option CONFIG_PM_GENERIC_DOMAINS to be
      selected by the platforms that want to use the new code.
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      Acked-by: NGreg Kroah-Hartman <gregkh@suse.de>
      Reviewed-by: NKevin Hilman <khilman@ti.com>
      f721889f
  8. 22 6月, 2011 1 次提交
    • M
      PM: Free memory bitmaps if opening /dev/snapshot fails · 8440f4b1
      Michal Kubecek 提交于
      When opening /dev/snapshot device, snapshot_open() creates memory
      bitmaps which are freed in snapshot_release(). But if any of the
      callbacks called by pm_notifier_call_chain() returns NOTIFY_BAD, open()
      fails, snapshot_release() is never called and bitmaps are not freed.
      Next attempt to open /dev/snapshot then triggers BUG_ON() check in
      create_basic_memory_bitmaps(). This happens e.g. when vmwatchdog module
      is active on s390x.
      Signed-off-by: NMichal Kubecek <mkubecek@suse.cz>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      Cc: stable@kernel.org
      8440f4b1
  9. 25 5月, 2011 2 次提交
  10. 24 5月, 2011 1 次提交
  11. 18 5月, 2011 5 次提交
    • R
      PM: Allow drivers to allocate memory from .prepare() callbacks safely · 91e7c75b
      Rafael J. Wysocki 提交于
      If device drivers allocate substantial amounts of memory (above 1 MB)
      in their hibernate .freeze() callbacks (or in their legacy suspend
      callbcks during hibernation), the subsequent creation of hibernate
      image may fail due to the lack of memory.  This is the case, because
      the drivers' .freeze() callbacks are executed after the hibernate
      memory preallocation has been carried out and the preallocated amount
      of memory may be too small to cover the new driver allocations.
      Unfortunately, the drivers' .prepare() callbacks also are executed
      after the hibernate memory preallocation has completed, so they are
      not suitable for allocating additional memory either.  Thus the only
      way a driver can safely allocate memory during hibernation is to use
      a hibernate/suspend notifier.  However, the notifiers are called
      before the freezing of user space and the drivers wanting to use them
      for allocating additional memory may not know how much memory needs
      to be allocated at that point.
      
      To let device drivers overcome this difficulty rework the hibernation
      sequence so that the memory preallocation is carried out after the
      drivers' .prepare() callbacks have been executed, so that the
      .prepare() callbacks can be used for allocating additional memory
      to be used by the drivers' .freeze() callbacks.  Update documentation
      to match the new behavior of the code.
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      91e7c75b
    • R
      PM: Remove CONFIG_PM_VERBOSE · c650da23
      Rafael J. Wysocki 提交于
      Now that we have CONFIG_DYNAMIC_DEBUG there is no need for yet
      another flag causing dev_dbg() and pr_debug() statements in the
      core PM code to produce output.  Moreover, CONFIG_PM_VERBOSE
      causes so much output to be generated that it's not really useful
      and almost no one sets it.
      
      References: https://bugzilla.kernel.org/show_bug.cgi?id=23182Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      c650da23
    • R
      Revert "PM / Hibernate: Reduce autotuned default image size" · 1c1be3a9
      Rafael J. Wysocki 提交于
      This reverts commit bea3864f
      (PM / Hibernate: Reduce autotuned default image size), because users
      are now able to resolve the issue this commit was supposed to address
      in a different way (i.e. by using the new /sys/power/reserved_size
      interface).
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      1c1be3a9
    • R
      PM / Hibernate: Add sysfs knob to control size of memory for drivers · ddeb6487
      Rafael J. Wysocki 提交于
      Martin reports that on his system hibernation occasionally fails due
      to the lack of memory, because the radeon driver apparently allocates
      too much of it during the device freeze stage.  It turns out that the
      amount of memory allocated by radeon during hibernation (and
      presumably during system suspend too) depends on the utilization of
      the GPU (e.g. hibernating while there are two KDE 4 sessions with
      compositing enabled causes radeon to allocate more memory than for
      one KDE 4 session).
      
      In principle it should be possible to use image_size to make the
      memory preallocation mechanism free enough memory for the radeon
      driver, but in practice it is not easy to guess the right value
      because of the way the preallocation code uses image_size.  For this
      reason, it seems reasonable to allow users to control the amount of
      memory reserved for driver allocations made after the hibernate
      preallocation, which currently is constant and amounts to 1 MB.
      
      Introduce a new sysfs file, /sys/power/reserved_size, whose value
      will be used as the amount of memory to reserve for the
      post-preallocation reservations made by device drivers, in bytes.
      For backwards compatibility, set its default (and initial) value to
      the currently used number (1 MB).
      
      References: https://bugzilla.kernel.org/show_bug.cgi?id=34102Reported-and-tested-by: NMartin Steigerwald <Martin@Lichtvoll.de>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      ddeb6487
    • M
      PM / Suspend: Do not ignore error codes returned by suspend_enter() · 3c431936
      MyungJoo Ham 提交于
      The current implementation of suspend-to-RAM returns 0 if there is an
      error from suspend_enter(), because suspend_devices_and_enter() ignores
      the return value from suspend_enter().  This patch addresses this issue
      and properly keep the error return from suspend_enter() and let
      suspend_devices_and_enter relay the error return.
      Signed-off-by: NMyungJoo Ham <myungjoo.ham@samsung.com>
      Signed-off-by: NKyungmin Park <kyungmin.park@samsung.com>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      3c431936
  12. 12 5月, 2011 4 次提交
  13. 30 4月, 2011 1 次提交
  14. 19 4月, 2011 1 次提交
  15. 12 4月, 2011 2 次提交
  16. 31 3月, 2011 1 次提交
  17. 17 3月, 2011 1 次提交
  18. 15 3月, 2011 4 次提交