Fix paging #PF, simplify init_tasks

Unsure what fixed the paging #PF in init_tasks, but allocating a page
now works as expected. Originally a #PF would occur if alloc_page was
called after a certain point in init_tasks.
diff --git a/src/kernel/x86_32/faults.c b/src/kernel/x86_32/faults.c
index e7c4180..761558c 100644
--- a/src/kernel/x86_32/faults.c
+++ b/src/kernel/x86_32/faults.c
@@ -12,8 +12,22 @@
 
 #define ADD_INTERRUPT(sym, num) add_interrupt_handler(num, sym##_h)
 
-DECLARE_INTERRUPT(gp, "#GP")
-DECLARE_INTERRUPT(pf, "#PF")
+DECLARE_INTERRUPT(gp, "#GP");
+
+static void pf_h(struct registers *regs)
+{
+	uint err = regs->error_code;
+
+	kprintf(ERROR "Fault #PF: eip=0x%x, err=0x%x\n", regs->eip, err);
+	kprintf("\tDue to: %c%c%c%c\n",
+			err & 1 ? 'P' : ' ',
+			err & (1<<1) ? 'W' : ' ',
+			err & (1<<2) ? 'U' : ' ',
+			err & (1<<4) ? 'I' : ' ');
+
+	asm("cli");
+	kpanic("#PF");
+}
 
 void init_faults()
 {