Commit Graph

568 Commits

Author SHA1 Message Date
黄涛
109b0ba094 Merge remote-tracking branch 'stable/linux-3.0.y' into develop-3.0-jb
Conflicts:
	Makefile
	drivers/net/tun.c
	drivers/net/wireless/rt2x00/rt61pci.c
	drivers/usb/core/hub.c
	sound/soc/codecs/wm8994.c
2012-08-21 13:11:48 +08:00
Srivatsa S. Bhat
31b1c08507 ftrace: Disable function tracing during suspend/resume and hibernation, again
commit 443772d408 upstream.

If function tracing is enabled for some of the low-level suspend/resume
functions, it leads to triple fault during resume from suspend, ultimately
ending up in a reboot instead of a resume (or a total refusal to come out
of suspended state, on some machines).

This issue was explained in more detail in commit f42ac38c59 (ftrace:
disable tracing for suspend to ram). However, the changes made by that commit
got reverted by commit cbe2f5a6e8 (tracing: allow tracing of
suspend/resume & hibernation code again). So, unfortunately since things are
not yet robust enough to allow tracing of low-level suspend/resume functions,
suspend/resume is still broken when ftrace is enabled.

So fix this by disabling function tracing during suspend/resume & hibernation.

Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-08-09 08:27:35 -07:00
黄涛
30be6d7972 Merge remote-tracking branch 'common/android-3.0' into develop-3.0-jb
Conflicts:
	drivers/cpufreq/cpufreq_interactive.c
	drivers/misc/pmem.c
	drivers/net/usb/asix.c
	drivers/net/wireless/ath/ath9k/ani.c
	drivers/net/wireless/ath/ath9k/ar5008_phy.c
	drivers/net/wireless/ath/ath9k/ar9002_hw.c
	drivers/net/wireless/ath/ath9k/ar9003_calib.c
	drivers/net/wireless/ath/ath9k/ar9003_mac.c
	drivers/net/wireless/ath/ath9k/ar9003_phy.h
	drivers/net/wireless/ath/ath9k/calib.c
	drivers/net/wireless/ath/ath9k/hif_usb.c
	drivers/net/wireless/ath/ath9k/hw.c
	drivers/net/wireless/ath/ath9k/hw.h
	drivers/net/wireless/ath/ath9k/main.c
	drivers/net/wireless/ath/ath9k/rc.c
	drivers/net/wireless/ath/ath9k/recv.c
	drivers/net/wireless/b43/main.c
	drivers/net/wireless/bcm4319/aiutils.c
	drivers/net/wireless/bcm4319/bcmsdh.c
	drivers/net/wireless/bcm4319/bcmsdh_linux.c
	drivers/net/wireless/bcm4319/bcmsdh_sdmmc.c
	drivers/net/wireless/bcm4319/bcmsdh_sdmmc_linux.c
	drivers/net/wireless/bcm4319/bcmutils.c
	drivers/net/wireless/bcm4319/dhd_common.c
	drivers/net/wireless/bcm4319/dhd_proto.h
	drivers/net/wireless/bcm4319/dhd_sdio.c
	drivers/net/wireless/bcm4319/hndpmu.c
	drivers/net/wireless/bcm4319/include/aidmp.h
	drivers/net/wireless/bcm4319/include/bcmcdc.h
	drivers/net/wireless/bcm4319/include/bcmdefs.h
	drivers/net/wireless/bcm4319/include/bcmdevs.h
	drivers/net/wireless/bcm4319/include/bcmendian.h
	drivers/net/wireless/bcm4319/include/bcmpcispi.h
	drivers/net/wireless/bcm4319/include/bcmperf.h
	drivers/net/wireless/bcm4319/include/bcmsdbus.h
	drivers/net/wireless/bcm4319/include/bcmsdh.h
	drivers/net/wireless/bcm4319/include/bcmsdh_sdmmc.h
	drivers/net/wireless/bcm4319/include/bcmsdpcm.h
	drivers/net/wireless/bcm4319/include/bcmsdspi.h
	drivers/net/wireless/bcm4319/include/bcmsdstd.h
	drivers/net/wireless/bcm4319/include/bcmspi.h
	drivers/net/wireless/bcm4319/include/bcmutils.h
	drivers/net/wireless/bcm4319/include/bcmwifi.h
	drivers/net/wireless/bcm4319/include/dhdioctl.h
	drivers/net/wireless/bcm4319/include/epivers.h
	drivers/net/wireless/bcm4319/include/hndpmu.h
	drivers/net/wireless/bcm4319/include/hndrte_armtrap.h
	drivers/net/wireless/bcm4319/include/hndrte_cons.h
	drivers/net/wireless/bcm4319/include/hndsoc.h
	drivers/net/wireless/bcm4319/include/linux_osl.h
	drivers/net/wireless/bcm4319/include/linuxver.h
	drivers/net/wireless/bcm4319/include/miniopt.h
	drivers/net/wireless/bcm4319/include/msgtrace.h
	drivers/net/wireless/bcm4319/include/osl.h
	drivers/net/wireless/bcm4319/include/packed_section_end.h
	drivers/net/wireless/bcm4319/include/packed_section_start.h
	drivers/net/wireless/bcm4319/include/pcicfg.h
	drivers/net/wireless/bcm4319/include/proto/802.11e.h
	drivers/net/wireless/bcm4319/include/proto/802.1d.h
	drivers/net/wireless/bcm4319/include/proto/bcmeth.h
	drivers/net/wireless/bcm4319/include/proto/bcmevent.h
	drivers/net/wireless/bcm4319/include/proto/bcmip.h
	drivers/net/wireless/bcm4319/include/proto/eapol.h
	drivers/net/wireless/bcm4319/include/proto/ethernet.h
	drivers/net/wireless/bcm4319/include/proto/sdspi.h
	drivers/net/wireless/bcm4319/include/proto/vlan.h
	drivers/net/wireless/bcm4319/include/proto/wpa.h
	drivers/net/wireless/bcm4319/include/sbchipc.h
	drivers/net/wireless/bcm4319/include/sbconfig.h
	drivers/net/wireless/bcm4319/include/sbhnddma.h
	drivers/net/wireless/bcm4319/include/sbpcmcia.h
	drivers/net/wireless/bcm4319/include/sbsdio.h
	drivers/net/wireless/bcm4319/include/sbsdpcmdev.h
	drivers/net/wireless/bcm4319/include/sbsocram.h
	drivers/net/wireless/bcm4319/include/sdio.h
	drivers/net/wireless/bcm4319/include/sdioh.h
	drivers/net/wireless/bcm4319/include/sdiovar.h
	drivers/net/wireless/bcm4319/include/siutils.h
	drivers/net/wireless/bcm4319/include/trxhdr.h
	drivers/net/wireless/bcm4319/include/typedefs.h
	drivers/net/wireless/bcm4319/siutils.c
	drivers/net/wireless/bcm4319/wl_iw.c
	drivers/net/wireless/bcm4319/wl_iw.h
	drivers/net/wireless/bcmdhd/Kconfig
	drivers/net/wireless/bcmdhd/Makefile
	drivers/net/wireless/bcmdhd/bcmevent.c
	drivers/net/wireless/bcmdhd/dhd.h
	drivers/net/wireless/bcmdhd/dhd_cdc.c
	drivers/net/wireless/bcmdhd/dhd_linux.c
	drivers/net/wireless/bcmdhd/dhd_wlfc.h
	drivers/net/wireless/bcmdhd/include/Makefile
	drivers/net/wireless/bcmdhd/include/htsf.h
	drivers/net/wireless/bcmdhd/include/proto/802.11.h
	drivers/net/wireless/bcmdhd/include/proto/802.11_bta.h
	drivers/net/wireless/bcmdhd/include/proto/bt_amp_hci.h
	drivers/net/wireless/bcmdhd/include/proto/p2p.h
	drivers/net/wireless/bcmdhd/include/wlfc_proto.h
	drivers/net/wireless/bcmdhd/include/wlioctl.h
	drivers/net/wireless/bcmdhd/linux_osl.c
	drivers/net/wireless/bcmdhd/wl_android.c
	drivers/net/wireless/bcmdhd/wl_android.h
	drivers/net/wireless/bcmdhd/wl_cfg80211.c
	drivers/net/wireless/bcmdhd/wl_cfg80211.h
	drivers/net/wireless/bcmdhd/wl_cfgp2p.c
	drivers/net/wireless/bcmdhd/wl_cfgp2p.h
	drivers/net/wireless/bcmdhd/wl_linux_mon.c
	drivers/net/wireless/bcmdhd/wldev_common.c
	drivers/net/wireless/bcmdhd/wldev_common.h
	drivers/net/wireless/ipw2x00/ipw2200.c
	drivers/net/wireless/iwlwifi/iwl-agn-lib.c
	drivers/net/wireless/iwlwifi/iwl-agn-tx.c
	drivers/net/wireless/iwlwifi/iwl-agn-ucode.c
	drivers/net/wireless/iwlwifi/iwl-agn.c
	drivers/net/wireless/iwlwifi/iwl-agn.h
	drivers/net/wireless/iwlwifi/iwl-core.c
	drivers/net/wireless/iwlwifi/iwl-hcmd.c
	drivers/net/wireless/iwlwifi/iwl-rx.c
	drivers/net/wireless/iwlwifi/iwl-tx.c
	drivers/net/wireless/libertas/if_spi.c
	drivers/net/wireless/p54/p54spi.c
	drivers/net/wireless/rt2x00/rt2800lib.c
	drivers/net/wireless/rt2x00/rt2800pci.c
	drivers/net/wireless/rt2x00/rt2800usb.c
	drivers/net/wireless/rt2x00/rt2x00.h
	drivers/net/wireless/rt2x00/rt2x00dev.c
	drivers/net/wireless/rt2x00/rt2x00mac.c
	drivers/net/wireless/rt2x00/rt2x00queue.c
	drivers/usb/serial/option.c
2012-07-12 18:08:01 +08:00
黄涛
193a36f096 rk: earlysuspend: only works on system is running 2012-05-31 09:43:26 +08:00
Todd Poynor
94225ab0be Merge linux-stable 3.0.28 into android-3.0
Change-Id: Iee820738e53627f5d0447a87ceff34443aa72786
Signed-off-by: Todd Poynor <toddpoynor@google.com>
2012-04-19 15:20:03 -07:00
Srivatsa S. Bhat
65554407a7 PM / Hibernate: Enable usermodehelpers in hibernate() error path
commit 05b4877f6a upstream.

If create_basic_memory_bitmaps() fails, usermodehelpers are not re-enabled
before returning. Fix this. And while at it, reword the goto labels so that
they look more meaningful.

Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-04-02 09:27:18 -07:00
Colin Cross
dd5fa6df90 cpu_pm: Add cpu power management notifiers
During some CPU power modes entered during idle, hotplug and
suspend, peripherals located in the CPU power domain, such as
the GIC, localtimers, and VFP, may be powered down.  Add a
notifier chain that allows drivers for those peripherals to
be notified before and after they may be reset.

Notified drivers can include VFP co-processor, interrupt controller
and it's PM extensions, local CPU timers context save/restore which
shouldn't be interrupted. Hence CPU PM event APIs  must be called
with interrupts disabled.

Signed-off-by: Colin Cross <ccross@android.com>
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Reviewed-by: Kevin Hilman <khilman@ti.com>
Tested-and-Acked-by: Shawn Guo <shawn.guo@linaro.org>
Tested-by: Kevin Hilman <khilman@ti.com>
Tested-by: Vishwanath BS <vishwanath.bs@ti.com>

Conflicts:

	kernel/power/Kconfig
2012-02-22 14:09:44 +08:00
黄涛
c6e6466d05 power: fix lcd resume taking long time with an ongoing file copy
port from msm:
This fixes the issue where LCD takes a long time to come back up
since the execution of backlight on and late_resume works by the
suspend worker thread is delayed due to one (or more) of the
sys_sync calls in early_suspend and suspend paths taking a long
time (sometimes 15sec or more) for the below reported scenario(s):

Scenario 1 (copy with usb connected):
1. plug usb
2. adb shell
3. busybox cp /sdcard/file1 /sdcard/file2 (copy >= 100MB file1
   in sdcard/emmc to file2 in sdcard/emmc)
4. press end key to suspend
5. press end key again and it takes a long time for LCD to come
   back up

Scenario 2 (background copy):
1. plug usb
2. adb shell
3. busybox cp /sdcard/file1 /sdcard/file2 & (copy >= 100MB file1
   in sdcard/emmc to file2 in sdcard/emmc)
4. disconnect usb
5. press end key to suspend
6. press end key again and it takes a long time for LCD to come
   back up

A more common form of Scenario 2 is for the user to just use the
copy function on the UI to copy large file(s).

We address this by moving sys_sync calls to a separate workqueue
and having a timeout polling based mechanism to bail out of suspend
in case of user invoking a wakeup event (like end key press) while
we are waiting for the sys_sync completion at the synchronization
point in suspend worker thread context.
2011-12-28 14:46:00 +08:00
黄涛
901836f4a7 Revert "earlysuspend: Temporary enable debug"
This reverts commit 9b6c7f264c.

Disable earlysuspend debug for release.
2011-12-07 09:49:02 +08:00
黄涛
9b6c7f264c earlysuspend: Temporary enable debug 2011-11-22 17:17:13 +08:00
黄涛
541a6baf74 earlysuspend: revert to default version 2011-11-22 17:17:13 +08:00
Dan Carpenter
f450df8004 PM / Suspend: Off by one in pm_suspend()
commit 528f7ce6e4 upstream.

In enter_state() we use "state" as an offset for the pm_states[]
array.  The pm_states[] array only has PM_SUSPEND_MAX elements so
this test is off by one.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-11-11 09:37:17 -08:00
黄涛
8aac13f440 Merge remote-tracking branch 'remotes/aosp/android-3.0' into develop-3.0
Conflicts:
	drivers/mmc/card/block.c
	drivers/net/usb/asix.c
	drivers/net/wireless/airo.c
	drivers/net/wireless/ath/ath5k/base.c
	drivers/net/wireless/ath/ath9k/ar9002_calib.c
	drivers/net/wireless/ath/ath9k/ar9002_hw.c
	drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
	drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
	drivers/net/wireless/ath/ath9k/ar9003_hw.c
	drivers/net/wireless/ath/ath9k/ar9003_phy.h
	drivers/net/wireless/ath/ath9k/hw.c
	drivers/net/wireless/ath/ath9k/hw.h
	drivers/net/wireless/ath/ath9k/init.c
	drivers/net/wireless/ath/ath9k/main.c
	drivers/net/wireless/ath/ath9k/pci.c
	drivers/net/wireless/b43/main.c
	drivers/net/wireless/hostap/hostap_main.c
	drivers/net/wireless/iwlwifi/iwl-5000.c
	drivers/net/wireless/iwlwifi/iwl-agn.c
	drivers/net/wireless/iwlwifi/iwl-core.h
	drivers/net/wireless/iwlwifi/iwl-power.c
	drivers/net/wireless/iwlwifi/iwl-scan.c
	drivers/net/wireless/iwlwifi/iwl-tx.c
	drivers/net/wireless/rt2x00/rt2800lib.c
	drivers/net/wireless/rt2x00/rt2800usb.c
	drivers/net/wireless/rt2x00/rt2x00mac.c
	drivers/net/wireless/rt2x00/rt2x00queue.c
	drivers/net/wireless/rt2x00/rt2x00queue.h
	drivers/net/wireless/rt2x00/rt2x00usb.c
	drivers/usb/serial/option.c
2011-11-09 13:06:28 +08:00
黄涛
1bcabbad76 Revert "temp revert rk change"
This reverts commit 15f7fabcb8.

