Index: arch/amd64/src/amd64.c
===================================================================
--- arch/amd64/src/amd64.c	(revision f10c72e4e1f10cc38d817f852eb7a2dab4ee0259)
+++ arch/amd64/src/amd64.c	(revision 7453929d2544639ed584538be3d0bcaa203a825c)
@@ -90,5 +90,5 @@
 }
 
-void arch_late_init(void)
+void arch_pre_smp_init(void)
 {
 	if (config.cpu_active == 1) {
@@ -101,4 +101,8 @@
 }
 
+void arch_post_smp_init(void)
+{
+}
+
 void calibrate_delay_loop(void)
 {
Index: arch/ia32/src/ia32.c
===================================================================
--- arch/ia32/src/ia32.c	(revision f10c72e4e1f10cc38d817f852eb7a2dab4ee0259)
+++ arch/ia32/src/ia32.c	(revision 7453929d2544639ed584538be3d0bcaa203a825c)
@@ -77,5 +77,5 @@
 }
 
-void arch_late_init(void)
+void arch_pre_smp_init(void)
 {
 	if (config.cpu_active == 1) {
@@ -88,4 +88,9 @@
 }
 
+void arch_post_smp_init(void)
+{
+	trap_virtual_enable_irqs(1<<IRQ_KBD);
+}
+
 void calibrate_delay_loop(void)
 {
Index: arch/ia64/src/dummy.s
===================================================================
--- arch/ia64/src/dummy.s	(revision f10c72e4e1f10cc38d817f852eb7a2dab4ee0259)
+++ arch/ia64/src/dummy.s	(revision 7453929d2544639ed584538be3d0bcaa203a825c)
@@ -33,5 +33,4 @@
 .global userspace
 .global before_thread_runs_arch
-.global arch_late_init
 .global cpu_sleep
 .global dummy
@@ -44,5 +43,4 @@
 calibrate_delay_loop:
 asm_delay_loop:
-arch_late_init:
 cpu_sleep:
 fpu_init:
Index: arch/ia64/src/ia64.c
===================================================================
--- arch/ia64/src/ia64.c	(revision f10c72e4e1f10cc38d817f852eb7a2dab4ee0259)
+++ arch/ia64/src/ia64.c	(revision 7453929d2544639ed584538be3d0bcaa203a825c)
@@ -47,2 +47,11 @@
 {
 }
+
+void arch_pre_smp_init(void)
+{
+}
+
+
+void arch_post_smp_init(void)
+{
+}
Index: arch/mips32/src/mips32.c
===================================================================
--- arch/mips32/src/mips32.c	(revision f10c72e4e1f10cc38d817f852eb7a2dab4ee0259)
+++ arch/mips32/src/mips32.c	(revision 7453929d2544639ed584538be3d0bcaa203a825c)
@@ -91,5 +91,9 @@
 }
 
-void arch_late_init(void)
+void arch_pre_smp_init(void)
+{
+}
+
+void arch_post_smp_init(void)
 {
 }
Index: arch/ppc32/src/ppc32.c
===================================================================
--- arch/ppc32/src/ppc32.c	(revision f10c72e4e1f10cc38d817f852eb7a2dab4ee0259)
+++ arch/ppc32/src/ppc32.c	(revision 7453929d2544639ed584538be3d0bcaa203a825c)
@@ -37,5 +37,9 @@
 }
 
-void arch_late_init(void)
+void arch_pre_smp_init(void)
+{
+}
+
+void arch_post_smp_init(void)
 {
 }
Index: arch/sparc64/src/sparc64.c
===================================================================
--- arch/sparc64/src/sparc64.c	(revision f10c72e4e1f10cc38d817f852eb7a2dab4ee0259)
+++ arch/sparc64/src/sparc64.c	(revision 7453929d2544639ed584538be3d0bcaa203a825c)
@@ -37,5 +37,9 @@
 }
 
-void arch_late_init(void)
+void arch_pre_smp_init(void)
+{
+}
+
+void arch_post_smp_init(void)
 {
 }
Index: generic/include/arch.h
===================================================================
--- generic/include/arch.h	(revision f10c72e4e1f10cc38d817f852eb7a2dab4ee0259)
+++ generic/include/arch.h	(revision 7453929d2544639ed584538be3d0bcaa203a825c)
@@ -67,5 +67,6 @@
 extern void arch_pre_mm_init(void);
 extern void arch_post_mm_init(void);
-extern void arch_late_init(void);
+extern void arch_pre_smp_init(void);
+extern void arch_post_smp_init(void);
 extern void calibrate_delay_loop(void);
 
Index: generic/src/main/main.c
===================================================================
--- generic/src/main/main.c	(revision f10c72e4e1f10cc38d817f852eb7a2dab4ee0259)
+++ generic/src/main/main.c	(revision 7453929d2544639ed584538be3d0bcaa203a825c)
@@ -166,7 +166,7 @@
 		config.base, hardcoded_ktext_size/1024, hardcoded_kdata_size/1024);
 
-	arch_late_init();
-	
+	arch_pre_smp_init();
 	smp_init();
+	arch_post_smp_init();
 	printf("config.memory_size=%dM\n", config.memory_size/(1024*1024));
 	printf("config.cpu_count=%d\n", config.cpu_count);
