From: Pavel Machek This moves refrigerator changes to sched.h, so that every file user of refrigerator does not have to include suspend.h, and makes refrigerator support easier by introducing try_to_freeze. Adapted from patch by Nigel Cunningham Signed-off-by: Pavel Machek Signed-off-by: Andrew Morton --- 25-akpm/include/linux/sched.h | 28 ++++++++++++++++++++++++++++ 25-akpm/include/linux/suspend.h | 20 +++++--------------- 2 files changed, 33 insertions(+), 15 deletions(-) diff -puN include/linux/sched.h~swsusp-try_to_freeze-to-make-freezing-hooks-nicer include/linux/sched.h --- 25/include/linux/sched.h~swsusp-try_to_freeze-to-make-freezing-hooks-nicer 2004-12-27 01:09:49.770430232 -0800 +++ 25-akpm/include/linux/sched.h 2004-12-27 01:09:49.776429320 -0800 @@ -1125,6 +1125,34 @@ extern void normalize_rt_tasks(void); #endif +/* try_to_freeze + * + * Checks whether we need to enter the refrigerator + * and returns 1 if we did so. + */ +#ifdef CONFIG_PM +extern void refrigerator(unsigned long); +extern int freeze_processes(void); +extern void thaw_processes(void); + +static inline int try_to_freeze(unsigned long refrigerator_flags) +{ + if (unlikely(current->flags & PF_FREEZE)) { + refrigerator(refrigerator_flags); + return 1; + } else + return 0; +} +#else +static inline void refrigerator(unsigned long flag) {} +static inline int freeze_processes(void) { BUG(); } +static inline void thaw_processes(void) {} + +static inline int try_to_freeze(unsigned long refrigerator_flags) +{ + return 0; +} +#endif /* CONFIG_PM */ #endif /* __KERNEL__ */ #endif diff -puN include/linux/suspend.h~swsusp-try_to_freeze-to-make-freezing-hooks-nicer include/linux/suspend.h --- 25/include/linux/suspend.h~swsusp-try_to_freeze-to-make-freezing-hooks-nicer 2004-12-27 01:09:49.771430080 -0800 +++ 25-akpm/include/linux/suspend.h 2004-12-27 01:09:49.777429168 -0800 @@ -36,26 +36,16 @@ extern void mark_free_pages(struct zone /* kernel/power/swsusp.c */ extern int software_suspend(void); -#else /* CONFIG_SOFTWARE_SUSPEND */ +extern int pm_prepare_console(void); +extern void pm_restore_console(void); + +#else static inline int software_suspend(void) { printk("Warning: fake suspend called\n"); return -EPERM; } -#endif /* CONFIG_SOFTWARE_SUSPEND */ - - -#ifdef CONFIG_PM -extern void refrigerator(unsigned long); -extern int freeze_processes(void); -extern void thaw_processes(void); - -extern int pm_prepare_console(void); -extern void pm_restore_console(void); - -#else -static inline void refrigerator(unsigned long flag) {} -#endif /* CONFIG_PM */ +#endif #ifdef CONFIG_SMP extern void disable_nonboot_cpus(void); _