Conflicts:

	.gitignore
	arch/arm/boot/compressed/head.S
	arch/arm/common/gic.c
	arch/arm/kernel/Makefile
	arch/arm/mm/proc-v7.S
	arch/arm/tools/mach-types
	arch/arm/vfp/vfphw.S
	drivers/Kconfig
	drivers/Makefile
	drivers/char/Makefile
	drivers/cpufreq/cpufreq_ondemand.c
	drivers/gpio/gpiolib.c
	drivers/gpio/tps65910-gpio.c
	drivers/input/Makefile
	drivers/input/keyboard/Kconfig
	drivers/input/keyboard/Makefile
	drivers/input/touchscreen/Kconfig
	drivers/media/video/Makefile
	drivers/media/video/ov2640.c
	drivers/media/video/soc_camera.c
	drivers/media/video/uvc/uvc_v4l2.c
	drivers/media/video/v4l2-ioctl.c
	drivers/mfd/Kconfig
	drivers/mfd/Makefile
	drivers/mfd/wm831x-core.c
	drivers/mfd/wm831x-i2c.c
	drivers/mfd/wm831x-irq.c
	drivers/mfd/wm831x-spi.c
	drivers/mfd/wm8994-core.c
	drivers/misc/Kconfig
	drivers/misc/Makefile
	drivers/misc/pmem.c
	drivers/mmc/card/block.c
	drivers/mmc/core/core.c
	drivers/mmc/core/mmc.c
	drivers/mmc/core/sd.c
	drivers/mmc/core/sdio.c
	drivers/mmc/host/Makefile
	drivers/net/wireless/Kconfig
	drivers/net/wireless/Makefile
	drivers/net/wireless/bcm4329/bcmsdh_linux.c
	drivers/net/wireless/bcm4329/dhd.h
	drivers/net/wireless/bcm4329/dhd_linux.c
	drivers/net/wireless/bcm4329/wl_iw.c
	drivers/net/wireless/bcm4329/wl_iw.h
	drivers/power/wm831x_power.c
	drivers/regulator/Makefile
	drivers/regulator/core.c
	drivers/regulator/tps65910-regulator.c
	drivers/regulator/wm831x-dcdc.c
	drivers/regulator/wm831x-isink.c
	drivers/regulator/wm831x-ldo.c
	drivers/rtc/Kconfig
	drivers/rtc/Makefile
	drivers/serial/Kconfig
	drivers/serial/Makefile
	drivers/staging/Kconfig
	drivers/staging/Makefile
	drivers/usb/Makefile
	drivers/usb/gadget/Kconfig
	drivers/usb/gadget/android.c
	drivers/usb/gadget/f_mass_storage.c
	drivers/usb/serial/option.c
	drivers/video/backlight/wm831x_bl.c
	fs/fat/dir.c
	fs/fat/fatent.c
	fs/fat/inode.c
	fs/yaffs2/yaffs_fs.c
	fs/yaffs2/yaffs_mtdif2.c
	include/linux/i2c.h
	include/linux/mfd/wm831x/core.h
	include/linux/mfd/wm831x/pdata.h
	include/linux/mfd/wm8994/core.h
	include/linux/mfd/wm8994/pdata.h
	include/linux/regulator/consumer.h
	include/media/v4l2-chip-ident.h
	kernel/power/earlysuspend.c
	kernel/power/wakelock.c
	kernel/sys.c
	mm/page_alloc.c
	sound/soc/codecs/Kconfig
	sound/soc/codecs/Makefile
	sound/soc/codecs/wm8900.c
	sound/soc/codecs/wm8988.c
	sound/soc/codecs/wm8994.c
	sound/soc/codecs/wm8994.h
	sound/soc/codecs/wm_hubs.c
	sound/soc/soc-cache.c
