diff -urN oldtree/arch/x86_64/kernel/traps.c newtree/arch/x86_64/kernel/traps.c
--- oldtree/arch/x86_64/kernel/traps.c	2006-07-05 10:06:57.000000000 -0400
+++ newtree/arch/x86_64/kernel/traps.c	2006-07-05 21:09:25.000000000 -0400
@@ -551,11 +551,14 @@
 
 void die(const char * str, struct pt_regs * regs, long err)
 {
-	unsigned long flags = oops_begin();
+	unsigned long flags;
 
+	oops_enter();
+	flags = oops_begin();
 	handle_BUG(regs);
 	__die(str, regs, err);
 	oops_end(flags);
+	oops_exit();
 	do_exit(SIGSEGV); 
 }
 
diff -urN oldtree/arch/x86_64/mm/fault.c newtree/arch/x86_64/mm/fault.c
--- oldtree/arch/x86_64/mm/fault.c	2006-07-05 10:06:57.000000000 -0400
+++ newtree/arch/x86_64/mm/fault.c	2006-07-05 21:09:25.000000000 -0400
@@ -261,9 +261,11 @@
 static noinline void pgtable_bad(unsigned long address, struct pt_regs *regs,
 				 unsigned long error_code)
 {
-	unsigned long flags = oops_begin();
+	unsigned long flags;
 	struct task_struct *tsk;
 
+	oops_enter();
+	flags = oops_begin();
 	printk(KERN_ALERT "%s: Corrupted page table at address %lx\n",
 	       current->comm, address);
 	dump_pagetable(address);
@@ -273,6 +275,7 @@
 	tsk->thread.error_code = error_code;
 	__die("Bad pagetable", regs, error_code);
 	oops_end(flags);
+	oops_exit();
 	do_exit(SIGKILL);
 }
 
@@ -562,6 +565,7 @@
  * terminate things with extreme prejudice.
  */
 
+	oops_enter();
 	flags = oops_begin();
 
 	if (address < PAGE_SIZE)
@@ -578,6 +582,7 @@
 	/* Executive summary in case the body of the oops scrolled away */
 	printk(KERN_EMERG "CR2: %016lx\n", address);
 	oops_end(flags);
+	oops_exit();
 	do_exit(SIGKILL);
 
 /*
