From: Pavel Machek <pavel@ucw.cz>

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 <pavel@suse.cz>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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);
_