linux_dsm_epyc7002/Documentation/ABI/testing
Rafael J. Wysocki c125e96f04 PM: Make it possible to avoid races between wakeup and system sleep
One of the arguments during the suspend blockers discussion was that
the mainline kernel didn't contain any mechanisms making it possible
to avoid races between wakeup and system suspend.

Generally, there are two problems in that area.  First, if a wakeup
event occurs exactly when /sys/power/state is being written to, it
may be delivered to user space right before the freezer kicks in, so
the user space consumer of the event may not be able to process it
before the system is suspended.  Second, if a wakeup event occurs
after user space has been frozen, it is not generally guaranteed that
the ongoing transition of the system into a sleep state will be
aborted.

To address these issues introduce a new global sysfs attribute,
/sys/power/wakeup_count, associated with a running counter of wakeup
events and three helper functions, pm_stay_awake(), pm_relax(), and
pm_wakeup_event(), that may be used by kernel subsystems to control
the behavior of this attribute and to request the PM core to abort
system transitions into a sleep state already in progress.

The /sys/power/wakeup_count file may be read from or written to by
user space.  Reads will always succeed (unless interrupted by a
signal) and return the current value of the wakeup events counter.
Writes, however, will only succeed if the written number is equal to
the current value of the wakeup events counter.  If a write is
successful, it will cause the kernel to save the current value of the
wakeup events counter and to abort the subsequent system transition
into a sleep state if any wakeup events are reported after the write
has returned.

[The assumption is that before writing to /sys/power/state user space
will first read from /sys/power/wakeup_count.  Next, user space
consumers of wakeup events will have a chance to acknowledge or
veto the upcoming system transition to a sleep state.  Finally, if
the transition is allowed to proceed, /sys/power/wakeup_count will
be written to and if that succeeds, /sys/power/state will be written
to as well.  Still, if any wakeup events are reported to the PM core
by kernel subsystems after that point, the transition will be
aborted.]

Additionally, put a wakeup events counter into struct dev_pm_info and
make these per-device wakeup event counters available via sysfs,
so that it's possible to check the activity of various wakeup event
sources within the kernel.

