Index: kernel/arch/ia32/src/ia32.c
===================================================================
--- kernel/arch/ia32/src/ia32.c	(revision c18e666457af2dee7b1e5d5be66a683f42f252eb)
+++ kernel/arch/ia32/src/ia32.c	(revision 2845930ac60c1fddd2f6cb32cb2b2f34c75a7e4e)
@@ -238,4 +238,11 @@
 }
 
+void arch_reboot(void)
+{
+#ifdef CONFIG_PC_KBD
+	i8042_cpu_reset((i8042_t *) I8042_BASE);
+#endif
+}
+
 /** @}
  */
Index: kernel/arch/ia32/src/pm.c
===================================================================
--- kernel/arch/ia32/src/pm.c	(revision c18e666457af2dee7b1e5d5be66a683f42f252eb)
+++ kernel/arch/ia32/src/pm.c	(revision 2845930ac60c1fddd2f6cb32cb2b2f34c75a7e4e)
@@ -233,27 +233,4 @@
 }
 
-/* Reboot the machine by initiating
- * a triple fault
- */
-void arch_reboot(void)
-{
-	preemption_disable();
-	ipl_t ipl = interrupts_disable();
-	
-	memsetb(idt, sizeof(idt), 0);
-	
-	ptr_16_32_t idtr;
-	idtr.limit = sizeof(idt);
-	idtr.base = (uintptr_t) idt;
-	idtr_load(&idtr);
-	
-	interrupts_restore(ipl);
-	asm volatile (
-		"int $0x03\n"
-		"cli\n"
-		"hlt\n"
-	);
-}
-
 /** @}
  */