2011-11-04 17:43:18 +08:00
Todd Poynor
7013f49763 PM: Backoff suspend if repeated attempts fail
Change-Id: I32289676d95a307ea3aa5e78f6c126ca979c0fec
Signed-off-by: Todd Poynor <toddpoynor@google.com>
2011-09-06 13:49:57 -07:00
Todd Poynor
ca64b0cd3a PM: wakelocks: Display wakelocks preventing suspend by default
Use DEBUG_WAKEUP flag to show wakelocks that abort suspend, in
addition to showing wakelocks held during system resume.
DEBUG_WAKEUP is enabled by default.

Change-Id: If6fa68e8afbc482a5300ffab2964694b02b34f41
Signed-off-by: Todd Poynor <toddpoynor@google.com>
2011-08-10 16:14:56 -07:00
Todd Poynor
ed27e538aa PM: wakelocks: Don't report wake up wakelock if suspend aborted
If the wakelock driver aborts suspend due to an already-held
wakelock, don't report the next wakelock held as the "wake up
wakelock".

Change-Id: I582ffbb87a3c361739a77d839a0c62921cff11a6
Signed-off-by: Todd Poynor <toddpoynor@google.com>
2011-08-08 19:03:09 -07:00
Erik Gilling
fec502d9a1 earlysuspend: add verbose debug flag
when enabled, prints out the function of each handler as they are called

Change-Id: I5ed251867e0e3aa3cd05f030ff3579808cedd0c2
Signed-off-by: Erik Gilling <konkers@android.com>
2011-07-21 14:09:16 -07:00
Colin Cross
07b02fbd98 power: Add option to log time spent in suspend
Prints the time spent in suspend in the kernel log, and
keeps statistics on the time spent in suspend in
/sys/kernel/debug/suspend_time

Change-Id: Ia6b9ebe4baa0f7f5cd211c6a4f7e813aefd3fa1d
Signed-off-by: Colin Cross <ccross@android.com>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
2011-07-20 15:40:48 -07:00
Colin Cross
75c56a8111 Merge commit 'v3.0-rc7' into android-3.0 2011-07-12 20:10:37 -07:00
Rafael J. Wysocki
4d4cf23cdd PM / Hibernate: Fix free_unnecessary_pages()
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: Rafael J. Wysocki <rjw@sisk.pl>
Reported-and-tested-by: Matthew Garrett <mjg@redhat.com>
Cc: stable@kernel.org
2011-07-06 20:15:23 +02:00
Colin Cross
e55d4fa967 Merge commit 'v3.0-rc5' into android-3.0 2011-06-29 13:54:42 -07:00
Michal Kubecek
8440f4b194 PM: Free memory bitmaps if opening /dev/snapshot fails
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: Michal Kubecek <mkubecek@suse.cz>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Cc: stable@kernel.org
2011-06-21 23:20:06 +02:00
Colin Cross
28e23cf73c power: wakelock: use get_xtime_and_monotonic_and_sleep_offset in get_expired_time
Change-Id: I6ebe6b954b2ff328d46898d683650dafb9c4fe74
Signed-off-by: Erik Gilling <konkers@android.com>
2011-06-14 09:09:53 -07:00
Erik Gilling
435aacd2a0 power: wakelock: call __get_wall_to_monotonic() instead of using wall_to_monotonic
Change-Id: I9e9c3b923bf9a22ffd48f80a72050289496e57d8
2011-06-14 09:09:35 -07:00
Colin Cross
0c7841ce3e wakelock: Fix operator precedence bug
Change-Id: I21366ace371d1b8f4684ddbe4ea8d555a926ac21
Signed-off-by: Colin Cross <ccross@google.com>
2011-06-14 09:09:34 -07:00
Mike Chan
af62b25adb power: wakelock: Print active wakelocks when has_wake_lock() is called
When DEBUG_SUSPEND is enabled print active wakelocks when we check
if there are any active wakelocks.

In print_active_locks(), print expired wakelocks if DEBUG_EXPIRE is enabled

