Index: kernel/generic/include/arch.h
===================================================================
--- kernel/generic/include/arch.h	(revision 9f8745c5331a919e144b6084cb90d7f5b2eaccba)
+++ kernel/generic/include/arch.h	(revision b68ae24ef2a8e80ee94b455682978bfbac6bedbc)
@@ -53,5 +53,6 @@
 #define TASK                 THE->task
 #define AS                   THE->as
-#define PREEMPTION_DISABLED  THE->preemption_disabled
+#define PREEMPTION_DISABLED  (0 != THE->preemption_disabled)
+#define PREEMPTION_ENABLED   (0 == THE->preemption_disabled)
 #define MAGIC                UINT32_C(0xfacefeed)
 
Index: kernel/generic/include/preemption.h
===================================================================
--- kernel/generic/include/preemption.h	(revision 9f8745c5331a919e144b6084cb90d7f5b2eaccba)
+++ kernel/generic/include/preemption.h	(revision b68ae24ef2a8e80ee94b455682978bfbac6bedbc)
@@ -38,4 +38,8 @@
 extern void preemption_disable(void);
 extern void preemption_enable(void);
+extern void preemption_enable_noresched(void);
+extern void preemption_enabled_scheduler(void);
+
+
 
 #endif
Index: kernel/generic/include/proc/thread.h
===================================================================
--- kernel/generic/include/proc/thread.h	(revision 9f8745c5331a919e144b6084cb90d7f5b2eaccba)
+++ kernel/generic/include/proc/thread.h	(revision b68ae24ef2a8e80ee94b455682978bfbac6bedbc)
@@ -155,4 +155,7 @@
 	state_t state;
 	
+	/** The thread would have been rescheduled had it not disabled preemption.*/
+	bool need_resched;
+	
 	/** Thread CPU. */
 	cpu_t *cpu;
