Add some temporary debugging.
authorMatthew Dillon <dillon@dragonflybsd.org>
Thu, 3 Jul 2003 01:58:25 +0000 (01:58 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Thu, 3 Jul 2003 01:58:25 +0000 (01:58 +0000)
sys/i386/i386/trap.c
sys/platform/pc32/i386/trap.c

index 0fc0f90..598e5c9 100644 (file)
@@ -36,7 +36,7 @@
  *
  *     from: @(#)trap.c        7.4 (Berkeley) 5/13/91
  * $FreeBSD: src/sys/i386/i386/trap.c,v 1.147.2.11 2003/02/27 19:09:59 luoqi Exp $
- * $DragonFly: src/sys/i386/i386/Attic/trap.c,v 1.14 2003/07/01 18:49:52 dillon Exp $
+ * $DragonFly: src/sys/i386/i386/Attic/trap.c,v 1.15 2003/07/03 01:58:25 dillon Exp $
  */
 
 /*
@@ -184,18 +184,29 @@ usertdsw(struct thread *ntd)
        td->td_switch(ntd);
 }
 
+static int uerecurse;
+static void *ueswitch;
 /*
  * Note that userenter() may be re-entered several times due to AST
  * processing.
  */
+static void nop(void) { }
+
 static __inline void
 userenter(void)
 {
-       struct thread *td = curthread;
-
+       struct thread *td;
+
+       ++uerecurse;
+       if (uerecurse == 2)
+               panic("userenter: reentered!");
+       td = curthread;
+       ueswitch = td->td_switch;
+       nop();
        KASSERT(td->td_switch == cpu_heavy_switch || td->td_switch == usertdsw,
                ("userenter: bad td_switch = %p", td->td_switch));
        td->td_switch = usertdsw;
+       --uerecurse;
 }
 
 static int
@@ -224,6 +235,8 @@ userret(struct proc *p, struct trapframe *frame,
         * we did not hit our lazy switch function in the first place we
         * do not need to restore anything.
         */
+       if (++uerecurse == 2)
+               panic("userret: uerecursed!");
        if (td->td_switch == cpu_heavy_switch) {
                switch(p->p_rtprio.type) {
                case RTP_PRIO_IDLE:
@@ -241,6 +254,7 @@ userret(struct proc *p, struct trapframe *frame,
                KKASSERT(td->td_switch == usertdsw);
                td->td_switch = cpu_heavy_switch;
        }
+       --uerecurse;
        crit_exit();
 
        /*
index ceb018c..89f41b7 100644 (file)
@@ -36,7 +36,7 @@
  *
  *     from: @(#)trap.c        7.4 (Berkeley) 5/13/91
  * $FreeBSD: src/sys/i386/i386/trap.c,v 1.147.2.11 2003/02/27 19:09:59 luoqi Exp $
- * $DragonFly: src/sys/platform/pc32/i386/trap.c,v 1.14 2003/07/01 18:49:52 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/i386/trap.c,v 1.15 2003/07/03 01:58:25 dillon Exp $
  */
 
 /*
@@ -184,18 +184,29 @@ usertdsw(struct thread *ntd)
        td->td_switch(ntd);
 }
 
+static int uerecurse;
+static void *ueswitch;
 /*
  * Note that userenter() may be re-entered several times due to AST
  * processing.
  */
+static void nop(void) { }
+
 static __inline void
 userenter(void)
 {
-       struct thread *td = curthread;
-
+       struct thread *td;
+
+       ++uerecurse;
+       if (uerecurse == 2)
+               panic("userenter: reentered!");
+       td = curthread;
+       ueswitch = td->td_switch;
+       nop();
        KASSERT(td->td_switch == cpu_heavy_switch || td->td_switch == usertdsw,
                ("userenter: bad td_switch = %p", td->td_switch));
        td->td_switch = usertdsw;
+       --uerecurse;
 }
 
 static int
@@ -224,6 +235,8 @@ userret(struct proc *p, struct trapframe *frame,
         * we did not hit our lazy switch function in the first place we
         * do not need to restore anything.
         */
+       if (++uerecurse == 2)
+               panic("userret: uerecursed!");
        if (td->td_switch == cpu_heavy_switch) {
                switch(p->p_rtprio.type) {
                case RTP_PRIO_IDLE:
@@ -241,6 +254,7 @@ userret(struct proc *p, struct trapframe *frame,
                KKASSERT(td->td_switch == usertdsw);
                td->td_switch = cpu_heavy_switch;
        }
+       --uerecurse;
        crit_exit();
 
        /*