Change-Id: Ib1cb795555e71ff23143a2bac7c8a58cbce16547
Signed-off-by: Mike Chan <mike@android.com>
2011-06-14 09:09:27 -07:00
Rebecca Schultz
4b0ea27fc8 PM: earlysuspend: Removing dependence on console.
Rather than signaling a full update of the display from userspace via a
console switch, this patch introduces 2 files int /sys/power,
wait_for_fb_sleep and wait_for_fb_wake.  Reading these files will block
until the requested state has been entered.  When a read from
wait_for_fb_sleep returns userspace should stop drawing.  When
wait_for_fb_wake returns, it should do a full update.  If either are called
when the fb driver is already in the requested state, they will return
immediately.

Signed-off-by: Rebecca Schultz <rschultz@google.com>
Signed-off-by: Arve Hjønnevåg <arve@android.com>
2011-06-14 09:08:43 -07:00
Arve Hjønnevåg
b28a6a111c consoleearlysuspend: Fix for 2.6.32
vt_waitactive now needs a 1 based console number

Change-Id: I07ab9a3773c93d67c09d928c8d5494ce823ffa2e
2011-06-14 09:08:43 -07:00
Arve Hjønnevåg
c8bb31538d PM: earlysuspend: Add console switch when user requested sleep state changes.
Signed-off-by: Arve Hjønnevåg <arve@android.com>
2011-06-14 09:08:43 -07:00
Arve Hjønnevåg
01e13543e4 PM: wakelock: Don't dump unfrozen task list when aborting try_to_freeze_tasks after less than one second
Change-Id: Ib2976e5b97a5ee4ec9abd4d4443584d9257d0941
Signed-off-by: Arve Hjønnevåg <arve@android.com>
2011-06-14 09:08:43 -07:00
Arve Hjønnevåg
677f10402f PM: wakelock: Abort task freezing if a wake lock is held.
Avoids a problem where the device sometimes hangs for 20 seconds
before the screen is turned on.
2011-06-14 09:08:43 -07:00
Arve Hjønnevåg
47dfb46bf6 PM: Add user-space wake lock api.
This adds /sys/power/wake_lock and /sys/power/wake_unlock.
Writing a string to wake_lock creates a wake lock the
first time is sees a string and locks it. Optionally, the
string can be followed by a timeout.
To unlock the wake lock, write the same string to wake_unlock.

Change-Id: I66c6e3fe6487d17f9c2fafde1174042e57d15cd7
2011-06-14 09:08:42 -07:00
Arve Hjønnevåg
b0dc34309f PM: Enable early suspend through /sys/power/state
If EARLYSUSPEND is enabled then writes to /sys/power/state no longer
blocks, and the kernel will try to enter the requested state every
time no wakelocks are held. Write "on" to resume normal operation.
2011-06-14 09:08:42 -07:00
Arve Hjønnevåg
c1783f55b1 PM: Implement early suspend api 2011-06-14 09:08:42 -07:00
Arve Hjønnevåg
1b0749512f PM: wakelocks: Use seq_file for /proc/wakelocks so we can get more than 3K of stats.
Change-Id: I42ed8bea639684f7a8a95b2057516764075c6b01
Signed-off-by: Arve Hjønnevåg <arve@android.com>
2011-06-14 09:08:42 -07:00
Erik Gilling
10f0138c56 power: wakelocks: fix buffer overflow in print_wake_locks
Change-Id: Ic944e3b3d3bc53eddc6fd0963565fd072cac373c
Signed-off-by: Erik Gilling <konkers@android.com>
2011-06-14 09:08:42 -07:00
Mike Chan
97a0a74383 power: Prevent spinlock recursion when wake_unlock() is called
Signed-off-by: Mike Chan <mike@android.com>
2011-06-14 09:08:42 -07:00
Arve Hjønnevåg
fe6cd633ef PM: Implement wakelock api.
PM: wakelock: Replace expire work with a timer

The expire work function did not work in the normal case.

Signed-off-by: Arve Hjønnevåg <arve@android.com>
2011-06-14 09:08:41 -07:00
Rafael J. Wysocki
f42a9813fb PM / Hibernate: Update kerneldoc comments in hibernate.c
Some of the kerneldoc comments in kernel/power/hibernate.c are
outdated and some of them don't adhere to the kernel's standards.
Update them and make them look in a consistent way.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Randy Dunlap <randy.dunlap@oracle.com>
2011-05-24 23:36:06 +02:00
Rafael J. Wysocki
354258011e PM / Hibernate: Remove arch_prepare_suspend()
All architectures supporting hibernation define
arch_prepare_suspend() as an empty function, so remove it.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
2011-05-24 23:35:55 +02:00
Rafael J. Wysocki
4e2d9491a7 PM / Hibernate: Update some comments in core hibernate code
Some comments in the core hibernate code are outdated, some aren't
necessary any more and at least one of them is plain wrong.  Remove
those comments or update them.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
2011-05-24 00:21:26 +02:00
Rafael J. Wysocki
91e7c75ba9 PM: Allow drivers to allocate memory from .prepare() callbacks safely
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: Rafael J. Wysocki <rjw@sisk.pl>
2011-05-17 23:26:00 +02:00
Rafael J. Wysocki
c650da23d5 PM: Remove CONFIG_PM_VERBOSE
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=23182
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
2011-05-17 23:25:10 +02:00
Rafael J. Wysocki
290c748725 Merge branch 'power-domains' into for-linus
* power-domains:
  PM: Fix build issue in clock_ops.c for CONFIG_PM_RUNTIME unset
  PM: Revert "driver core: platform_bus: allow runtime override of dev_pm_ops"
  OMAP1 / PM: Use generic clock manipulation routines for runtime PM
  PM / Runtime: Generic clock manipulation rountines for runtime PM (v6)
  PM / Runtime: Add subsystem data field to struct dev_pm_info
  OMAP2+ / PM: move runtime PM implementation to use device power domains
  PM / Platform: Use generic runtime PM callbacks directly
  shmobile: Use power domains for platform runtime PM
  PM: Export platform bus type's default PM callbacks
  PM: Make power domain callbacks take precedence over subsystem ones
2011-05-17 23:23:46 +02:00
Rafael J. Wysocki
2d2a9163bd Merge branch 'syscore' into for-linus
* syscore:
  PM: Remove sysdev suspend, resume and shutdown operations
  PM / PowerPC: Use struct syscore_ops instead of sysdevs for PM
  PM / UNICORE32: Use struct syscore_ops instead of sysdevs for PM
  PM / AVR32: Use struct syscore_ops instead of sysdevs for PM
  PM / Blackfin: Use struct syscore_ops instead of sysdevs for PM
  ARM / Samsung: Use struct syscore_ops for "core" power management
  ARM / PXA: Use struct syscore_ops for "core" power management
  ARM / SA1100: Use struct syscore_ops for "core" power management
  ARM / Integrator: Use struct syscore_ops for core PM
  ARM / OMAP: Use struct syscore_ops for "core" power management
  ARM: Use struct syscore_ops instead of sysdevs for PM in common code
2011-05-17 23:23:40 +02:00
Rafael J. Wysocki
1c1be3a949 Revert "PM / Hibernate: Reduce autotuned default image size"
This reverts commit bea3864fb6
(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: Rafael J. Wysocki <rjw@sisk.pl>
2011-05-17 23:19:19 +02:00
Rafael J. Wysocki
ddeb648708 PM / Hibernate: Add sysfs knob to control size of memory for drivers
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=34102
Reported-and-tested-by: Martin Steigerwald <Martin@Lichtvoll.de>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
2011-05-17 23:19:19 +02:00
MyungJoo Ham
3c43193608 PM / Suspend: Do not ignore error codes returned by suspend_enter()
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: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
2011-05-17 23:19:16 +02:00
Rafael J. Wysocki
2e711c04db PM: Remove sysdev suspend, resume and shutdown operations
Since suspend, resume and shutdown operations in struct sysdev_class
and struct sysdev_driver are not used any more, remove them.  Also
drop sysdev_suspend(), sysdev_resume() and sysdev_shutdown() used
for executing those operations and modify all of their users
accordingly.  This reduces kernel code size quite a bit and reduces
its complexity.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-05-11 21:37:15 +02:00