Index: kernel/generic/src/main/kinit.c
===================================================================
--- kernel/generic/src/main/kinit.c	(revision c8cbd39399c046462a2751619dd4e8873853164c)
+++ kernel/generic/src/main/kinit.c	(revision 9fe9d296d25d20339552aebcfe9b776a1bf262f8)
@@ -78,4 +78,6 @@
 #include <synch/waitq.h>
 #include <synch/spinlock.h>
+#include <synch/workqueue.h>
+#include <synch/rcu.h>
 
 #define ALIVE_CHARS  4
@@ -104,6 +106,14 @@
 	 */
 	thread_detach(THREAD);
-	
+
 	interrupts_disable();
+	
+	/* Start processing RCU callbacks. RCU is fully functional afterwards. */
+	rcu_kinit_init();
+	
+	/*
+	 * Start processing work queue items. Some may have been queued during boot.
+	 */
+	workq_global_worker_init();
 	
 #ifdef CONFIG_SMP
Index: kernel/generic/src/main/main.c
===================================================================
--- kernel/generic/src/main/main.c	(revision c8cbd39399c046462a2751619dd4e8873853164c)
+++ kernel/generic/src/main/main.c	(revision 9fe9d296d25d20339552aebcfe9b776a1bf262f8)
@@ -75,4 +75,6 @@
 #include <synch/waitq.h>
 #include <synch/futex.h>
+#include <synch/workqueue.h>
+#include <smp/smp_call.h>
 #include <arch/arch.h>
 #include <arch.h>
@@ -244,6 +246,9 @@
 	
 	cpu_init();
-	
 	calibrate_delay_loop();
+	arch_post_cpu_init();
+
+	smp_call_init();
+	workq_global_init();
 	clock_counter_init();
 	timeout_init();
@@ -347,4 +352,6 @@
 void main_ap_separated_stack(void)
 {
+	smp_call_init();
+	
 	/*
 	 * Configure timeouts for this cpu.
Index: kernel/generic/src/main/shutdown.c
===================================================================
--- kernel/generic/src/main/shutdown.c	(revision c8cbd39399c046462a2751619dd4e8873853164c)
+++ kernel/generic/src/main/shutdown.c	(revision 9fe9d296d25d20339552aebcfe9b776a1bf262f8)
@@ -37,4 +37,5 @@
 
 #include <arch.h>
+#include <proc/task.h>
 #include <func.h>
 #include <print.h>
