* [PATCH 0/3] Hibernate cleanups
@ 2011-05-21 12:08 Rafael J. Wysocki
2011-05-21 12:09 ` [PATCH 1/3] PM / Hibernate: Update some comments in core hibernate code Rafael J. Wysocki
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Rafael J. Wysocki @ 2011-05-21 12:08 UTC (permalink / raw)
To: Linux PM mailing list, Frank Hofmann
Cc: LKML, linux-sh, Ralf Baechle, Benjamin Herrenschmidt
Hi,
Following are three hibernate patches I didn't have the time to
work on before.
[1/3] - Update comments in kernel/power/hibernate.c
[2/3] - Remove arch_prepare_suspend()
[3/3] - Update kerneldoc comments in kernel/power/hibernate.c
Since they don't make any functional changes, I don't think it makes sense
to wait with them for the next merge window, so I'd like to push them
for 2.6.40 if no one objects.
Thanks,
Rafael
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH 1/3] PM / Hibernate: Update some comments in core hibernate code 2011-05-21 12:08 [PATCH 0/3] Hibernate cleanups Rafael J. Wysocki @ 2011-05-21 12:09 ` Rafael J. Wysocki 2011-05-21 12:10 ` [PATCH 2/3] PM / Hibernate: Remove arch_prepare_suspend() Rafael J. Wysocki ` (2 subsequent siblings) 3 siblings, 0 replies; 10+ messages in thread From: Rafael J. Wysocki @ 2011-05-21 12:09 UTC (permalink / raw) To: Linux PM mailing list Cc: Frank Hofmann, LKML, linux-sh, Ralf Baechle, Benjamin Herrenschmidt From: Rafael J. Wysocki <rjw@sisk.pl> 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> --- kernel/power/hibernate.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) Index: linux-2.6/kernel/power/hibernate.c =================================--- linux-2.6.orig/kernel/power/hibernate.c +++ linux-2.6/kernel/power/hibernate.c @@ -248,12 +248,6 @@ static int create_image(int platform_mod if (error) return error; - /* At this point, dpm_suspend_start() has been called, but *not* - * dpm_suspend_noirq(). We *must* call dpm_suspend_noirq() now. - * Otherwise, drivers for some devices (e.g. interrupt controllers) - * become desynchronized with the actual state of the hardware - * at resume time, and evil weirdness ensues. - */ error = dpm_suspend_noirq(PMSG_FREEZE); if (error) { printk(KERN_ERR "PM: Some devices failed to power down, " @@ -297,9 +291,6 @@ static int create_image(int platform_mod Power_up: syscore_resume(); - /* NOTE: dpm_resume_noirq() is just a resume() for devices - * that suspended with irqs off ... no overall powerup. - */ Enable_irqs: local_irq_enable(); @@ -416,24 +407,26 @@ static int resume_target_kernel(bool pla if (error) goto Enable_irqs; - /* We'll ignore saved state, but this gets preempt count (etc) right */ save_processor_state(); error = restore_highmem(); if (!error) { error = swsusp_arch_resume(); /* * The code below is only ever reached in case of a failure. - * Otherwise execution continues at place where - * swsusp_arch_suspend() was called + * Otherwise, execution continues at the place where + * swsusp_arch_suspend() was called. */ BUG_ON(!error); - /* This call to restore_highmem() undos the previous one */ + /* + * This call to restore_highmem() reverts the changes made by + * the previous one. + */ restore_highmem(); } /* * The only reason why swsusp_arch_resume() can fail is memory being * very tight, so we have to free it as soon as we can to avoid - * subsequent failures + * subsequent failures. */ swsusp_free(); restore_processor_state(); ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/3] PM / Hibernate: Remove arch_prepare_suspend() 2011-05-21 12:08 [PATCH 0/3] Hibernate cleanups Rafael J. Wysocki 2011-05-21 12:09 ` [PATCH 1/3] PM / Hibernate: Update some comments in core hibernate code Rafael J. Wysocki @ 2011-05-21 12:10 ` Rafael J. Wysocki 2011-06-02 3:14 ` Pavel Machek 2011-06-06 13:49 ` Ralf Baechle 2011-05-21 12:12 ` [PATCH 3/3] PM / Hibernate: Update kerneldoc comments in hibernate.c Rafael J. Wysocki 2011-05-24 12:35 ` [PATCH 0/3] Hibernate cleanups Frank Hofmann 3 siblings, 2 replies; 10+ messages in thread From: Rafael J. Wysocki @ 2011-05-21 12:10 UTC (permalink / raw) To: Linux PM mailing list Cc: Frank Hofmann, LKML, linux-sh, Ralf Baechle, Benjamin Herrenschmidt From: Rafael J. Wysocki <rjw@sisk.pl> All architectures supporting hibernation define arch_prepare_suspend() as an empty function, so remove it. Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> --- arch/frv/include/asm/suspend.h | 20 -------------------- arch/mips/include/asm/suspend.h | 2 -- arch/powerpc/include/asm/suspend.h | 6 ------ arch/s390/include/asm/suspend.h | 10 ---------- arch/sh/include/asm/suspend.h | 1 - arch/unicore32/include/asm/suspend.h | 1 - arch/x86/include/asm/suspend_32.h | 2 -- arch/x86/include/asm/suspend_64.h | 5 ----- kernel/power/hibernate.c | 4 ---- 9 files changed, 51 deletions(-) Index: linux-2.6/arch/frv/include/asm/suspend.h =================================--- linux-2.6.orig/arch/frv/include/asm/suspend.h +++ /dev/null @@ -1,20 +0,0 @@ -/* suspend.h: suspension stuff - * - * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. - * Written by David Howells (dhowells@redhat.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - */ - -#ifndef _ASM_SUSPEND_H -#define _ASM_SUSPEND_H - -static inline int arch_prepare_suspend(void) -{ - return 0; -} - -#endif /* _ASM_SUSPEND_H */ Index: linux-2.6/arch/s390/include/asm/suspend.h =================================--- linux-2.6.orig/arch/s390/include/asm/suspend.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef __ASM_S390_SUSPEND_H -#define __ASM_S390_SUSPEND_H - -static inline int arch_prepare_suspend(void) -{ - return 0; -} - -#endif - Index: linux-2.6/arch/sh/include/asm/suspend.h =================================--- linux-2.6.orig/arch/sh/include/asm/suspend.h +++ linux-2.6/arch/sh/include/asm/suspend.h @@ -3,7 +3,6 @@ #ifndef __ASSEMBLY__ #include <linux/notifier.h> -static inline int arch_prepare_suspend(void) { return 0; } #include <asm/ptrace.h> Index: linux-2.6/arch/mips/include/asm/suspend.h =================================--- linux-2.6.orig/arch/mips/include/asm/suspend.h +++ linux-2.6/arch/mips/include/asm/suspend.h @@ -1,8 +1,6 @@ #ifndef __ASM_SUSPEND_H #define __ASM_SUSPEND_H -static inline int arch_prepare_suspend(void) { return 0; } - /* References to section boundaries */ extern const void __nosave_begin, __nosave_end; Index: linux-2.6/arch/powerpc/include/asm/suspend.h =================================--- linux-2.6.orig/arch/powerpc/include/asm/suspend.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __ASM_POWERPC_SUSPEND_H -#define __ASM_POWERPC_SUSPEND_H - -static inline int arch_prepare_suspend(void) { return 0; } - -#endif /* __ASM_POWERPC_SUSPEND_H */ Index: linux-2.6/arch/unicore32/include/asm/suspend.h =================================--- linux-2.6.orig/arch/unicore32/include/asm/suspend.h +++ linux-2.6/arch/unicore32/include/asm/suspend.h @@ -14,7 +14,6 @@ #define __UNICORE_SUSPEND_H__ #ifndef __ASSEMBLY__ -static inline int arch_prepare_suspend(void) { return 0; } #include <asm/ptrace.h> Index: linux-2.6/arch/x86/include/asm/suspend_32.h =================================--- linux-2.6.orig/arch/x86/include/asm/suspend_32.h +++ linux-2.6/arch/x86/include/asm/suspend_32.h @@ -9,8 +9,6 @@ #include <asm/desc.h> #include <asm/i387.h> -static inline int arch_prepare_suspend(void) { return 0; } - /* image of the saved processor state */ struct saved_context { u16 es, fs, gs, ss; Index: linux-2.6/arch/x86/include/asm/suspend_64.h =================================--- linux-2.6.orig/arch/x86/include/asm/suspend_64.h +++ linux-2.6/arch/x86/include/asm/suspend_64.h @@ -9,11 +9,6 @@ #include <asm/desc.h> #include <asm/i387.h> -static inline int arch_prepare_suspend(void) -{ - return 0; -} - /* * Image of the saved processor state, used by the low level ACPI suspend to * RAM code and by the low level hibernation code. Index: linux-2.6/kernel/power/hibernate.c =================================--- linux-2.6.orig/kernel/power/hibernate.c +++ linux-2.6/kernel/power/hibernate.c @@ -244,10 +244,6 @@ static int create_image(int platform_mod { int error; - error = arch_prepare_suspend(); - if (error) - return error; - error = dpm_suspend_noirq(PMSG_FREEZE); if (error) { printk(KERN_ERR "PM: Some devices failed to power down, " ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/3] PM / Hibernate: Remove arch_prepare_suspend() 2011-05-21 12:10 ` [PATCH 2/3] PM / Hibernate: Remove arch_prepare_suspend() Rafael J. Wysocki @ 2011-06-02 3:14 ` Pavel Machek 2011-06-06 13:49 ` Ralf Baechle 1 sibling, 0 replies; 10+ messages in thread From: Pavel Machek @ 2011-06-02 3:14 UTC (permalink / raw) To: Rafael J. Wysocki Cc: Linux PM mailing list, Frank Hofmann, LKML, linux-sh, Ralf Baechle, Benjamin Herrenschmidt On Sat 2011-05-21 14:10:34, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rjw@sisk.pl> > > All architectures supporting hibernation define > arch_prepare_suspend() as an empty function, so remove it. > > Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> ACK. -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/3] PM / Hibernate: Remove arch_prepare_suspend() 2011-05-21 12:10 ` [PATCH 2/3] PM / Hibernate: Remove arch_prepare_suspend() Rafael J. Wysocki 2011-06-02 3:14 ` Pavel Machek @ 2011-06-06 13:49 ` Ralf Baechle 1 sibling, 0 replies; 10+ messages in thread From: Ralf Baechle @ 2011-06-06 13:49 UTC (permalink / raw) To: Rafael J. Wysocki Cc: Linux PM mailing list, Frank Hofmann, LKML, linux-sh, Benjamin Herrenschmidt On Sat, May 21, 2011 at 02:10:34PM +0200, Rafael J. Wysocki wrote: > > All architectures supporting hibernation define > arch_prepare_suspend() as an empty function, so remove it. > > Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> > --- > arch/frv/include/asm/suspend.h | 20 -------------------- > arch/mips/include/asm/suspend.h | 2 -- I don't see what we'd possibly need that hook for so: Acked-by: Ralf Baechle <ralf@linux-mips.org> Ralf ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3/3] PM / Hibernate: Update kerneldoc comments in hibernate.c 2011-05-21 12:08 [PATCH 0/3] Hibernate cleanups Rafael J. Wysocki 2011-05-21 12:09 ` [PATCH 1/3] PM / Hibernate: Update some comments in core hibernate code Rafael J. Wysocki 2011-05-21 12:10 ` [PATCH 2/3] PM / Hibernate: Remove arch_prepare_suspend() Rafael J. Wysocki @ 2011-05-21 12:12 ` Rafael J. Wysocki 2011-05-23 3:08 ` Randy Dunlap 2011-05-24 12:35 ` [PATCH 0/3] Hibernate cleanups Frank Hofmann 3 siblings, 1 reply; 10+ messages in thread From: Rafael J. Wysocki @ 2011-05-21 12:12 UTC (permalink / raw) To: Linux PM mailing list Cc: Frank Hofmann, LKML, linux-sh, Ralf Baechle, Benjamin Herrenschmidt, Randy Dunlap From: Rafael J. Wysocki <rjw@sisk.pl> 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> --- kernel/power/hibernate.c | 184 ++++++++++++++++++++++++----------------------- 1 file changed, 94 insertions(+), 90 deletions(-) Index: linux-2.6/kernel/power/hibernate.c =================================--- linux-2.6.orig/kernel/power/hibernate.c +++ linux-2.6/kernel/power/hibernate.c @@ -55,10 +55,9 @@ static int hibernation_mode = HIBERNATIO static const struct platform_hibernation_ops *hibernation_ops; /** - * hibernation_set_ops - set the global hibernate operations - * @ops: the hibernation operations to use in subsequent hibernation transitions + * hibernation_set_ops - Set the global hibernate operations. + * @ops: Hibernation operations to use in subsequent hibernation transitions. */ - void hibernation_set_ops(const struct platform_hibernation_ops *ops) { if (ops && !(ops->begin && ops->end && ops->pre_snapshot @@ -115,10 +114,8 @@ static int hibernation_test(int level) { #endif /* !CONFIG_PM_DEBUG */ /** - * platform_begin - tell the platform driver that we're starting - * hibernation + * platform_begin - Use platform driver to start hibernation. */ - static int platform_begin(int platform_mode) { return (platform_mode && hibernation_ops) ? @@ -126,10 +123,8 @@ static int platform_begin(int platform_m } /** - * platform_end - tell the platform driver that we've entered the - * working state + * platform_end - Use platform driver to finish transition to the working state. */ - static void platform_end(int platform_mode) { if (platform_mode && hibernation_ops) @@ -137,8 +132,10 @@ static void platform_end(int platform_mo } /** - * platform_pre_snapshot - prepare the machine for hibernation using the - * platform driver if so configured and return an error code if it fails + * platform_pre_snapshot - Call platform to prepare the machine for hibernation. + * + * Use the platform driver to prepare the system for creating a hibernate image, + * if so configured, and return an error code if that fails. */ static int platform_pre_snapshot(int platform_mode) @@ -148,10 +145,13 @@ static int platform_pre_snapshot(int pla } /** - * platform_leave - prepare the machine for switching to the normal mode - * of operation using the platform driver (called with interrupts disabled) + * platform_leave - Use platform to prepare a transition to the working state. + * + * Use the platform driver prepare to prepare the machine for switching to the + * normal mode of operation. + * + * This routine is called on one CPU with interrupts disabled. */ - static void platform_leave(int platform_mode) { if (platform_mode && hibernation_ops) @@ -159,10 +159,13 @@ static void platform_leave(int platform_ } /** - * platform_finish - switch the machine to the normal mode of operation - * using the platform driver (must be called after platform_prepare()) + * platform_finish - Use platform to switch the system to the working state. + * + * Use the platform driver to switch the machine to the normal mode of + * operation. + * + * This routine must be called after platform_prepare(). */ - static void platform_finish(int platform_mode) { if (platform_mode && hibernation_ops) @@ -170,11 +173,14 @@ static void platform_finish(int platform } /** - * platform_pre_restore - prepare the platform for the restoration from a - * hibernation image. If the restore fails after this function has been - * called, platform_restore_cleanup() must be called. + * platform_pre_restore - Prepare for hibernate image restoration. + * + * Use the platform driver to prepare the system for resume from a hibernation + * image. + * + * If the restore fails after this function has been called, + * platform_restore_cleanup() must be called. */ - static int platform_pre_restore(int platform_mode) { return (platform_mode && hibernation_ops) ? @@ -182,12 +188,15 @@ static int platform_pre_restore(int plat } /** - * platform_restore_cleanup - switch the platform to the normal mode of - * operation after a failing restore. If platform_pre_restore() has been - * called before the failing restore, this function must be called too, - * regardless of the result of platform_pre_restore(). + * platform_restore_cleanup - Switch to the working state after failing restore. + * + * Use the platform driver to switch the system to the normal mode of operation + * after a failing restore. + * + * If platform_pre_restore() has been called before the failing restore, this + * function must be called too, regardless of the result of + * platform_pre_restore(). */ - static void platform_restore_cleanup(int platform_mode) { if (platform_mode && hibernation_ops) @@ -195,10 +204,8 @@ static void platform_restore_cleanup(int } /** - * platform_recover - recover the platform from a failure to suspend - * devices. + * platform_recover - Recover the platform from a failure to suspend devices. */ - static void platform_recover(int platform_mode) { if (platform_mode && hibernation_ops && hibernation_ops->recover) @@ -206,13 +213,12 @@ static void platform_recover(int platfor } /** - * swsusp_show_speed - print the time elapsed between two events. - * @start: Starting event. - * @stop: Final event. - * @nr_pages - number of pages processed between @start and @stop - * @msg - introductory message to print + * swsusp_show_speed - Print time elapsed between two events during hibernation. + * @start: Starting event. + * @stop: Final event. + * @nr_pages: Number of memory pages processed between @start and @stop. + * @msg: Additional diagnostic message to print. */ - void swsusp_show_speed(struct timeval *start, struct timeval *stop, unsigned nr_pages, char *msg) { @@ -235,11 +241,13 @@ void swsusp_show_speed(struct timeval *s } /** - * create_image - freeze devices that need to be frozen with interrupts - * off, create the hibernation image and thaw those devices. Control - * reappears in this routine after a restore. + * create_image - Create a hibernation image. + * + * Execute device drivers' .freeze_noirq() callbacks, create a hibernation image + * and execute the drivers' .thaw_noirq() callbacks. + * + * Control reappears in this routine after the subsequent restore. */ - static int create_image(int platform_mode) { int error; @@ -304,14 +312,11 @@ static int create_image(int platform_mod } /** - * hibernation_snapshot - quiesce devices and create the hibernation - * snapshot image. - * @platform_mode - if set, use the platform driver, if available, to - * prepare the platform firmware for the power transition. + * hibernation_snapshot - Quiesce devices and create a hibernation image. + * @platform_mode: If set, use platform driver to prepare for the transition. * - * Must be called with pm_mutex held + * This routine must be called with pm_mutex held. */ - int hibernation_snapshot(int platform_mode) { pm_message_t msg = PMSG_RECOVER; @@ -371,13 +376,13 @@ int hibernation_snapshot(int platform_mo } /** - * resume_target_kernel - prepare devices that need to be suspended with - * interrupts off, restore the contents of highmem that have not been - * restored yet from the image and run the low level code that will restore - * the remaining contents of memory and switch to the just restored target - * kernel. + * resume_target_kernel - Restore system state from a hibernation image. + * + * Execute device drivers' .freeze_noirq() callbacks, restore the contents of + * highmem that have not been restored yet from the image and run the low-level + * code that will restore the remaining contents of memory and switch to the + * just restored target kernel. */ - static int resume_target_kernel(bool platform_mode) { int error; @@ -445,14 +450,12 @@ static int resume_target_kernel(bool pla } /** - * hibernation_restore - quiesce devices and restore the hibernation - * snapshot image. If successful, control returns in hibernation_snaphot() - * @platform_mode - if set, use the platform driver, if available, to - * prepare the platform firmware for the transition. + * hibernation_restore - Quiesce devices and restore from a hibernation image. + * @platform_mode: If set, use platform driver to prepare for the transition. * - * Must be called with pm_mutex held + * This routine must be called with pm_mutex held. If it is successful, control + * reappears in the restored target kernel in hibernation_snaphot(). */ - int hibernation_restore(int platform_mode) { int error; @@ -472,10 +475,8 @@ int hibernation_restore(int platform_mod } /** - * hibernation_platform_enter - enter the hibernation state using the - * platform driver (if available) + * hibernation_platform_enter - Power off the system using the platform driver. */ - int hibernation_platform_enter(void) { int error; @@ -546,12 +547,12 @@ int hibernation_platform_enter(void) } /** - * power_down - Shut the machine down for hibernation. + * power_down - Shut the machine down for hibernation. * - * Use the platform driver, if configured so; otherwise try - * to power off or reboot. + * Use the platform driver, if configured, to put the system into the sleep + * state corresponding to hibernation, or try to power it off or reboot, + * depending on the value of hibernation_mode. */ - static void power_down(void) { switch (hibernation_mode) { @@ -588,9 +589,8 @@ static int prepare_processes(void) } /** - * hibernate - The granpappy of the built-in hibernation management + * hibernate - Carry out system hibernation, including saving the image. */ - int hibernate(void) { int error; @@ -668,17 +668,20 @@ int hibernate(void) /** - * software_resume - Resume from a saved image. + * software_resume - Resume from a saved hibernation image. + * + * This routine is called as a late initcall, when all devices have been + * discovered and initialized already. * - * Called as a late_initcall (so all devices are discovered and - * initialized), we call swsusp to see if we have a saved image or not. - * If so, we quiesce devices, the restore the saved image. We will - * return above (in hibernate() ) if everything goes well. - * Otherwise, we fail gracefully and return to the normally - * scheduled program. + * The image reading code is called to see if there is a hibernation image + * available for reading. If that is the case, devices are quiesced and the + * contents of memory is restored from the saved image. * + * If this is successful, control reappears in the restored target kernel in + * hibernation_snaphot() which returns to hibernate(). Otherwise, the routine + * attempts to recover gracefully and make the kernel return to the normal mode + * of operation. */ - static int software_resume(void) { int error; @@ -808,21 +811,17 @@ static const char * const hibernation_mo [HIBERNATION_TESTPROC] = "testproc", }; -/** - * disk - Control hibernation mode +/* + * /sys/power/disk - Control hibernation mode. * - * Suspend-to-disk can be handled in several ways. We have a few options - * for putting the system to sleep - using the platform driver (e.g. ACPI - * or other hibernation_ops), powering off the system or rebooting the - * system (for testing) as well as the two test modes. - * - * The system can support 'platform', and that is known a priori (and - * encoded by the presence of hibernation_ops). However, the user may - * choose 'shutdown' or 'reboot' as alternatives, as well as one fo the - * test modes, 'test' or 'testproc'. + * Hibernation can be handled in several ways. There are a few different ways + * to put the system into the sleep state: using the platform driver (e.g. ACPI + * or other hibernation_ops), powering it off or rebooting it (for testing + * mostly), or using one of the two available test modes. * - * show() will display what the mode is currently set to. - * store() will accept one of + * The sysfs file /sys/power/disk provides an interface for selecting the + * hibernation mode to use. Reading from this file causes the available modes + * to be printed. There are 5 modes that can be supported: * * 'platform' * 'shutdown' @@ -830,8 +829,14 @@ static const char * const hibernation_mo * 'test' * 'testproc' * - * It will only change to 'platform' if the system - * supports it (as determined by having hibernation_ops). + * If a platform hibernation driver is in use, 'platform' will be supported + * and will be used by default. Otherwise, 'shutdown' will be used by default. + * The selected option (i.e. the one corresponding to the current value of + * hibernation_mode) is enclosed by a square bracket. + * + * To select a given hibernation mode it is necessary to write the mode's + * string representation (as returned by reading from /sys/power/disk) back + * into /sys/power/disk. */ static ssize_t disk_show(struct kobject *kobj, struct kobj_attribute *attr, @@ -864,7 +869,6 @@ static ssize_t disk_show(struct kobject return buf-start; } - static ssize_t disk_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t n) { ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 3/3] PM / Hibernate: Update kerneldoc comments in hibernate.c 2011-05-21 12:12 ` [PATCH 3/3] PM / Hibernate: Update kerneldoc comments in hibernate.c Rafael J. Wysocki @ 2011-05-23 3:08 ` Randy Dunlap 2011-05-23 21:11 ` Rafael J. Wysocki 0 siblings, 1 reply; 10+ messages in thread From: Randy Dunlap @ 2011-05-23 3:08 UTC (permalink / raw) To: Rafael J. Wysocki Cc: Linux PM mailing list, Frank Hofmann, LKML, linux-sh, Ralf Baechle, Benjamin Herrenschmidt On 05/21/11 05:12, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rjw@sisk.pl> > > 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. Hi Rafael, Several of the functions are missing function parameter notations, as noted below. > Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> > --- > kernel/power/hibernate.c | 184 ++++++++++++++++++++++++----------------------- > 1 file changed, 94 insertions(+), 90 deletions(-) > > Index: linux-2.6/kernel/power/hibernate.c > =================================> --- linux-2.6.orig/kernel/power/hibernate.c > +++ linux-2.6/kernel/power/hibernate.c > @@ -55,10 +55,9 @@ static int hibernation_mode = HIBERNATIO > static const struct platform_hibernation_ops *hibernation_ops; > > /** > - * hibernation_set_ops - set the global hibernate operations > - * @ops: the hibernation operations to use in subsequent hibernation transitions > + * hibernation_set_ops - Set the global hibernate operations. > + * @ops: Hibernation operations to use in subsequent hibernation transitions. > */ > - > void hibernation_set_ops(const struct platform_hibernation_ops *ops) > { > if (ops && !(ops->begin && ops->end && ops->pre_snapshot > @@ -115,10 +114,8 @@ static int hibernation_test(int level) { > #endif /* !CONFIG_PM_DEBUG */ > > /** > - * platform_begin - tell the platform driver that we're starting > - * hibernation > + * platform_begin - Use platform driver to start hibernation. * @platform_mode: <description> > */ > - > static int platform_begin(int platform_mode) > { > return (platform_mode && hibernation_ops) ? > @@ -126,10 +123,8 @@ static int platform_begin(int platform_m > } > > /** > - * platform_end - tell the platform driver that we've entered the > - * working state > + * platform_end - Use platform driver to finish transition to the working state. * @platform_mode: <description> > */ > - > static void platform_end(int platform_mode) > { > if (platform_mode && hibernation_ops) > @@ -137,8 +132,10 @@ static void platform_end(int platform_mo > } > > /** > - * platform_pre_snapshot - prepare the machine for hibernation using the > - * platform driver if so configured and return an error code if it fails > + * platform_pre_snapshot - Call platform to prepare the machine for hibernation. * @platform_mode: <description> > + * > + * Use the platform driver to prepare the system for creating a hibernate image, > + * if so configured, and return an error code if that fails. > */ > > static int platform_pre_snapshot(int platform_mode) > @@ -148,10 +145,13 @@ static int platform_pre_snapshot(int pla > } > > /** > - * platform_leave - prepare the machine for switching to the normal mode > - * of operation using the platform driver (called with interrupts disabled) > + * platform_leave - Use platform to prepare a transition to the working state. * @platform_mode: <description> > + * > + * Use the platform driver prepare to prepare the machine for switching to the > + * normal mode of operation. > + * > + * This routine is called on one CPU with interrupts disabled. > */ > - > static void platform_leave(int platform_mode) > { > if (platform_mode && hibernation_ops) > @@ -159,10 +159,13 @@ static void platform_leave(int platform_ > } > > /** > - * platform_finish - switch the machine to the normal mode of operation > - * using the platform driver (must be called after platform_prepare()) > + * platform_finish - Use platform to switch the system to the working state. * @platform_mode: <description> > + * > + * Use the platform driver to switch the machine to the normal mode of > + * operation. > + * > + * This routine must be called after platform_prepare(). > */ > - > static void platform_finish(int platform_mode) > { > if (platform_mode && hibernation_ops) > @@ -170,11 +173,14 @@ static void platform_finish(int platform > } > > /** > - * platform_pre_restore - prepare the platform for the restoration from a > - * hibernation image. If the restore fails after this function has been > - * called, platform_restore_cleanup() must be called. > + * platform_pre_restore - Prepare for hibernate image restoration. * @platform_mode: <description> > + * > + * Use the platform driver to prepare the system for resume from a hibernation > + * image. > + * > + * If the restore fails after this function has been called, > + * platform_restore_cleanup() must be called. > */ > - > static int platform_pre_restore(int platform_mode) > { > return (platform_mode && hibernation_ops) ? > @@ -182,12 +188,15 @@ static int platform_pre_restore(int plat > } > > /** > - * platform_restore_cleanup - switch the platform to the normal mode of > - * operation after a failing restore. If platform_pre_restore() has been > - * called before the failing restore, this function must be called too, > - * regardless of the result of platform_pre_restore(). > + * platform_restore_cleanup - Switch to the working state after failing restore. * @platform_mode: <description> > + * > + * Use the platform driver to switch the system to the normal mode of operation > + * after a failing restore. > + * > + * If platform_pre_restore() has been called before the failing restore, this > + * function must be called too, regardless of the result of > + * platform_pre_restore(). > */ > - > static void platform_restore_cleanup(int platform_mode) > { > if (platform_mode && hibernation_ops) > @@ -195,10 +204,8 @@ static void platform_restore_cleanup(int > } > > /** > - * platform_recover - recover the platform from a failure to suspend > - * devices. > + * platform_recover - Recover the platform from a failure to suspend devices. * @platform_mode: <description> > */ > - > static void platform_recover(int platform_mode) > { > if (platform_mode && hibernation_ops && hibernation_ops->recover) > @@ -206,13 +213,12 @@ static void platform_recover(int platfor > } > > /** > - * swsusp_show_speed - print the time elapsed between two events. > - * @start: Starting event. > - * @stop: Final event. > - * @nr_pages - number of pages processed between @start and @stop > - * @msg - introductory message to print > + * swsusp_show_speed - Print time elapsed between two events during hibernation. > + * @start: Starting event. > + * @stop: Final event. > + * @nr_pages: Number of memory pages processed between @start and @stop. > + * @msg: Additional diagnostic message to print. > */ > - > void swsusp_show_speed(struct timeval *start, struct timeval *stop, > unsigned nr_pages, char *msg) > { > @@ -235,11 +241,13 @@ void swsusp_show_speed(struct timeval *s > } > > /** > - * create_image - freeze devices that need to be frozen with interrupts > - * off, create the hibernation image and thaw those devices. Control > - * reappears in this routine after a restore. > + * create_image - Create a hibernation image. * @platform_mode: <description> > + * > + * Execute device drivers' .freeze_noirq() callbacks, create a hibernation image > + * and execute the drivers' .thaw_noirq() callbacks. > + * > + * Control reappears in this routine after the subsequent restore. > */ > - > static int create_image(int platform_mode) > { > int error; > @@ -304,14 +312,11 @@ static int create_image(int platform_mod > } > > /** > - * hibernation_snapshot - quiesce devices and create the hibernation > - * snapshot image. > - * @platform_mode - if set, use the platform driver, if available, to > - * prepare the platform firmware for the power transition. > + * hibernation_snapshot - Quiesce devices and create a hibernation image. > + * @platform_mode: If set, use platform driver to prepare for the transition. > * > - * Must be called with pm_mutex held > + * This routine must be called with pm_mutex held. > */ > - > int hibernation_snapshot(int platform_mode) > { > pm_message_t msg = PMSG_RECOVER; > @@ -371,13 +376,13 @@ int hibernation_snapshot(int platform_mo > } > > /** > - * resume_target_kernel - prepare devices that need to be suspended with > - * interrupts off, restore the contents of highmem that have not been > - * restored yet from the image and run the low level code that will restore > - * the remaining contents of memory and switch to the just restored target > - * kernel. > + * resume_target_kernel - Restore system state from a hibernation image. * @platform_mode: <description> > + * > + * Execute device drivers' .freeze_noirq() callbacks, restore the contents of > + * highmem that have not been restored yet from the image and run the low-level > + * code that will restore the remaining contents of memory and switch to the > + * just restored target kernel. > */ > - > static int resume_target_kernel(bool platform_mode) > { > int error; > @@ -445,14 +450,12 @@ static int resume_target_kernel(bool pla > } > > /** > - * hibernation_restore - quiesce devices and restore the hibernation > - * snapshot image. If successful, control returns in hibernation_snaphot() > - * @platform_mode - if set, use the platform driver, if available, to > - * prepare the platform firmware for the transition. > + * hibernation_restore - Quiesce devices and restore from a hibernation image. > + * @platform_mode: If set, use platform driver to prepare for the transition. > * > - * Must be called with pm_mutex held > + * This routine must be called with pm_mutex held. If it is successful, control > + * reappears in the restored target kernel in hibernation_snaphot(). > */ > - > int hibernation_restore(int platform_mode) > { > int error; > @@ -472,10 +475,8 @@ int hibernation_restore(int platform_mod > } > > /** > - * hibernation_platform_enter - enter the hibernation state using the > - * platform driver (if available) > + * hibernation_platform_enter - Power off the system using the platform driver. > */ > - > int hibernation_platform_enter(void) > { > int error; > @@ -546,12 +547,12 @@ int hibernation_platform_enter(void) > } > > /** > - * power_down - Shut the machine down for hibernation. > + * power_down - Shut the machine down for hibernation. > * > - * Use the platform driver, if configured so; otherwise try > - * to power off or reboot. > + * Use the platform driver, if configured, to put the system into the sleep > + * state corresponding to hibernation, or try to power it off or reboot, > + * depending on the value of hibernation_mode. > */ > - > static void power_down(void) > { > switch (hibernation_mode) { > @@ -588,9 +589,8 @@ static int prepare_processes(void) > } > > /** > - * hibernate - The granpappy of the built-in hibernation management > + * hibernate - Carry out system hibernation, including saving the image. > */ > - > int hibernate(void) > { > int error; > @@ -668,17 +668,20 @@ int hibernate(void) > > > /** > - * software_resume - Resume from a saved image. > + * software_resume - Resume from a saved hibernation image. > + * > + * This routine is called as a late initcall, when all devices have been > + * discovered and initialized already. > * > - * Called as a late_initcall (so all devices are discovered and > - * initialized), we call swsusp to see if we have a saved image or not. > - * If so, we quiesce devices, the restore the saved image. We will > - * return above (in hibernate() ) if everything goes well. > - * Otherwise, we fail gracefully and return to the normally > - * scheduled program. > + * The image reading code is called to see if there is a hibernation image > + * available for reading. If that is the case, devices are quiesced and the > + * contents of memory is restored from the saved image. > * > + * If this is successful, control reappears in the restored target kernel in > + * hibernation_snaphot() which returns to hibernate(). Otherwise, the routine > + * attempts to recover gracefully and make the kernel return to the normal mode > + * of operation. > */ > - > static int software_resume(void) > { > int error; > @@ -808,21 +811,17 @@ static const char * const hibernation_mo > [HIBERNATION_TESTPROC] = "testproc", > }; > > -/** > - * disk - Control hibernation mode > +/* > + * /sys/power/disk - Control hibernation mode. > * > - * Suspend-to-disk can be handled in several ways. We have a few options > - * for putting the system to sleep - using the platform driver (e.g. ACPI > - * or other hibernation_ops), powering off the system or rebooting the > - * system (for testing) as well as the two test modes. > - * > - * The system can support 'platform', and that is known a priori (and > - * encoded by the presence of hibernation_ops). However, the user may > - * choose 'shutdown' or 'reboot' as alternatives, as well as one fo the > - * test modes, 'test' or 'testproc'. > + * Hibernation can be handled in several ways. There are a few different ways > + * to put the system into the sleep state: using the platform driver (e.g. ACPI > + * or other hibernation_ops), powering it off or rebooting it (for testing > + * mostly), or using one of the two available test modes. > * > - * show() will display what the mode is currently set to. > - * store() will accept one of > + * The sysfs file /sys/power/disk provides an interface for selecting the > + * hibernation mode to use. Reading from this file causes the available modes > + * to be printed. There are 5 modes that can be supported: > * > * 'platform' > * 'shutdown' > @@ -830,8 +829,14 @@ static const char * const hibernation_mo > * 'test' > * 'testproc' > * > - * It will only change to 'platform' if the system > - * supports it (as determined by having hibernation_ops). > + * If a platform hibernation driver is in use, 'platform' will be supported > + * and will be used by default. Otherwise, 'shutdown' will be used by default. > + * The selected option (i.e. the one corresponding to the current value of > + * hibernation_mode) is enclosed by a square bracket. > + * > + * To select a given hibernation mode it is necessary to write the mode's > + * string representation (as returned by reading from /sys/power/disk) back > + * into /sys/power/disk. > */ > > static ssize_t disk_show(struct kobject *kobj, struct kobj_attribute *attr, > @@ -864,7 +869,6 @@ static ssize_t disk_show(struct kobject > return buf-start; > } > > - > static ssize_t disk_store(struct kobject *kobj, struct kobj_attribute *attr, > const char *buf, size_t n) > { > Thanks. -- ~Randy *** Remember to use Documentation/SubmitChecklist when testing your code *** ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 3/3] PM / Hibernate: Update kerneldoc comments in hibernate.c 2011-05-23 3:08 ` Randy Dunlap @ 2011-05-23 21:11 ` Rafael J. Wysocki 2011-05-23 21:34 ` [PATCH 3/3] PM / Hibernate: Update kerneldoc comments in Randy Dunlap 0 siblings, 1 reply; 10+ messages in thread From: Rafael J. Wysocki @ 2011-05-23 21:11 UTC (permalink / raw) To: Randy Dunlap Cc: Linux PM mailing list, Frank Hofmann, LKML, linux-sh, Ralf Baechle, Benjamin Herrenschmidt On Monday, May 23, 2011, Randy Dunlap wrote: > On 05/21/11 05:12, Rafael J. Wysocki wrote: > > From: Rafael J. Wysocki <rjw@sisk.pl> > > > > 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. > > Hi Rafael, Hi, > Several of the functions are missing function parameter notations, as > noted below. Ah, thanks! Those should be fixed in the new version of the patch below. Thanks, Rafael --- From: Rafael J. Wysocki <rjw@sisk.pl> Subject: 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> --- kernel/power/hibernate.c | 194 +++++++++++++++++++++++++---------------------- 1 file changed, 104 insertions(+), 90 deletions(-) Index: linux-2.6/kernel/power/hibernate.c =================================--- linux-2.6.orig/kernel/power/hibernate.c +++ linux-2.6/kernel/power/hibernate.c @@ -55,10 +55,9 @@ static int hibernation_mode = HIBERNATIO static const struct platform_hibernation_ops *hibernation_ops; /** - * hibernation_set_ops - set the global hibernate operations - * @ops: the hibernation operations to use in subsequent hibernation transitions + * hibernation_set_ops - Set the global hibernate operations. + * @ops: Hibernation operations to use in subsequent hibernation transitions. */ - void hibernation_set_ops(const struct platform_hibernation_ops *ops) { if (ops && !(ops->begin && ops->end && ops->pre_snapshot @@ -115,10 +114,9 @@ static int hibernation_test(int level) { #endif /* !CONFIG_PM_DEBUG */ /** - * platform_begin - tell the platform driver that we're starting - * hibernation + * platform_begin - Call platform to start hibernation. + * @platform_mode: Whether or not to use the platform driver. */ - static int platform_begin(int platform_mode) { return (platform_mode && hibernation_ops) ? @@ -126,10 +124,9 @@ static int platform_begin(int platform_m } /** - * platform_end - tell the platform driver that we've entered the - * working state + * platform_end - Call platform to finish transition to the working state. + * @platform_mode: Whether or not to use the platform driver. */ - static void platform_end(int platform_mode) { if (platform_mode && hibernation_ops) @@ -137,8 +134,11 @@ static void platform_end(int platform_mo } /** - * platform_pre_snapshot - prepare the machine for hibernation using the - * platform driver if so configured and return an error code if it fails + * platform_pre_snapshot - Call platform to prepare the machine for hibernation. + * @platform_mode: Whether or not to use the platform driver. + * + * Use the platform driver to prepare the system for creating a hibernate image, + * if so configured, and return an error code if that fails. */ static int platform_pre_snapshot(int platform_mode) @@ -148,10 +148,14 @@ static int platform_pre_snapshot(int pla } /** - * platform_leave - prepare the machine for switching to the normal mode - * of operation using the platform driver (called with interrupts disabled) + * platform_leave - Call platform to prepare a transition to the working state. + * @platform_mode: Whether or not to use the platform driver. + * + * Use the platform driver prepare to prepare the machine for switching to the + * normal mode of operation. + * + * This routine is called on one CPU with interrupts disabled. */ - static void platform_leave(int platform_mode) { if (platform_mode && hibernation_ops) @@ -159,10 +163,14 @@ static void platform_leave(int platform_ } /** - * platform_finish - switch the machine to the normal mode of operation - * using the platform driver (must be called after platform_prepare()) + * platform_finish - Call platform to switch the system to the working state. + * @platform_mode: Whether or not to use the platform driver. + * + * Use the platform driver to switch the machine to the normal mode of + * operation. + * + * This routine must be called after platform_prepare(). */ - static void platform_finish(int platform_mode) { if (platform_mode && hibernation_ops) @@ -170,11 +178,15 @@ static void platform_finish(int platform } /** - * platform_pre_restore - prepare the platform for the restoration from a - * hibernation image. If the restore fails after this function has been - * called, platform_restore_cleanup() must be called. + * platform_pre_restore - Prepare for hibernate image restoration. + * @platform_mode: Whether or not to use the platform driver. + * + * Use the platform driver to prepare the system for resume from a hibernation + * image. + * + * If the restore fails after this function has been called, + * platform_restore_cleanup() must be called. */ - static int platform_pre_restore(int platform_mode) { return (platform_mode && hibernation_ops) ? @@ -182,12 +194,16 @@ static int platform_pre_restore(int plat } /** - * platform_restore_cleanup - switch the platform to the normal mode of - * operation after a failing restore. If platform_pre_restore() has been - * called before the failing restore, this function must be called too, - * regardless of the result of platform_pre_restore(). + * platform_restore_cleanup - Switch to the working state after failing restore. + * @platform_mode: Whether or not to use the platform driver. + * + * Use the platform driver to switch the system to the normal mode of operation + * after a failing restore. + * + * If platform_pre_restore() has been called before the failing restore, this + * function must be called too, regardless of the result of + * platform_pre_restore(). */ - static void platform_restore_cleanup(int platform_mode) { if (platform_mode && hibernation_ops) @@ -195,10 +211,9 @@ static void platform_restore_cleanup(int } /** - * platform_recover - recover the platform from a failure to suspend - * devices. + * platform_recover - Recover from a failure to suspend devices. + * @platform_mode: Whether or not to use the platform driver. */ - static void platform_recover(int platform_mode) { if (platform_mode && hibernation_ops && hibernation_ops->recover) @@ -206,13 +221,12 @@ static void platform_recover(int platfor } /** - * swsusp_show_speed - print the time elapsed between two events. - * @start: Starting event. - * @stop: Final event. - * @nr_pages - number of pages processed between @start and @stop - * @msg - introductory message to print + * swsusp_show_speed - Print time elapsed between two events during hibernation. + * @start: Starting event. + * @stop: Final event. + * @nr_pages: Number of memory pages processed between @start and @stop. + * @msg: Additional diagnostic message to print. */ - void swsusp_show_speed(struct timeval *start, struct timeval *stop, unsigned nr_pages, char *msg) { @@ -235,11 +249,14 @@ void swsusp_show_speed(struct timeval *s } /** - * create_image - freeze devices that need to be frozen with interrupts - * off, create the hibernation image and thaw those devices. Control - * reappears in this routine after a restore. + * create_image - Create a hibernation image. + * @platform_mode: Whether or not to use the platform driver. + * + * Execute device drivers' .freeze_noirq() callbacks, create a hibernation image + * and execute the drivers' .thaw_noirq() callbacks. + * + * Control reappears in this routine after the subsequent restore. */ - static int create_image(int platform_mode) { int error; @@ -304,14 +321,11 @@ static int create_image(int platform_mod } /** - * hibernation_snapshot - quiesce devices and create the hibernation - * snapshot image. - * @platform_mode - if set, use the platform driver, if available, to - * prepare the platform firmware for the power transition. + * hibernation_snapshot - Quiesce devices and create a hibernation image. + * @platform_mode: If set, use platform driver to prepare for the transition. * - * Must be called with pm_mutex held + * This routine must be called with pm_mutex held. */ - int hibernation_snapshot(int platform_mode) { pm_message_t msg = PMSG_RECOVER; @@ -371,13 +385,14 @@ int hibernation_snapshot(int platform_mo } /** - * resume_target_kernel - prepare devices that need to be suspended with - * interrupts off, restore the contents of highmem that have not been - * restored yet from the image and run the low level code that will restore - * the remaining contents of memory and switch to the just restored target - * kernel. + * resume_target_kernel - Restore system state from a hibernation image. + * @platform_mode: Whether or not to use the platform driver. + * + * Execute device drivers' .freeze_noirq() callbacks, restore the contents of + * highmem that have not been restored yet from the image and run the low-level + * code that will restore the remaining contents of memory and switch to the + * just restored target kernel. */ - static int resume_target_kernel(bool platform_mode) { int error; @@ -445,14 +460,12 @@ static int resume_target_kernel(bool pla } /** - * hibernation_restore - quiesce devices and restore the hibernation - * snapshot image. If successful, control returns in hibernation_snaphot() - * @platform_mode - if set, use the platform driver, if available, to - * prepare the platform firmware for the transition. + * hibernation_restore - Quiesce devices and restore from a hibernation image. + * @platform_mode: If set, use platform driver to prepare for the transition. * - * Must be called with pm_mutex held + * This routine must be called with pm_mutex held. If it is successful, control + * reappears in the restored target kernel in hibernation_snaphot(). */ - int hibernation_restore(int platform_mode) { int error; @@ -472,10 +485,8 @@ int hibernation_restore(int platform_mod } /** - * hibernation_platform_enter - enter the hibernation state using the - * platform driver (if available) + * hibernation_platform_enter - Power off the system using the platform driver. */ - int hibernation_platform_enter(void) { int error; @@ -546,12 +557,12 @@ int hibernation_platform_enter(void) } /** - * power_down - Shut the machine down for hibernation. + * power_down - Shut the machine down for hibernation. * - * Use the platform driver, if configured so; otherwise try - * to power off or reboot. + * Use the platform driver, if configured, to put the system into the sleep + * state corresponding to hibernation, or try to power it off or reboot, + * depending on the value of hibernation_mode. */ - static void power_down(void) { switch (hibernation_mode) { @@ -588,9 +599,8 @@ static int prepare_processes(void) } /** - * hibernate - The granpappy of the built-in hibernation management + * hibernate - Carry out system hibernation, including saving the image. */ - int hibernate(void) { int error; @@ -668,17 +678,20 @@ int hibernate(void) /** - * software_resume - Resume from a saved image. + * software_resume - Resume from a saved hibernation image. + * + * This routine is called as a late initcall, when all devices have been + * discovered and initialized already. * - * Called as a late_initcall (so all devices are discovered and - * initialized), we call swsusp to see if we have a saved image or not. - * If so, we quiesce devices, the restore the saved image. We will - * return above (in hibernate() ) if everything goes well. - * Otherwise, we fail gracefully and return to the normally - * scheduled program. + * The image reading code is called to see if there is a hibernation image + * available for reading. If that is the case, devices are quiesced and the + * contents of memory is restored from the saved image. * + * If this is successful, control reappears in the restored target kernel in + * hibernation_snaphot() which returns to hibernate(). Otherwise, the routine + * attempts to recover gracefully and make the kernel return to the normal mode + * of operation. */ - static int software_resume(void) { int error; @@ -808,21 +821,17 @@ static const char * const hibernation_mo [HIBERNATION_TESTPROC] = "testproc", }; -/** - * disk - Control hibernation mode +/* + * /sys/power/disk - Control hibernation mode. * - * Suspend-to-disk can be handled in several ways. We have a few options - * for putting the system to sleep - using the platform driver (e.g. ACPI - * or other hibernation_ops), powering off the system or rebooting the - * system (for testing) as well as the two test modes. - * - * The system can support 'platform', and that is known a priori (and - * encoded by the presence of hibernation_ops). However, the user may - * choose 'shutdown' or 'reboot' as alternatives, as well as one fo the - * test modes, 'test' or 'testproc'. + * Hibernation can be handled in several ways. There are a few different ways + * to put the system into the sleep state: using the platform driver (e.g. ACPI + * or other hibernation_ops), powering it off or rebooting it (for testing + * mostly), or using one of the two available test modes. * - * show() will display what the mode is currently set to. - * store() will accept one of + * The sysfs file /sys/power/disk provides an interface for selecting the + * hibernation mode to use. Reading from this file causes the available modes + * to be printed. There are 5 modes that can be supported: * * 'platform' * 'shutdown' @@ -830,8 +839,14 @@ static const char * const hibernation_mo * 'test' * 'testproc' * - * It will only change to 'platform' if the system - * supports it (as determined by having hibernation_ops). + * If a platform hibernation driver is in use, 'platform' will be supported + * and will be used by default. Otherwise, 'shutdown' will be used by default. + * The selected option (i.e. the one corresponding to the current value of + * hibernation_mode) is enclosed by a square bracket. + * + * To select a given hibernation mode it is necessary to write the mode's + * string representation (as returned by reading from /sys/power/disk) back + * into /sys/power/disk. */ static ssize_t disk_show(struct kobject *kobj, struct kobj_attribute *attr, @@ -864,7 +879,6 @@ static ssize_t disk_show(struct kobject return buf-start; } - static ssize_t disk_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t n) { ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 3/3] PM / Hibernate: Update kerneldoc comments in 2011-05-23 21:11 ` Rafael J. Wysocki @ 2011-05-23 21:34 ` Randy Dunlap 0 siblings, 0 replies; 10+ messages in thread From: Randy Dunlap @ 2011-05-23 21:34 UTC (permalink / raw) To: Rafael J. Wysocki Cc: Linux PM mailing list, Frank Hofmann, LKML, linux-sh, Ralf Baechle, Benjamin Herrenschmidt On Mon, 23 May 2011 23:11:28 +0200 Rafael J. Wysocki wrote: > --- > From: Rafael J. Wysocki <rjw@sisk.pl> > Subject: 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> Looks good. Thanks. Acked-by: Randy Dunlap <randy.dunlap@oracle.com> --- ~Randy *** Remember to use Documentation/SubmitChecklist when testing your code *** ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 0/3] Hibernate cleanups 2011-05-21 12:08 [PATCH 0/3] Hibernate cleanups Rafael J. Wysocki ` (2 preceding siblings ...) 2011-05-21 12:12 ` [PATCH 3/3] PM / Hibernate: Update kerneldoc comments in hibernate.c Rafael J. Wysocki @ 2011-05-24 12:35 ` Frank Hofmann 3 siblings, 0 replies; 10+ messages in thread From: Frank Hofmann @ 2011-05-24 12:35 UTC (permalink / raw) To: Rafael J. Wysocki Cc: linux-sh, LKML, Ralf Baechle, Frank Hofmann, Linux PM mailing list On Sat, 21 May 2011, Rafael J. Wysocki wrote: > Hi, > > Following are three hibernate patches I didn't have the time to > work on before. > > [1/3] - Update comments in kernel/power/hibernate.c > [2/3] - Remove arch_prepare_suspend() > [3/3] - Update kerneldoc comments in kernel/power/hibernate.c > > Since they don't make any functional changes, I don't think it makes sense > to wait with them for the next merge window, so I'd like to push them > for 2.6.40 if no one objects. > > Thanks, > Rafael > > Hi Rafael, thanks, these are helpful ! FrankH. ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2011-06-06 13:49 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-05-21 12:08 [PATCH 0/3] Hibernate cleanups Rafael J. Wysocki 2011-05-21 12:09 ` [PATCH 1/3] PM / Hibernate: Update some comments in core hibernate code Rafael J. Wysocki 2011-05-21 12:10 ` [PATCH 2/3] PM / Hibernate: Remove arch_prepare_suspend() Rafael J. Wysocki 2011-06-02 3:14 ` Pavel Machek 2011-06-06 13:49 ` Ralf Baechle 2011-05-21 12:12 ` [PATCH 3/3] PM / Hibernate: Update kerneldoc comments in hibernate.c Rafael J. Wysocki 2011-05-23 3:08 ` Randy Dunlap 2011-05-23 21:11 ` Rafael J. Wysocki 2011-05-23 21:34 ` [PATCH 3/3] PM / Hibernate: Update kerneldoc comments in Randy Dunlap 2011-05-24 12:35 ` [PATCH 0/3] Hibernate cleanups Frank Hofmann
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).