]> err.no Git - linux-2.6/blobdiff - arch/um/kernel/trap_user.c
Merge branch 'upstream' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/misc-2.6
[linux-2.6] / arch / um / kernel / trap_user.c
index 50a4042a509f9043621b6cdf7178c0a629b7e58a..e9ccd6b8d3c78d1092b07c4cb93cda92f9559f9d 100644 (file)
@@ -40,37 +40,15 @@ 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) && !UPT_SEGV_IS_FIXABLE(regs)){
-               bad_segv(UPT_FAULT_ADDR(regs), UPT_IP(regs), 
-                        UPT_FAULT_WRITE(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 = UPT_FAULT_ADDR(regs);
-       segfault_record[index].pid = os_getpid();
-       segfault_record[index].is_write = UPT_FAULT_WRITE(regs);
-       segfault_record[index].sp = UPT_SP(regs);
-       segfault_record[index].is_user = UPT_IS_USER(regs);
-       segv(UPT_FAULT_ADDR(regs), UPT_IP(regs), UPT_FAULT_WRITE(regs),
-            UPT_IS_USER(regs), regs);
+        segv(*fi, UPT_IP(regs), UPT_IS_USER(regs), regs);
 }
 
 void usr2_handler(int sig, union uml_pt_regs *regs)