public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [patch] i386: early pagefault handler
@ 2006-07-05 11:44 Chuck Ebbert
  2006-07-05 11:47 ` Ingo Molnar
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Chuck Ebbert @ 2006-07-05 11:44 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andrew Morton, Ingo Molnar, Linus Torvalds

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 <76306.1226@compuserve.com>

 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

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2006-07-07  2:53 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-07-05 11:44 [patch] i386: early pagefault handler Chuck Ebbert
2006-07-05 11:47 ` Ingo Molnar
2006-07-05 13:10 ` Andi Kleen
2006-07-05 16:38   ` H. Peter Anvin
2006-07-05 16:54     ` Linus Torvalds
2006-07-05 18:28       ` Alan Cox
2006-07-05 18:26         ` H. Peter Anvin
2006-07-05 18:41         ` Linus Torvalds
2006-07-05 20:24 ` Linus Torvalds
2006-07-07  2:06 ` Daniel Phillips
2006-07-07  2:51   ` H. Peter Anvin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox