[patch] i386: early pagefault handler

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Page faults during kernel initialization can be hard to diagnose.

Add a handler that prints the fault address, EIP and top of stack
when an early page fault happens.

Signed-off-by: Chuck Ebbert <[email protected]>

 arch/i386/kernel/head.S |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+)

--- 2.6.17-nb.orig/arch/i386/kernel/head.S
+++ 2.6.17-nb/arch/i386/kernel/head.S
@@ -378,8 +378,41 @@ rp_sidt:
 	addl $8,%edi
 	dec %ecx
 	jne rp_sidt
+
+	lea page_fault,%edi	/* early page fault handler */
+	movw %di,%ax
+	andl $0x0000ffff,%edx
+	andl $0xffff0000,%edi
+	orl %edi,%edx
+	lea idt_table,%edi
+	movl %eax,8*14(%edi)
+	movl %edx,8*14+4(%edi)
+
 	ret
 
+/* This is the early page fault handler */
+	ALIGN
+page_fault:
+	cld
+#ifdef CONFIG_PRINTK
+	movl $(__KERNEL_DS),%eax
+	movl %eax,%ds
+	movl %eax,%es
+	movl %cr2,%eax
+	pushl %eax
+	pushl $pf_msg
+#ifdef CONFIG_EARLY_PRINTK
+	call early_printk
+#else
+	call printk
+#endif
+#endif
+hlt_loop:
+	hlt
+1:
+	rep ; nop
+	jmp 1b
+
 /* This is the default interrupt "handler" :-) */
 	ALIGN
 ignore_int:
@@ -441,6 +474,10 @@ ready:	.byte 0
 int_msg:
 	.asciz "Unknown interrupt or fault at EIP %p %p %p\n"
 
+pf_msg:
+	.ascii "Pg flt: CR2 %p  err %p  EIP %p  CS %p  flags %p\n"
+	.asciz "   Stk: %p %p %p %p %p %p %p %p\n"
+
 /*
  * The IDT and GDT 'descriptors' are a strange 48-bit object
  * only used by the lidt and lgdt instructions. They are not
-- 
Chuck
 "You can't read a newspaper if you can't read."  --George W. Bush
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux