diff -ruN software-suspend-core-suspend-patched/arch/i386/mki/mki.c software-suspend-core-mki/arch/i386/mki/mki.c
--- software-suspend-core-suspend-patched/arch/i386/mki/mki.c	2004-09-08 17:36:24.000000000 +1000
+++ software-suspend-core-mki/arch/i386/mki/mki.c	2004-09-06 19:16:40.000000000 +1000
@@ -26,6 +26,7 @@
 #include <asm/system.h>
 #include <asm/mki.h>
 #include <asm/mkiversion.h>
+extern unsigned int suspend_task;
 
 void mhi_void_hook(void *parm1, void *parm2)
 {
@@ -87,5 +88,7 @@
 EXPORT_SYMBOL_NOVERS(sys_ftruncate);
 extern int sys_munmap(unsigned long, size_t);
 EXPORT_SYMBOL_NOVERS(sys_munmap);
+extern int sys_sched_yield(void);
+EXPORT_SYMBOL_NOVERS(sys_sched_yield);
 void do_exit(long code);
 EXPORT_SYMBOL_NOVERS(do_exit);
diff -ruN software-suspend-core-suspend-patched/arch/i386/mki-adapter/mki24.c software-suspend-core-mki/arch/i386/mki-adapter/mki24.c
--- software-suspend-core-suspend-patched/arch/i386/mki-adapter/mki24.c	2004-09-08 17:36:24.000000000 +1000
+++ software-suspend-core-mki/arch/i386/mki-adapter/mki24.c	2004-09-07 15:57:42.000000000 +1000
@@ -34,6 +34,7 @@
 #include <linux/slab.h>
 #include <linux/module.h>
 #include <linux/mm.h>
+#include <linux/suspend.h>
 
 #include <asm/processor.h>
 #include <asm/ptrace.h>
@@ -1921,6 +1922,10 @@
 /* code from SLEEP_ON_TAIL end */
 
 	taskp->state = TASK_RUNNING;
+#ifdef CONFIG_SOFTWARE_SUSPEND2
+	while (suspend_task)
+		refrigerator(PF_FREEZE);
+#endif
 	if (interruptible) {
 		retval = (signal_pending(taskp)) ? 1 : 0;
 	} else {
diff -ruN software-suspend-core-suspend-patched/arch/i386/mki-adapter/timer.c software-suspend-core-mki/arch/i386/mki-adapter/timer.c
--- software-suspend-core-suspend-patched/arch/i386/mki-adapter/timer.c	2004-09-08 17:36:24.000000000 +1000
+++ software-suspend-core-mki/arch/i386/mki-adapter/timer.c	2004-09-06 19:16:40.000000000 +1000
@@ -19,6 +19,7 @@
 #include <linux/kernel.h>
 #include <linux/sched.h>
 #include <linux/slab.h>
+#include <linux/suspend.h>
 #include <mkifunc.h>
 
 struct linux_unix_timer {
@@ -81,6 +82,11 @@
 	struct linux_unix_timer *lutp;
 	DECLARELOCKSAVE(flags);
 
+#ifdef CONFIG_SOFTWARE_SUSPEND2
+	while (suspend_task)
+		refrigerator(0);
+#endif
+
 	lutp = kmalloc(sizeof(*lutp), GFP_ATOMIC);
 	if (lutp == NULL) {
 		printk("Merge: timeout: kmalloc failed\n");
diff -ruN software-suspend-core-suspend-patched/include/asm-i386/mki.h software-suspend-core-mki/include/asm-i386/mki.h
--- software-suspend-core-suspend-patched/include/asm-i386/mki.h	2004-09-08 17:36:24.000000000 +1000
+++ software-suspend-core-mki/include/asm-i386/mki.h	2004-09-06 19:18:17.000000000 +1000
@@ -22,7 +22,12 @@
 extern void mhi_void_hook(void *, void *);
 extern void (*mhi_hooks[])(void *, void *);
 
-#define CALL_MKI_HOOK(hook, arg1, arg2)  mhi_hooks[hook](arg1, arg2)
+#ifdef CONFIG_SOFTWARE_SUSPEND2
+extern unsigned int suspend_task;
+#define CALL_MKI_HOOK(hook, arg1, arg2)  if (!suspend_task) mhi_hooks[hook](arg1, arg2) 
+#else
+#define CALL_MKI_HOOK(hook, arg1, arg2)  mhi_hooks[hook](arg1, arg2) 
+#endif
 
 /* for mki-adapter module */
 #define MKI_HOOK_TABLE_EXISTS	1