To illustrate how subsystems can use pm_wakeup_event(), make the
low-level PCI runtime PM wakeup-handling code use it.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
Acked-by: markgross <markgross@thegnar.org>
Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
2010-07-19 01:58:48 +02:00
..
debugfs-kmemtrace kmemtrace: Fix typos in documentation. 2008-12-29 15:34:09 +02:00
debugfs-pktcdvd doc: use correct debugfs mountpoint 2009-04-13 15:04:33 -07:00
ima_policy ima: rename PATH_CHECK to FILE_CHECK 2010-02-07 03:06:23 -05:00
procfs-diskstats tree-wide: fix assorted typos all over the place 2009-12-04 15:39:55 +01:00
sysfs-block block: Added in stricter no merge semantics for block I/O 2010-01-29 09:04:08 +01:00
sysfs-bus-css [S390] cio: Introduce modalias for css bus. 2008-07-14 10:02:05 +02:00
sysfs-bus-pci Revert "PCI: create function symlinks in /sys/bus/pci/slots/N/" 2010-06-11 13:08:37 -07:00
sysfs-bus-pci-devices-cciss cciss: Add usage_count attribute to each logical drive in /sys 2009-10-01 21:15:44 +02:00
sysfs-bus-umc uwb: document UWB and WUSB sysfs files 2008-09-17 16:54:35 +01:00
sysfs-bus-usb USB: deprecate the power/level sysfs attribute 2010-05-20 13:21:37 -07:00
sysfs-bus-usb-devices-usbsevseg USB: Added driver for a Delcom USB 7-segment LED Display 2008-10-17 14:40:51 -07:00
sysfs-c2port Add c2 port support 2008-11-12 17:17:18 -08:00
sysfs-class [PATCH] Add kernel<->userspace ABI stability documentation 2006-06-21 12:40:47 -07:00
sysfs-class-bdi fuse: fix bdi naming conflict 2008-05-24 09:56:07 -07:00
sysfs-class-lcd video/lcd: document sysfs interface 2009-08-28 15:21:12 -04:00
sysfs-class-led led: document sysfs interface 2009-08-28 15:21:12 -04:00
sysfs-class-mtd Documentation: add MTD sysfs docs 2009-05-29 15:13:04 +01:00
sysfs-class-pktcdvd [PATCH] pktcdvd: cleanup 2007-02-11 10:51:28 -08:00
sysfs-class-power ds2760_battery: Document ABI change 2010-05-19 12:25:39 +04:00
sysfs-class-regulator regulator: add get_status() 2009-03-31 09:56:20 +01:00
sysfs-class-uwb_rc uwb: add basic radio manager 2008-11-19 14:46:33 +00:00
sysfs-class-uwb_rc-wusbhc USB: wusb: add wusb_phy_rate sysfs file to host controllers 2009-12-11 11:55:16 -08:00
sysfs-dev sysfs: add /sys/dev/{char,block} to lookup sysfs path by major:minor 2008-07-21 21:54:40 -07:00
sysfs-devices [PATCH] Add kernel<->userspace ABI stability documentation 2006-06-21 12:40:47 -07:00
sysfs-devices-memory Documentation/: it's -> its where appropriate 2010-04-23 02:09:52 +02:00
sysfs-devices-node mm: compaction: add /sys trigger for per-node memory compaction 2010-05-25 08:06:59 -07:00
sysfs-devices-platform-_UDC_-gadget USB: Composite framework: Add suspended sysfs entry 2010-05-20 13:21:39 -07:00
sysfs-devices-power PM: Add facility for advanced testing of async suspend/resume 2010-02-26 20:39:10 +01:00
sysfs-devices-system-cpu Documentation: ABI: /sys/devices/system/cpu/cpu#/node 2009-12-15 08:53:18 -08:00
sysfs-driver-hid-picolcd HID: split picolcd's operation_mode sysfs attribute 2010-04-27 15:31:26 +02:00
sysfs-driver-hid-prodikeys HID: Prodikeys PC-MIDI HID Driver 2010-05-12 15:18:59 +02:00
sysfs-driver-hid-roccat-kone HID: add driver for Roccat Kone gaming mouse 2010-03-22 16:31:42 +01:00
sysfs-firmware-acpi ACPI: add /sys/firmware/acpi/interrupts/sci_not counter 2009-04-21 00:35:47 -04:00
sysfs-firmware-memmap Bernhard has moved 2009-02-18 15:37:56 -08:00
sysfs-firmware-sfi SFI: add sysfs interface for SFI tables. 2010-05-27 12:46:20 -04:00
sysfs-firmware-sgi_uv sysfs: document files in /sys/firmware/sgi_uv/ 2008-09-02 19:21:40 -07:00
sysfs-fs-ext4 ext4: teach the inode allocator to use a goal inode number 2009-06-13 11:45:35 -04:00
sysfs-gpio gpiolib: allow poll() on value 2009-09-23 07:39:48 -07:00
sysfs-ibft Firmware: add iSCSI iBFT Support 2008-04-19 19:10:28 -07:00
sysfs-kernel-mm mm: create /sys/kernel/mm 2008-07-24 10:47:17 -07:00
sysfs-kernel-mm-hugepages hugetlb: new sysfs interface 2008-07-24 10:47:17 -07:00
sysfs-kernel-slab slub: allow stats to be cleared 2009-10-15 21:34:12 +03:00
sysfs-kernel-uids Documentation: create new scheduler/ subdirectory 2008-02-07 08:42:17 -08:00
sysfs-memory-page-offline HWPOISON: Add soft page offline support 2009-12-16 12:20:00 +01:00
sysfs-ocfs2 ocfs2: Document /sys/fs/ocfs2 2008-04-18 08:56:07 -07:00
sysfs-platform-asus-laptop asus-laptop: set the right paths in the documentation 2010-02-28 19:35:09 +01:00
sysfs-platform-eeepc-laptop eeepc-laptop: set the right paths in the documentation 2010-02-28 19:30:57 +01:00
sysfs-power PM: Make it possible to avoid races between wakeup and system sleep 2010-07-19 01:58:48 +02:00
sysfs-pps LinuxPPS: core support 2009-06-18 13:04:04 -07:00
sysfs-profiling profiling: dynamically enable readprofile at runtime 2008-10-16 11:21:31 -07:00
sysfs-wacom HID: wacom: add ABI doc entry for speed attribute 2010-04-23 02:14:10 +02:00
sysfs-wusb_cbaf uwb: document UWB and WUSB sysfs files 2008-09-17 16:54:35 +01:00