From: Jeff Dike <jdike@addtoit.com>

This eliminates the segfault info ring buffer, which added a system call to
each page fault, and which hadn't been useful for debugging in ages.

Signed-off-by: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 arch/um/kernel/trap_kern.c |   27 ---------------------------
 arch/um/kernel/trap_user.c |   21 ---------------------
 2 files changed, 48 deletions(-)

diff -puN arch/um/kernel/trap_kern.c~uml-remove-debugging-code-from-page-fault-path arch/um/kernel/trap_kern.c
--- devel/arch/um/kernel/trap_kern.c~uml-remove-debugging-code-from-page-fault-path	2005-08-01 16:34:11.000000000 -0700
+++ devel-akpm/arch/um/kernel/trap_kern.c	2005-08-01 16:34:11.000000000 -0700
@@ -200,30 +200,3 @@ void winch(int sig, union uml_pt_regs *r
 void trap_init(void)
 {
 }
-
-DEFINE_SPINLOCK(trap_lock);
-
-static int trap_index = 0;
-
-int next_trap_index(int limit)
-{
-	int ret;
-
-	spin_lock(&trap_lock);
-	ret = trap_index;
-	if(++trap_index == limit)
-		trap_index = 0;
-	spin_unlock(&trap_lock);
-	return(ret);
-}
-
-/*
- * Overrides for Emacs so that we follow Linus's tabbing style.
- * Emacs will notice this stuff at the end of the file and automatically
- * adjust the settings for this buffer only.  This must remain at the end
- * of the file.
- * ---------------------------------------------------------------------------
- * Local variables:
- * c-file-style: "linux"
- * End:
- */
diff -puN arch/um/kernel/trap_user.c~uml-remove-debugging-code-from-page-fault-path arch/um/kernel/trap_user.c
--- devel/arch/um/kernel/trap_user.c~uml-remove-debugging-code-from-page-fault-path	2005-08-01 16:34:11.000000000 -0700
+++ devel-akpm/arch/um/kernel/trap_user.c	2005-08-01 16:34:11.000000000 -0700
@@ -40,35 +40,14 @@ void kill_child_dead(int pid)
 	} while(1);
 }
 
-/* Unlocked - don't care if this is a bit off */
-int nsegfaults = 0;
-
-struct {
-	unsigned long address;
-	int is_write;
-	int pid;
-	unsigned long sp;
-	int is_user;
-} segfault_record[1024];
-
 void segv_handler(int sig, union uml_pt_regs *regs)
 {
-	int index, max;
         struct faultinfo * fi = UPT_FAULTINFO(regs);
 
         if(UPT_IS_USER(regs) && !SEGV_IS_FIXABLE(fi)){
                 bad_segv(*fi, UPT_IP(regs));
 		return;
 	}
-	max = sizeof(segfault_record)/sizeof(segfault_record[0]);
-	index = next_trap_index(max);
-
-	nsegfaults++;
-        segfault_record[index].address = FAULT_ADDRESS(*fi);
-	segfault_record[index].pid = os_getpid();
-        segfault_record[index].is_write = FAULT_WRITE(*fi);
-	segfault_record[index].sp = UPT_SP(regs);
-	segfault_record[index].is_user = UPT_IS_USER(regs);
         segv(*fi, UPT_IP(regs), UPT_IS_USER(regs), regs);
 }
 
_