1:1 Userland threading stage 2.12/4:
authorSimon Schubert <corecode@dragonflybsd.org>
Fri, 16 Feb 2007 23:11:40 +0000 (23:11 +0000)
committerSimon Schubert <corecode@dragonflybsd.org>
Fri, 16 Feb 2007 23:11:40 +0000 (23:11 +0000)
Factor out lwp_stat and move P_STOPPED into p_stat.

Reviewed-by: Thomas E. Spanjaard <tgen@netphreax.net>
36 files changed:
bin/ps/print.c
lib/libkvm/kvm_proc.c
sys/emulation/linux/i386/linprocfs/linprocfs_misc.c
sys/kern/init_main.c
sys/kern/kern_exit.c
sys/kern/kern_fork.c
sys/kern/kern_kinfo.c
sys/kern/kern_proc.c
sys/kern/kern_sig.c
sys/kern/kern_synch.c
sys/kern/kern_threads.c
sys/kern/sys_generic.c
sys/kern/sys_process.c
sys/kern/tty.c
sys/kern/usched_bsd4.c
sys/platform/pc32/i386/genassym.c
sys/platform/pc32/i386/swtch.s
sys/platform/pc32/i386/trap.c
sys/platform/vkernel/i386/genassym.c
sys/platform/vkernel/i386/swtch.s
sys/platform/vkernel/i386/trap.c
sys/sys/kinfo.h
sys/sys/proc.h
sys/vfs/procfs/procfs_ctl.c
sys/vfs/procfs/procfs_dbregs.c
sys/vfs/procfs/procfs_fpregs.c
sys/vfs/procfs/procfs_regs.c
sys/vm/vm_glue.c
sys/vm/vm_meter.c
sys/vm/vm_pageout.c
usr.bin/fstat/fstat.c
usr.bin/gcore/gcore.c
usr.bin/systat/pigs.c
usr.bin/top/machine.c
usr.bin/w/proc_compare.c
usr.bin/w/w.c

index cd1c6aa..f839450 100644 (file)
@@ -32,7 +32,7 @@
  *
  * @(#)print.c 8.6 (Berkeley) 4/16/94
  * $FreeBSD: src/bin/ps/print.c,v 1.36.2.4 2002/11/30 13:00:14 tjr Exp $
- * $DragonFly: src/bin/ps/print.c,v 1.28 2007/02/08 10:18:21 corecode Exp $
+ * $DragonFly: src/bin/ps/print.c,v 1.29 2007/02/16 23:11:39 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -179,33 +179,41 @@ state(const KINFO *k, const struct varent *vent)
                *cp = 'T';
                break;
 
-       case SSLEEP:
-               if (flag & P_SINTR)     /* interruptable (long) */
-                       *cp = KI_LWP(k, slptime) >= MAXSLP ? 'I' : 'S';
-               else if (KI_LWP(k, tdflags) & TDF_SINTR)
-                       *cp = 'S';
-               else
-                       *cp = 'D';
-               break;
+       case SACTIVE:
+               switch (KI_LWP(k, stat)) {
+               case LSSLEEP:
+                       if (flag & P_SINTR)     /* interruptable (long) */
+                               *cp = KI_LWP(k, slptime) >= MAXSLP ? 'I' : 'S';
+                       else if (KI_LWP(k, tdflags) & TDF_SINTR)
+                               *cp = 'S';
+                       else
+                               *cp = 'D';
+                       break;
 
-       case SRUN:
-       case SIDL:
-               *cp = 'R';
-               if (KI_LWP(k, tdflags) & TDF_RUNNING) {
-                   ++cp;
-                   sprintf(cp, "%d", KI_LWP(k, cpuid));
-                   while (cp[1])
-                       ++cp;
-               }
-               break;
+               case LSRUN:
+                       *cp = 'R';
+                       if (KI_LWP(k, tdflags) & TDF_RUNNING) {
+                           ++cp;
+                           sprintf(cp, "%d", KI_LWP(k, cpuid));
+                           while (cp[1])
+                               ++cp;
+                       }
+                       break;
 
-       case SZOMB:
-               *cp = 'Z';
+               case LSSTOP:
+                       /* shouldn't happen anyways */
+                       *cp = 'T';
+                       break;
+               }
                break;
 
        default:
                *cp = '?';
        }
+
+       if (flag & P_ZOMBIE)
+               *cp = 'Z';
+
        cp++;
        if (flag & P_SWAPPEDOUT)
                *cp++ = 'W';
@@ -215,7 +223,7 @@ state(const KINFO *k, const struct varent *vent)
                *cp++ = 'N';
        if (flag & P_TRACED)
                *cp++ = 'X';
-       if (flag & P_WEXIT && KI_LWP(k, stat) != SZOMB)
+       if (flag & P_WEXIT && (flag & P_ZOMBIE) == 0)
                *cp++ = 'E';
        if (flag & P_PPWAIT)
                *cp++ = 'V';
@@ -414,40 +422,34 @@ cputime(const KINFO *k, const struct varent *vent)
 {
        long secs;
        long psecs;     /* "parts" of a second. first micro, then centi */
+       u_int64_t timeus;
        char obuff[128];
        static char decimal_point = '\0';
 
        if (decimal_point == '\0')
                decimal_point = localeconv()->decimal_point[0];
 
-       if (KI_LWP(k, stat) == SZOMB) {
-               secs = 0;
-               psecs = 0;
-       } else {
-               u_int64_t timeus;
-
-               /*
-                * This counts time spent handling interrupts.  We could
-                * fix this, but it is not 100% trivial (and interrupt
-                * time fractions only work on the sparc anyway).       XXX
-                */
-               timeus = KI_LWP(k, uticks) + KI_LWP(k, sticks) +
-                       KI_LWP(k, iticks);
-               secs = timeus / 1000000;
-               psecs = timeus % 1000000;
-               if (sumrusage) {
-                       secs += KI_PROC(k, cru).ru_utime.tv_sec +
-                               KI_PROC(k, cru).ru_stime.tv_sec;
-                       psecs += KI_PROC(k, cru).ru_utime.tv_usec +
-                               KI_PROC(k, cru).ru_stime.tv_usec;
-               }
-               /*
-                * round and scale to 100's
-                */
-               psecs = (psecs + 5000) / 10000;
-               secs += psecs / 100;
-               psecs = psecs % 100;
+       /*
+        * This counts time spent handling interrupts.  We could
+        * fix this, but it is not 100% trivial (and interrupt
+        * time fractions only work on the sparc anyway).       XXX
+        */
+       timeus = KI_LWP(k, uticks) + KI_LWP(k, sticks) +
+               KI_LWP(k, iticks);
+       secs = timeus / 1000000;
+       psecs = timeus % 1000000;
+       if (sumrusage) {
+               secs += KI_PROC(k, cru).ru_utime.tv_sec +
+                       KI_PROC(k, cru).ru_stime.tv_sec;
+               psecs += KI_PROC(k, cru).ru_utime.tv_usec +
+                       KI_PROC(k, cru).ru_stime.tv_usec;
        }
+       /*
+        * round and scale to 100's
+        */
+       psecs = (psecs + 5000) / 10000;
+       secs += psecs / 100;
+       psecs = psecs % 100;
        snprintf(obuff, sizeof(obuff),
            "%3ld:%02ld%c%02ld", secs/60, secs%60, decimal_point, psecs);
        printf("%*s", vent->width, obuff);
index 549c763..37b86c4 100644 (file)
@@ -35,7 +35,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/lib/libkvm/kvm_proc.c,v 1.25.2.3 2002/08/24 07:27:46 kris Exp $
- * $DragonFly: src/lib/libkvm/kvm_proc.c,v 1.10 2007/02/01 10:33:25 corecode Exp $
+ * $DragonFly: src/lib/libkvm/kvm_proc.c,v 1.11 2007/02/16 23:11:39 corecode Exp $
  *
  * @(#)kvm_proc.c      8.3 (Berkeley) 9/23/93
  */
@@ -629,7 +629,7 @@ proc_verify(kvm_t *kd, const struct kinfo_proc *p)
                return (0);
 
        error = (p->kp_pid == kp.kp_pid &&
-           (kp.kp_stat != SZOMB || p->kp_stat == SZOMB));
+           ((kp.kp_flags & P_ZOMBIE) == 0 || (p->kp_flags & P_ZOMBIE)));
        return (error);
 }
 
@@ -654,7 +654,7 @@ kvm_doargv(kvm_t *kd, const struct kinfo_proc *kp, int nchr,
        /*
         * Pointers are stored at the top of the user stack.
         */
-       if (kp->kp_stat == SZOMB ||
+       if ((kp->kp_flags & P_ZOMBIE) ||
            kvm_uread(kd, kp->kp_pid, ps_strings, (char *)&arginfo,
                      sizeof(arginfo)) != sizeof(arginfo))
                return (0);
index 4af32eb..3a4b726 100644 (file)
@@ -39,7 +39,7 @@
  *     @(#)procfs_status.c     8.4 (Berkeley) 6/15/94
  *
  * $FreeBSD: src/sys/i386/linux/linprocfs/linprocfs_misc.c,v 1.3.2.8 2001/06/25 19:46:47 pirzyk Exp $
- * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs_misc.c,v 1.16 2007/01/06 19:37:20 dillon Exp $
+ * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs_misc.c,v 1.17 2007/02/16 23:11:39 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -372,9 +372,9 @@ static char *state_str[] = {
        "? (unknown)",
        "I (idle)",
        "R (running)",
-       "S (sleeping)",
        "T (stopped)",
        "Z (zombie)",
+       "S (sleeping)",
        "W (waiting)",
        "M (mutex)"
 };
@@ -393,6 +393,8 @@ linprocfs_doprocstatus(struct proc *curp, struct proc *p, struct pfsnode *pfs,
                state = state_str[0];
        else
                state = state_str[(int)p->p_stat];
+       if (p->p_flag & P_ZOMBIE)
+               state = state_str[4];
 
 #define PS_ADD ps += ksprintf
        PS_ADD(ps, "Name:\t%s\n",         p->p_comm); /* XXX escape */
index e4f7400..adfb5b3 100644 (file)
@@ -40,7 +40,7 @@
  *
  *     @(#)init_main.c 8.9 (Berkeley) 1/21/94
  * $FreeBSD: src/sys/kern/init_main.c,v 1.134.2.8 2003/06/06 20:21:32 tegge Exp $
- * $DragonFly: src/sys/kern/init_main.c,v 1.72 2007/02/03 17:05:57 corecode Exp $
+ * $DragonFly: src/sys/kern/init_main.c,v 1.73 2007/02/16 23:11:39 corecode Exp $
  */
 
 #include "opt_init_path.h"
@@ -328,7 +328,8 @@ proc0_init(void *dummy __unused)
        p->p_sysent = &aout_sysvec;
 
        p->p_flag = P_SYSTEM;
-       p->p_stat = SRUN;
+       p->p_stat = SACTIVE;
+       lp->lwp_stat = LSRUN;
        p->p_nice = NZERO;
        p->p_rtprio.type = RTP_PRIO_NORMAL;
        p->p_rtprio.prio = 0;
index 1599a6c..eaec8a5 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)kern_exit.c 8.7 (Berkeley) 2/12/94
  * $FreeBSD: src/sys/kern/kern_exit.c,v 1.92.2.11 2003/01/13 22:51:16 dillon Exp $
- * $DragonFly: src/sys/kern/kern_exit.c,v 1.69 2007/02/03 17:05:57 corecode Exp $
+ * $DragonFly: src/sys/kern/kern_exit.c,v 1.70 2007/02/16 23:11:39 corecode Exp $
  */
 
 #include "opt_compat.h"
@@ -447,7 +447,7 @@ loop:
         * the CONT when both are stopped and continued together.  This litte
         * two-line hack restores this effect.
         */
-       while (q->p_flag & P_STOPPED)  
+       while (q->p_stat == SSTOP)
             tstop(q);
 
        nfound = 0;
@@ -561,7 +561,7 @@ loop:
                        nprocs--;
                        return (0);
                }
-               if ((p->p_flag & P_STOPPED) && (p->p_flag & P_WAITED) == 0 &&
+               if (p->p_stat == SSTOP && (p->p_flag & P_WAITED) == 0 &&
                    (p->p_flag & P_TRACED || options & WUNTRACED)) {
                        p->p_flag |= P_WAITED;
 
index 76d425b..2a3068a 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)kern_fork.c 8.6 (Berkeley) 4/8/94
  * $FreeBSD: src/sys/kern/kern_fork.c,v 1.72.2.14 2003/06/26 04:15:10 silby Exp $
- * $DragonFly: src/sys/kern/kern_fork.c,v 1.61 2007/02/03 17:05:57 corecode Exp $
+ * $DragonFly: src/sys/kern/kern_fork.c,v 1.62 2007/02/16 23:11:39 corecode Exp $
  */
 
 #include "opt_ktrace.h"
@@ -299,6 +299,7 @@ fork1(struct lwp *lp1, int flags, struct proc **procp)
         * process once it starts getting hooked into the rest of the system.
         */
        p2->p_stat = SIDL;
+       lp2->lwp_stat = LSRUN;  /* XXX use other state?  start_forked_proc() handles this*/
        proc_add_allproc(p2);
 
        /*
@@ -605,7 +606,8 @@ start_forked_proc(struct lwp *lp1, struct proc *p2)
            ("cannot start forked process, bad status: %p", p2));
        p2->p_usched->resetpriority(lp2);
        crit_enter();
-       p2->p_stat = SRUN;
+       p2->p_stat = SACTIVE;
+       lp2->lwp_stat = LSRUN;
        p2->p_usched->setrunqueue(lp2);
        crit_exit();
 
index 280808a..c6f1669 100644 (file)
@@ -32,7 +32,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * 
- * $DragonFly: src/sys/kern/kern_kinfo.c,v 1.6 2007/02/16 02:15:25 corecode Exp $
+ * $DragonFly: src/sys/kern/kern_kinfo.c,v 1.7 2007/02/16 23:11:39 corecode Exp $
  */
 
 /*
@@ -152,9 +152,7 @@ fill_kinfo_lwp(struct lwp *lwp, struct kinfo_lwp *kl)
        kl->kl_tid = lwp->lwp_tid;
 
        kl->kl_flags = lwp->lwp_flag;
-#ifdef notyet
        kl->kl_stat = lwp->lwp_stat;
-#endif
        kl->kl_tdflags = lwp->lwp_thread->td_flags;
 #ifdef SMP
        kl->kl_mpcount = lwp->lwp_thread->td_mpcount;
@@ -203,11 +201,9 @@ fill_kinfo_proc_kthread(struct thread *td, struct kinfo_proc *kp)
        kp->kp_tdev = NOUDEV;
        strncpy(kp->kp_comm, td->td_comm, sizeof(kp->kp_comm) - 1);
        kp->kp_comm[sizeof(kp->kp_comm) - 1] = 0;
-#ifdef notyet
-       kp->kp_lwp.kl_flags = LWP_SYSTEM;
-#else
        kp->kp_flags = P_SYSTEM;
-#endif
+       kp->kp_stat = SACTIVE;
+
        kp->kp_lwp.kl_pid = -1;
        kp->kp_lwp.kl_tid = (uintptr_t)td;
        kp->kp_lwp.kl_tdflags = td->td_flags;
@@ -227,19 +223,10 @@ fill_kinfo_proc_kthread(struct thread *td, struct kinfo_proc *kp)
        kp->kp_lwp.kl_cpuid = td->td_gd->gd_cpuid;
 
        kp->kp_lwp.kl_wchan = (uintptr_t)td->td_wchan;
-       if (td->td_wchan) {
-#ifdef notyet
-               kp->kp_lwp.kl_stat = SSLEEP;
-#else
-               kp->kp_stat = SSLEEP;
-#endif
-       } else {
-#ifdef notyet
-               kp->kp_lwp.kl_stat = SRUN;
-#else
-               kp->kp_stat = SRUN;
-#endif
-       }
+       if (td->td_wchan)
+               kp->kp_lwp.kl_stat = LSSLEEP;
+       else
+               kp->kp_lwp.kl_stat = LSRUN;
        if (td->td_wmesg) {
                strncpy(kp->kp_lwp.kl_wmesg, td->td_wmesg, WMESGLEN);
                kp->kp_lwp.kl_wmesg[WMESGLEN] = 0;
index 7b7084c..b85a7a3 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)kern_proc.c 8.7 (Berkeley) 2/14/95
  * $FreeBSD: src/sys/kern/kern_proc.c,v 1.63.2.9 2003/05/08 07:47:16 kbyanc Exp $
- * $DragonFly: src/sys/kern/kern_proc.c,v 1.35 2007/02/03 17:05:58 corecode Exp $
+ * $DragonFly: src/sys/kern/kern_proc.c,v 1.36 2007/02/16 23:11:39 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -371,7 +371,7 @@ orphanpg(struct pgrp *pg)
        struct proc *p;
 
        LIST_FOREACH(p, &pg->pg_members, p_pglist) {
-               if (p->p_flag & P_STOPPED) {
+               if (p->p_stat == SSTOP) {
                        LIST_FOREACH(p, &pg->pg_members, p_pglist) {
                                ksignal(p, SIGHUP);
                                ksignal(p, SIGCONT);
index 203a292..1f3f5dc 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)kern_sig.c  8.7 (Berkeley) 4/18/94
  * $FreeBSD: src/sys/kern/kern_sig.c,v 1.72.2.17 2003/05/16 16:34:34 obrien Exp $
- * $DragonFly: src/sys/kern/kern_sig.c,v 1.62 2007/02/03 17:05:58 corecode Exp $
+ * $DragonFly: src/sys/kern/kern_sig.c,v 1.63 2007/02/16 23:11:39 corecode Exp $
  */
 
 #include "opt_ktrace.h"
@@ -896,16 +896,19 @@ ksignal(struct proc *p, int sig)
         * except that stopped processes must be continued by SIGCONT.
         */
        if (action == SIG_HOLD) {
-               if ((prop & SA_CONT) == 0 || (p->p_flag & P_STOPPED) == 0)
+               if ((prop & SA_CONT) == 0 || p->p_stat != SSTOP)
                        return;
        }
 
        crit_enter();
 
+
+       /* XXX lwp handle stop/continue */
+
        /*
-        * Process is in tsleep and not stopped
+        * LWP is in tsleep and not stopped
         */
-       if (p->p_stat == SSLEEP && (p->p_flag & P_STOPPED) == 0) {
+       if (lp->lwp_stat == LSSLEEP && p->p_stat != SSTOP) {
                /*
                 * If the process is sleeping uninterruptibly
                 * we can't interrupt the sleep... the signal will
@@ -957,13 +960,12 @@ ksignal(struct proc *p, int sig)
                                goto out;
 
                        /*
-                        * Do not actually try to manipulate the process
-                        * while it is sleeping, simply set P_STOPPED to
-                        * indicate that it should stop as soon as it safely
-                        * can.
+                        * Do not actually try to manipulate the process while
+                        * it is sleeping, simply set SSTOP to indicate that
+                        * lwps should stop as soon as they safely can.
                         */
                        SIGDELSET(p->p_siglist, sig);
-                       p->p_flag |= P_STOPPED;
+                       p->p_stat = SSTOP;
                        p->p_flag &= ~P_WAITED;
                        p->p_xstat = sig;
                        wakeup(p->p_pptr);
@@ -981,7 +983,7 @@ ksignal(struct proc *p, int sig)
        /*
         * Process is in tsleep and is stopped
         */
-       if (p->p_stat == SSLEEP && (p->p_flag & P_STOPPED)) {
+       if (lp->lwp_stat == LSSLEEP && p->p_stat == SSTOP) {
                /*
                 * If the process is stopped and is being traced, then no
                 * further action is necessary.
@@ -1061,12 +1063,12 @@ ksignal(struct proc *p, int sig)
         */
        if (lp == lwkt_preempted_proc()) {
                signotify();
-       } else if (p->p_stat == SRUN) {
+       } else if (lp->lwp_stat == LSRUN) {
                struct thread *td = lp->lwp_thread;
 
                KASSERT(td != NULL, 
-                   ("pid %d NULL p_thread stat %d flags %08x",
-                   p->p_pid, p->p_stat, p->p_flag));
+                   ("pid %d/%d NULL lwp_thread stat %d flags %08x/%08x",
+                   p->p_pid, lp->lwp_tid, lp->lwp_stat, p->p_flag, lp->lwp_flag));
 
 #ifdef SMP
                if (td->td_gd != mycpu)
@@ -1340,19 +1342,21 @@ issignal(struct lwp *lp)
                         * If traced, always stop, and stay stopped until
                         * released by the parent.
                         *
-                        * NOTE: P_STOPPED may get cleared during the loop,
+                        * NOTE: SSTOP may get cleared during the loop,
                         * but we do not re-notify the parent if we have 
                         * to loop several times waiting for the parent
                         * to let us continue.
+                        *
+                        * XXX not sure if this is still true
                         */
                        p->p_xstat = sig;
-                       p->p_flag |= P_STOPPED;
+                       p->p_stat = SSTOP;
                        p->p_flag &= ~P_WAITED;
                        ksignal(p->p_pptr, SIGCHLD);
                        do {
                                tstop(p);
                        } while (!trace_req(p) && (p->p_flag & P_TRACED));
-                       p->p_flag &= ~P_STOPPED;
+                       p->p_stat = SACTIVE;
 
                        /*
                         * If parent wants us to take the signal,
@@ -1426,12 +1430,12 @@ issignal(struct lwp *lp)
                                    prop & SA_TTYSTOP))
                                        break;  /* == ignore */
                                p->p_xstat = sig;
-                               p->p_flag |= P_STOPPED;
+                               p->p_stat = SSTOP;
                                p->p_flag &= ~P_WAITED;
 
                                if ((p->p_pptr->p_procsig->ps_flag & PS_NOCLDSTOP) == 0)
                                        ksignal(p->p_pptr, SIGCHLD);
-                               while (p->p_flag & P_STOPPED) {
+                               while (p->p_stat == SSTOP) {
                                        tstop(p);
                                }
                                break;
index 2f62246..e8ec17c 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)kern_synch.c        8.9 (Berkeley) 5/19/95
  * $FreeBSD: src/sys/kern/kern_synch.c,v 1.87.2.6 2002/10/13 07:29:53 kbyanc Exp $
- * $DragonFly: src/sys/kern/kern_synch.c,v 1.72 2007/02/03 17:05:58 corecode Exp $
+ * $DragonFly: src/sys/kern/kern_synch.c,v 1.73 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include "opt_ktrace.h"
@@ -196,7 +196,7 @@ schedcpu_stats(struct proc *p, void *data __unused)
        lp = FIRST_LWP_IN_PROC(p);
        crit_enter();
        p->p_swtime++;
-       if (p->p_stat == SSLEEP)
+       if (lp->lwp_stat == LSSLEEP)
                lp->lwp_slptime++;
 
        /*
@@ -381,8 +381,8 @@ tsleep(void *ident, int flags, const char *wmesg, int timo)
        crit_enter_quick(td);
 
        KASSERT(ident != NULL, ("tsleep: no ident"));
-       KASSERT(p == NULL || p->p_stat == SRUN, ("tsleep %p %s %d",
-               ident, wmesg, p->p_stat));
+       KASSERT(lp == NULL || lp->lwp_stat == LSRUN, ("tsleep %p %s %d",
+               ident, wmesg, lp->lwp_stat));
 
        /*
         * Setup for the current process (if this is a process). 
@@ -395,7 +395,7 @@ tsleep(void *ident, int flags, const char *wmesg, int timo)
                         * critical section.
                         *
                         * Early termination only occurs when tsleep() is
-                        * entered while in a normal SRUN state.
+                        * entered while in a normal LSRUN state.
                         */
                        if ((sig = CURSIG(lp)) != 0)
                                goto resume;
@@ -455,15 +455,15 @@ tsleep(void *ident, int flags, const char *wmesg, int timo)
                 * Ok, we are sleeping.  Place us in the SSLEEP state.
                 */
                KKASSERT((p->p_flag & P_ONRUNQ) == 0);
-               p->p_stat = SSLEEP;
+               lp->lwp_stat = LSSLEEP;
                lp->lwp_ru.ru_nvcsw++;
                lwkt_switch();
 
                /*
-                * And when we are woken up, put us back in SRUN.  If we
+                * And when we are woken up, put us back in LSRUN.  If we
                 * slept for over a second, recalculate our estcpu.
                 */
-               p->p_stat = SRUN;
+               lp->lwp_stat = LSRUN;
                if (lp->lwp_slptime)
                        p->p_usched->recalculate(lp);
                lp->lwp_slptime = 0;
@@ -621,7 +621,7 @@ endtsleep(void *arg)
 
                if ((p = td->td_proc) != NULL) {
                        p->p_flag |= P_BREAKTSLEEP;
-                       if ((p->p_flag & P_STOPPED) == 0)
+                       if (p->p_stat != SSTOP)
                                setrunnable(p);
                } else {
                        unsleep_and_wakeup_thread(td);
@@ -911,18 +911,18 @@ setrunnable(struct proc *p)
        struct lwp *lp = FIRST_LWP_IN_PROC(p);
        crit_enter();
        ASSERT_MP_LOCK_HELD(curthread);
-       p->p_flag &= ~P_STOPPED;
-       if (p->p_stat == SSLEEP && (p->p_flag & P_BREAKTSLEEP)) {
+       p->p_stat = SACTIVE;    /* XXX lwp */
+       if (lp->lwp_stat == LSSLEEP && (p->p_flag & P_BREAKTSLEEP)) {
                unsleep_and_wakeup_thread(lp->lwp_thread);
        }
        crit_exit();
 }
 
 /*
- * The process is stopped due to some condition, usually because P_STOPPED
- * is set but also possibly due to being traced.  
+ * The process is stopped due to some condition, usually because p_stat is
+ * set to SSTOP, but also possibly due to being traced.  
  *
- * NOTE!  If the caller sets P_STOPPED, the caller must also clear P_WAITED
+ * NOTE!  If the caller sets SSTOP, the caller must also clear P_WAITED
  * because the parent may check the child's status before the child actually
  * gets to this routine.
  *
@@ -1011,14 +1011,12 @@ loadav_count_runnable(struct proc *p, void *data)
 
        /* XXX lwp */
        lp = FIRST_LWP_IN_PROC(p);
-       switch (p->p_stat) {
-       case SRUN:
+       switch (lp->lwp_stat) {
+       case LSRUN:
                if ((td = lp->lwp_thread) == NULL)
                        break;
                if (td->td_flags & TDF_BLOCKED)
                        break;
-               /* fall through */
-       case SIDL:
                ++*nrunp;
                break;
        default:
index e41245e..b720cf8 100644 (file)
@@ -47,7 +47,7 @@
  * and I certainly make no claims as to its fitness for *any* purpose.
  * 
  * $FreeBSD: src/sys/kern/kern_threads.c,v 1.15 1999/08/28 00:46:15 peter Exp $
- * $DragonFly: src/sys/kern/kern_threads.c,v 1.10 2007/02/03 17:05:58 corecode Exp $
+ * $DragonFly: src/sys/kern/kern_threads.c,v 1.11 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -130,6 +130,7 @@ sys_thr_wakeup(struct thr_wakeup_args *uap)
 {
        struct proc *p = curproc;
        struct proc *pSlave = p->p_leader;
+       struct lwp *lpSlave;
 
        while(pSlave && (pSlave->p_pid != uap->pid))
                pSlave = pSlave->p_peers;
@@ -139,9 +140,9 @@ sys_thr_wakeup(struct thr_wakeup_args *uap)
                return(0);
        }
 
+       lpSlave = FIRST_LWP_IN_PROC(pSlave);
        pSlave->p_wakeup++;
-       if((pSlave->p_stat == SSLEEP) &&
-          (FIRST_LWP_IN_PROC(pSlave)->lwp_wchan == pSlave)) {
+       if((lpSlave->lwp_stat == LSSLEEP) && lpSlave->lwp_wchan == pSlave) {
                wakeup(pSlave);
                return(0);
        }
index f728e0a..7fa93f9 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)sys_generic.c       8.5 (Berkeley) 1/21/94
  * $FreeBSD: src/sys/kern/sys_generic.c,v 1.55.2.10 2001/03/17 10:39:32 peter Exp $
- * $DragonFly: src/sys/kern/sys_generic.c,v 1.40 2007/02/03 17:05:58 corecode Exp $
+ * $DragonFly: src/sys/kern/sys_generic.c,v 1.41 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include "opt_ktrace.h"
@@ -1121,7 +1121,7 @@ selwakeup(struct selinfo *sip)
                         * here if the process is not in a stopped state.
                         */
                        p->p_flag |= P_BREAKTSLEEP;
-                       if ((p->p_flag & P_STOPPED) == 0)
+                       if (p->p_stat != SSTOP)
                                setrunnable(p);
                } else if (p->p_flag & P_SELECT) {
                        p->p_flag &= ~P_SELECT;
index 1407396..7651e1f 100644 (file)
@@ -29,7 +29,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/kern/sys_process.c,v 1.51.2.6 2003/01/08 03:06:45 kan Exp $
- * $DragonFly: src/sys/kern/sys_process.c,v 1.27 2007/02/03 17:05:58 corecode Exp $
+ * $DragonFly: src/sys/kern/sys_process.c,v 1.28 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -366,7 +366,7 @@ kern_ptrace(struct proc *curp, int req, pid_t pid, void *addr, int data, int *re
                        return EBUSY;
 
                /* not currently stopped */
-               if ((p->p_flag & P_STOPPED) == 0 ||
+               if (p->p_stat != SSTOP ||
                    (p->p_flag & P_WAITED) == 0) {
                        return EBUSY;
                }
@@ -455,7 +455,7 @@ kern_ptrace(struct proc *curp, int req, pid_t pid, void *addr, int data, int *re
                 * force it to SRUN again.
                 */
                crit_enter();
-               if (p->p_flag & P_STOPPED) {
+               if (p->p_stat == SSTOP) {
                        p->p_xstat = data;
                        p->p_flag |= P_BREAKTSLEEP;
                        setrunnable(p);
index 4e81d38..f0871a2 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)tty.c       8.8 (Berkeley) 1/21/94
  * $FreeBSD: src/sys/kern/tty.c,v 1.129.2.5 2002/03/11 01:32:31 dd Exp $
- * $DragonFly: src/sys/kern/tty.c,v 1.36 2007/02/03 17:05:58 corecode Exp $
+ * $DragonFly: src/sys/kern/tty.c,v 1.37 2007/02/16 23:11:40 corecode Exp $
  */
 
 /*-
@@ -2374,7 +2374,7 @@ ttyinfo(struct tty *tp)
                 */
                if (pick->p_flag & P_WEXIT)
                        str = "exiting";
-               else if (pick->p_stat == SRUN)
+               else if (lp->lwp_stat == LSRUN)
                        str = "running";
                else if (pick->p_stat == SIDL)
                        str = "spawning";
@@ -2433,7 +2433,7 @@ ttyinfo(struct tty *tp)
  *        we pick out just "short-term" sleepers (P_SINTR == 0).
  *     4) Further ties are broken by picking the highest pid.
  */
-#define ISRUN(p)       (((p)->p_stat == SRUN) || ((p)->p_stat == SIDL))
+#define ISRUN(lp)      ((lp)->lwp_stat == LSRUN)
 #define TESTAB(a, b)    ((a)<<1 | (b))
 #define ONLYA   2
 #define ONLYB   1
@@ -2453,7 +2453,7 @@ proc_compare(struct proc *p1, struct proc *p2)
        /*
         * see if at least one of them is runnable
         */
-       switch (TESTAB(ISRUN(p1), ISRUN(p2))) {
+       switch (TESTAB(ISRUN(lp1), ISRUN(lp2))) {
        case ONLYA:
                return (0);
        case ONLYB:
index 73e89ea..a986674 100644 (file)
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $DragonFly: src/sys/kern/usched_bsd4.c,v 1.19 2007/01/01 22:51:17 corecode Exp $
+ * $DragonFly: src/sys/kern/usched_bsd4.c,v 1.20 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -428,10 +428,10 @@ bsd4_setrunqueue(struct lwp *lp)
         * We are in control of the process.
         */
        crit_enter();
-       KASSERT(lp->lwp_proc->p_stat == SRUN, ("setrunqueue: proc not SRUN"));
+       KASSERT(lp->lwp_stat == LSRUN, ("setrunqueue: lwp not LSRUN"));
        KASSERT((lp->lwp_proc->p_flag & P_ONRUNQ) == 0,
-           ("lwp %d/%d already on runq! flag %08x", lp->lwp_proc->p_pid,
-            lp->lwp_tid, lp->lwp_proc->p_flag));
+           ("lwp %d/%d already on runq! flag %08x/%08x", lp->lwp_proc->p_pid,
+            lp->lwp_tid, lp->lwp_proc->p_flag, lp->lwp_flag));
        KKASSERT((lp->lwp_thread->td_flags & TDF_RUNQ) == 0);
 
        /*
index 4605895..70b2824 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     from: @(#)genassym.c    5.11 (Berkeley) 5/10/91
  * $FreeBSD: src/sys/i386/i386/genassym.c,v 1.86.2.3 2002/03/03 05:42:49 nyan Exp $
- * $DragonFly: src/sys/platform/pc32/i386/genassym.c,v 1.54 2007/01/08 03:33:42 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/i386/genassym.c,v 1.55 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -77,7 +77,6 @@ ASSYM(P_VMSPACE, offsetof(struct proc, p_vmspace));
 ASSYM(VM_PMAP, offsetof(struct vmspace, vm_pmap));
 ASSYM(PM_ACTIVE, offsetof(struct pmap, pm_active));
 ASSYM(P_ADDR, offsetof(struct proc, p_addr));
-ASSYM(P_STAT, offsetof(struct proc, p_stat));
 
 ASSYM(TD_PROC, offsetof(struct thread, td_proc));
 ASSYM(TD_PCB, offsetof(struct thread, td_pcb));
@@ -101,8 +100,6 @@ ASSYM(TD_SAVEFPU, offsetof(struct thread, td_mach) + offsetof(struct md_thread,
 ASSYM(TDPRI_CRIT, TDPRI_CRIT);
 ASSYM(TDPRI_INT_SUPPORT, TDPRI_INT_SUPPORT);
 
-ASSYM(SSLEEP, SSLEEP);
-ASSYM(SRUN, SRUN);
 ASSYM(V_TRAP, offsetof(struct vmmeter, v_trap));
 ASSYM(V_SYSCALL, offsetof(struct vmmeter, v_syscall));
 ASSYM(V_SENDSYS, offsetof(struct vmmeter, v_sendsys));
index d9a4773..8876d90 100644 (file)
@@ -66,7 +66,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/i386/swtch.s,v 1.89.2.10 2003/01/23 03:36:24 ps Exp $
- * $DragonFly: src/sys/platform/pc32/i386/swtch.s,v 1.43 2007/01/08 03:33:42 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/i386/swtch.s,v 1.44 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include "use_npx.h"
@@ -245,7 +245,7 @@ ENTRY(cpu_exit_switch)
  *     do is clear the TDF_RUNNING bit in the old thread and set it in the
  *     new thread.
  *
- *     NOTE: The process may be in any state, not necessarily SRUN, because
+ *     NOTE: The lwp may be in any state, not necessarily LSRUN, because
  *     a preemption switch may interrupt the process and then return via 
  *     cpu_heavy_restore.
  *
index f4dca4b..74b6bdd 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.97 2007/02/03 17:05:58 corecode Exp $
+ * $DragonFly: src/sys/platform/pc32/i386/trap.c,v 1.98 2007/02/16 23:11:40 corecode Exp $
  */
 
 /*
@@ -250,7 +250,7 @@ recheck:
        /*
         * Block here if we are in a stopped state.
         */
-       if (p->p_flag & P_STOPPED) {
+       if (p->p_stat == SSTOP) {
                get_mplock();
                tstop(p);
                rel_mplock();
index 47a0e4e..59fe320 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     from: @(#)genassym.c    5.11 (Berkeley) 5/10/91
  * $FreeBSD: src/sys/i386/i386/genassym.c,v 1.86.2.3 2002/03/03 05:42:49 nyan Exp $
- * $DragonFly: src/sys/platform/vkernel/i386/genassym.c,v 1.55 2007/01/08 03:33:43 dillon Exp $
+ * $DragonFly: src/sys/platform/vkernel/i386/genassym.c,v 1.56 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -75,7 +75,6 @@ ASSYM(P_VMSPACE, offsetof(struct proc, p_vmspace));
 ASSYM(VM_PMAP, offsetof(struct vmspace, vm_pmap));
 ASSYM(PM_ACTIVE, offsetof(struct pmap, pm_active));
 ASSYM(P_ADDR, offsetof(struct proc, p_addr));
-ASSYM(P_STAT, offsetof(struct proc, p_stat));
 
 ASSYM(TD_PROC, offsetof(struct thread, td_proc));
 ASSYM(TD_PCB, offsetof(struct thread, td_pcb));
index 1b485f3..bd403eb 100644 (file)
@@ -66,7 +66,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/i386/swtch.s,v 1.89.2.10 2003/01/23 03:36:24 ps Exp $
- * $DragonFly: src/sys/platform/vkernel/i386/swtch.s,v 1.4 2007/01/08 03:33:43 dillon Exp $
+ * $DragonFly: src/sys/platform/vkernel/i386/swtch.s,v 1.5 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include "use_npx.h"
@@ -246,7 +246,7 @@ ENTRY(cpu_exit_switch)
  *     do is clear the TDF_RUNNING bit in the old thread and set it in the
  *     new thread.
  *
- *     NOTE: The process may be in any state, not necessarily SRUN, because
+ *     NOTE: The lwp may be in any state, not necessarily LSRUN, because
  *     a preemption switch may interrupt the process and then return via 
  *     cpu_heavy_restore.
  *
index 78f1307..7e717d4 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/vkernel/i386/trap.c,v 1.16 2007/02/03 17:05:58 corecode Exp $
+ * $DragonFly: src/sys/platform/vkernel/i386/trap.c,v 1.17 2007/02/16 23:11:40 corecode Exp $
  */
 
 /*
@@ -236,7 +236,7 @@ recheck:
        /*
         * Block here if we are in a stopped state.
         */
-       if (p->p_flag & P_STOPPED) {
+       if (p->p_stat == SSTOP) {
                get_mplock();
                tstop(p);
                rel_mplock();
index 69279a7..ef6dbee 100644 (file)
@@ -31,7 +31,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * 
- * $DragonFly: src/sys/sys/kinfo.h,v 1.11 2007/02/03 17:05:59 corecode Exp $
+ * $DragonFly: src/sys/sys/kinfo.h,v 1.12 2007/02/16 23:11:40 corecode Exp $
  */
 
 #ifndef _SYS_KINFO_H_
 #endif
 #include <sys/resource.h>
 #include <sys/rtprio.h>
+#ifndef _KERNEL_STRUCTURES
+#define _KERNEL_STRUCTURES
+#endif
+#include <sys/proc.h>
 
 struct kinfo_file {
        size_t   f_size;        /* size of struct kinfo_file */
@@ -107,7 +111,7 @@ struct kinfo_lwp {
        lwpid_t         kl_tid;         /* thread id */
 
        int             kl_flags;       /* LWP_ flags */
-       char            kl_stat;        /* S* lwp status */
+       enum lwpstat    kl_stat;        /* LS* lwp status */
        int             kl_tdflags;     /* thread flags */
        int             kl_mpcount;     /* MP lock held count */
        int             kl_prio;        /* scheduling priority */
@@ -142,7 +146,7 @@ struct kinfo_proc {
 
        /* proc information */
        int             kp_flags;
-       int             kp_stat;
+       enum procstat   kp_stat;
        int             kp_lock;
        int             kp_acflag;      /* accounting flags */
        int             kp_traceflag;
index 2ba3d01..18e8371 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)proc.h      8.15 (Berkeley) 5/19/95
  * $FreeBSD: src/sys/sys/proc.h,v 1.99.2.9 2003/06/06 20:21:32 tegge Exp $
- * $DragonFly: src/sys/sys/proc.h,v 1.92 2007/02/03 17:05:59 corecode Exp $
+ * $DragonFly: src/sys/sys/proc.h,v 1.93 2007/02/16 23:11:40 corecode Exp $
  */
 
 #ifndef _SYS_PROC_H_
@@ -137,6 +137,18 @@ struct jail;
 struct vkernel;
 struct ktrace_node;
 
+enum lwpstat {
+       LSRUN = 1,
+       LSSTOP = 2,
+       LSSLEEP = 3,
+};
+
+enum procstat {
+       SIDL = 1,
+       SACTIVE = 2,
+       SSTOP = 3,
+};
+
 struct lwp {
        TAILQ_ENTRY(lwp) lwp_procq;     /* run/sleep queue. */
        LIST_ENTRY(lwp) lwp_list;       /* List of all threads in the proc. */
@@ -145,10 +157,8 @@ struct lwp {
 
        lwpid_t         lwp_tid;        /* Our thread id . */
 
-       int             lwp_flag;       /* P_* flags. */
-#ifdef notyet
-       char            lwp_stat;       /* S* process status. */
-#endif
+       int             lwp_flag;       /* LWP_* flags. */
+       enum lwpstat    lwp_stat;       /* LS* lwp status. */
 
 #define lwp_startzero  lwp_dupfd
        int             lwp_dupfd;      /* Sideways return value from fdopen. XXX */
@@ -201,7 +211,7 @@ struct      proc {
 #define        p_rlimit        p_limit->pl_rlimit
 
        int             p_flag;         /* P_* flags. */
-       char            p_stat;         /* S* process status. */
+       enum procstat   p_stat;         /* S* process status. */
        char            p_pad1[3];
 
        pid_t           p_pid;          /* Process identifier. */
@@ -294,17 +304,6 @@ struct     proc {
 #define        p_session       p_pgrp->pg_session
 #define        p_pgid          p_pgrp->pg_id
 
-/*
- * Status values.   Please note that p_stat doesn't actually take on
- * synthesized states.
- */
-#define        SIDL    1               /* Process being created by fork. */
-#define        SRUN    2               /* Currently runnable. */
-#define        SSLEEP  3               /* Sleeping on an address. */
-#define        SSTOP   4               /* Synthesized from SSLEEP + P_STOPPED */
-#define        SZOMB   5               /* Synthesized from P_ZOMBIE for eproc only */
-#define STHREAD        6               /* Synthesized for eproc only */
-
 /* These flags are kept in p_flags. */
 #define        P_ADVLOCK       0x00001 /* Process may hold a POSIX advisory lock. */
 #define        P_CONTROLT      0x00002 /* Has a controlling terminal. */
@@ -316,7 +315,7 @@ struct      proc {
 #define        P_SINTR         0x00080 /* Sleep is interruptible. */
 #define        P_SUGID         0x00100 /* Had set id privileges since last exec. */
 #define        P_SYSTEM        0x00200 /* System proc: no sigs, stats or swapping. */
-#define        P_STOPPED       0x00400 /* SIGSTOP status */
+#define        P_UNUSED2       0x00400 /* was: SIGSTOP status */
 #define        P_TRACED        0x00800 /* Debugged process being traced. */
 #define        P_WAITED        0x01000 /* SIGSTOP status was returned by wait3/4 */
 #define        P_WEXIT         0x02000 /* Working on exiting. */
index 6c69e18..e649aad 100644 (file)
@@ -38,7 +38,7 @@
  *
  * From:
  * $FreeBSD: src/sys/miscfs/procfs/procfs_ctl.c,v 1.20.2.2 2002/01/22 17:22:59 nectar Exp $
- * $DragonFly: src/sys/vfs/procfs/procfs_ctl.c,v 1.9 2006/09/03 18:29:17 dillon Exp $
+ * $DragonFly: src/sys/vfs/procfs/procfs_ctl.c,v 1.10 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -60,7 +60,7 @@
  * relative to process (curp)
  */
 #define TRACE_WAIT_P(curp, p) \
-       (((p)->p_flag & P_STOPPED) && \
+       (((p)->p_stat == SSTOP) && \
         (p)->p_pptr == (curp) && \
         ((p)->p_flag & P_TRACED))
 
@@ -246,7 +246,7 @@ procfs_control(struct proc *curp, struct proc *p, int op)
                error = 0;
                if (p->p_flag & P_TRACED) {
                        while (error == 0 &&
-                                       (p->p_flag & P_STOPPED) == 0 &&
+                                       p->p_stat != SSTOP &&
                                        (p->p_flag & P_TRACED) &&
                                        (p->p_pptr == curp)) {
                                error = tsleep((caddr_t) p,
@@ -255,7 +255,7 @@ procfs_control(struct proc *curp, struct proc *p, int op)
                        if (error == 0 && !TRACE_WAIT_P(curp, p))
                                error = EBUSY;
                } else {
-                       while (error == 0 && (p->p_flag & P_STOPPED) == 0) {
+                       while (error == 0 && p->p_stat != SSTOP) {
                                error = tsleep((caddr_t) p,
                                                PCATCH, "procfs", 0);
                        }
@@ -271,7 +271,7 @@ procfs_control(struct proc *curp, struct proc *p, int op)
         * Do not set P_BREAKTSLEEP - that is, do not break a tsleep that
         * might be in progress.
         */
-       if (p->p_flag & P_STOPPED)
+       if (p->p_stat == SSTOP)
                setrunnable(p);
        return (0);
 }
index f6b5624..b9d0337 100644 (file)
@@ -41,7 +41,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/miscfs/procfs/procfs_dbregs.c,v 1.4.2.3 2002/01/22 17:22:59 nectar Exp $
- * $DragonFly: src/sys/vfs/procfs/procfs_dbregs.c,v 1.8 2006/11/07 20:48:15 dillon Exp $
+ * $DragonFly: src/sys/vfs/procfs/procfs_dbregs.c,v 1.9 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -78,7 +78,7 @@ procfs_dodbregs(struct proc *curp, struct proc *p, struct pfsnode *pfs,
        if (error == 0)
                error = uiomove_frombuf(&r, sizeof(r), uio);
        if (error == 0 && uio->uio_rw == UIO_WRITE) {
-               if ((p->p_flag & P_STOPPED) == 0)
+               if (p->p_stat != SSTOP)
                        error = EBUSY;
                else
                        error = procfs_write_dbregs(p, &r);
index 92d41f6..f6cddf8 100644 (file)
@@ -38,7 +38,7 @@
  *
  * From:
  * $FreeBSD: src/sys/miscfs/procfs/procfs_fpregs.c,v 1.11.2.3 2002/01/22 17:22:59 nectar Exp $
- * $DragonFly: src/sys/vfs/procfs/procfs_fpregs.c,v 1.8 2006/11/07 20:48:15 dillon Exp $
+ * $DragonFly: src/sys/vfs/procfs/procfs_fpregs.c,v 1.9 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -75,7 +75,7 @@ procfs_dofpregs(struct proc *curp, struct proc *p, struct pfsnode *pfs,
        if (error == 0)
                error = uiomove_frombuf(&r, sizeof(r), uio);
        if (error == 0 && uio->uio_rw == UIO_WRITE) {
-               if ((p->p_flag & P_STOPPED) == 0)
+               if (p->p_stat != SSTOP)
                        error = EBUSY;
                else
                        error = procfs_write_fpregs(p, &r);
index de0c829..3b713ce 100644 (file)
@@ -38,7 +38,7 @@
  *
  * From:
  * $FreeBSD: src/sys/miscfs/procfs/procfs_regs.c,v 1.10.2.3 2002/01/22 17:22:59 nectar Exp $
- * $DragonFly: src/sys/vfs/procfs/procfs_regs.c,v 1.9 2006/11/07 20:48:15 dillon Exp $
+ * $DragonFly: src/sys/vfs/procfs/procfs_regs.c,v 1.10 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -77,7 +77,7 @@ procfs_doregs(struct proc *curp, struct proc *p, struct pfsnode *pfs,
        if (error == 0)
                error = uiomove_frombuf(&r, sizeof(r), uio);
        if (error == 0 && uio->uio_rw == UIO_WRITE) {
-               if ((p->p_flag & P_STOPPED) == 0)
+               if (p->p_stat != SSTOP)
                        error = EBUSY;
                else
                        error = procfs_write_regs(p, &r);
index cb1b952..d55feea 100644 (file)
@@ -60,7 +60,7 @@
  * rights to redistribute these changes.
  *
  * $FreeBSD: src/sys/vm/vm_glue.c,v 1.94.2.4 2003/01/13 22:51:17 dillon Exp $
- * $DragonFly: src/sys/vm/vm_glue.c,v 1.49 2007/02/03 17:05:59 corecode Exp $
+ * $DragonFly: src/sys/vm/vm_glue.c,v 1.50 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include "opt_vm.h"
@@ -530,12 +530,13 @@ swapout_procs_callback(struct proc *p, void *data)
 
        vm = p->p_vmspace;
 
-       if (p->p_stat == SSLEEP || p->p_stat == SRUN) {
+       /* XXX lwp */
+       lp = FIRST_LWP_IN_PROC(p);
+
+       if (lp->lwp_stat == LSSLEEP || lp->lwp_stat == LSRUN) {
                /*
                 * do not swap out a realtime process
                 */
-               /* XXX lwp */
-               lp = FIRST_LWP_IN_PROC(p);
                if (RTP_PRIO_IS_REALTIME(lp->lwp_rtprio.type))
                        return(0);
 
index ac1cf94..f51a7bb 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)vm_meter.c  8.4 (Berkeley) 1/4/94
  * $FreeBSD: src/sys/vm/vm_meter.c,v 1.34.2.7 2002/10/10 19:28:22 dillon Exp $
- * $DragonFly: src/sys/vm/vm_meter.c,v 1.11 2007/02/03 17:05:59 corecode Exp $
+ * $DragonFly: src/sys/vm/vm_meter.c,v 1.12 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -148,10 +148,10 @@ do_vmtotal_callback(struct proc *p, void *data)
        /* XXX lwp */
        lp = FIRST_LWP_IN_PROC(p);
 
-       switch (p->p_stat) {
+       switch (lp->lwp_stat) {
        case 0:
                return(0);
-       case SSLEEP:
+       case LSSLEEP:
                if ((p->p_flag & P_SWAPPEDOUT) == 0) {
                        if ((p->p_flag & P_SINTR) == 0)
                                totalp->t_dw++;
@@ -164,8 +164,7 @@ do_vmtotal_callback(struct proc *p, void *data)
                        return(0);
                break;
 
-       case SRUN:
-       case SIDL:
+       case LSRUN:
                if (p->p_flag & P_SWAPPEDOUT)
                        totalp->t_sw++;
                else
index 4612520..49afd27 100644 (file)
@@ -66,7 +66,7 @@
  * rights to redistribute these changes.
  *
  * $FreeBSD: src/sys/vm/vm_pageout.c,v 1.151.2.15 2002/12/29 18:21:04 dillon Exp $
- * $DragonFly: src/sys/vm/vm_pageout.c,v 1.30 2007/02/03 17:05:59 corecode Exp $
+ * $DragonFly: src/sys/vm/vm_pageout.c,v 1.31 2007/02/16 23:11:40 corecode Exp $
  */
 
 /*
@@ -1210,7 +1210,7 @@ vm_pageout_scan_callback(struct proc *p, void *data)
         * if the process is in a non-running type state,
         * don't touch it.
         */
-       if (p->p_stat != SRUN && p->p_stat != SSLEEP) {
+       if (p->p_stat != SACTIVE && p->p_stat != SSTOP) {
                return (0);
        }
 
@@ -1529,7 +1529,7 @@ vm_daemon_callback(struct proc *p, void *data __unused)
         * if the process is in a non-running type state,
         * don't touch it.
         */
-       if (p->p_stat != SRUN && p->p_stat != SSLEEP)
+       if (p->p_stat != SACTIVE && p->p_stat != SSTOP)
                return (0);
 
        /*
index 1a841d5..ef4f480 100644 (file)
@@ -33,7 +33,7 @@
  * @(#) Copyright (c) 1988, 1993 The Regents of the University of California.  All rights reserved.
  * @(#)fstat.c 8.3 (Berkeley) 5/2/95
  * $FreeBSD: src/usr.bin/fstat/fstat.c,v 1.21.2.7 2001/11/21 10:49:37 dwmalone Exp $
- * $DragonFly: src/usr.bin/fstat/fstat.c,v 1.22 2007/02/01 10:33:26 corecode Exp $
+ * $DragonFly: src/usr.bin/fstat/fstat.c,v 1.23 2007/02/16 23:11:40 corecode Exp $
  */
 
 #define        _KERNEL_STRUCTURES
@@ -260,7 +260,7 @@ main(int argc, char **argv)
                putchar('\n');
 
        for (plast = &p[cnt]; p < plast; ++p) {
-               if (p->kp_stat == SZOMB)
+               if (p->kp_flags & P_ZOMBIE)
                        continue;
                if (!kread((void *)p->kp_paddr, &proc, sizeof(proc))) {
                        dprintf(stderr, "can't read proc at %p for pid %d\n",
index ebf4111..86e121a 100644 (file)
@@ -33,7 +33,7 @@
  * @(#) Copyright (c) 1992, 1993 The Regents of the University of California.  All rights reserved.
  * @(#)gcore.c 8.2 (Berkeley) 9/23/93
  * $FreeBSD: src/usr.bin/gcore/gcore.c,v 1.15.2.2 2001/08/17 20:56:22 mikeh Exp $
- * $DragonFly: src/usr.bin/gcore/gcore.c,v 1.8 2007/02/01 10:33:26 corecode Exp $
+ * $DragonFly: src/usr.bin/gcore/gcore.c,v 1.9 2007/02/16 23:11:40 corecode Exp $
  */
 
 /*
@@ -152,7 +152,7 @@ main(int argc, char **argv)
                if (ki->kp_ruid != uid && uid != 0)
                        errx(1, "%d: not owner", pid);
 
-               if (ki->kp_stat == SZOMB)
+               if (ki->kp_flags & P_ZOMBIE)
                        errx(1, "%d: zombie", pid);
 
                if (ki->kp_flags & P_WEXIT)
index 95e5899..e88be1d 100644 (file)
@@ -32,7 +32,7 @@
  *
  * @(#)pigs.c  8.2 (Berkeley) 9/23/93
  *
- * $DragonFly: src/usr.bin/systat/pigs.c,v 1.13 2007/02/03 17:05:59 corecode Exp $
+ * $DragonFly: src/usr.bin/systat/pigs.c,v 1.14 2007/02/16 23:11:40 corecode Exp $
  */
 
 /*
@@ -276,10 +276,10 @@ compar(const void *a, const void *b)
        /*
         * Runnability
         */
-       if (pta->pt_kp->kp_stat != ptb->pt_kp->kp_stat) {
-               if (pta->pt_kp->kp_stat == SRUN)
+       if (pta->pt_kp->kp_lwp.kl_stat != ptb->pt_kp->kp_lwp.kl_stat) {
+               if (pta->pt_kp->kp_lwp.kl_stat == LSRUN)
                        return(-1);
-               if (ptb->pt_kp->kp_stat == SRUN)
+               if (ptb->pt_kp->kp_lwp.kl_stat == LSRUN)
                        return(1);
        }
        return(0);
index 792975f..3ed5e8a 100644 (file)
@@ -21,7 +21,7 @@
  *          Hiten Pandya <hmp@backplane.com>
  *
  * $FreeBSD: src/usr.bin/top/machine.c,v 1.29.2.2 2001/07/31 20:27:05 tmm Exp $
- * $DragonFly: src/usr.bin/top/machine.c,v 1.21 2007/02/03 17:05:59 corecode Exp $
+ * $DragonFly: src/usr.bin/top/machine.c,v 1.22 2007/02/16 23:11:40 corecode Exp $
  */
 
 
@@ -116,7 +116,7 @@ static char up_header[] =
 
 char *state_abbrev[] =
 {
-    "", "START", "RUN\0\0\0", "SLEEP", "STOP", "ZOMB",
+    "", "RUN\0\0\0", "STOP", "SLEEP",
 };
 
 
@@ -503,9 +503,9 @@ caddr_t get_process_info(struct system_info *si, struct process_select *sel,
            total_procs++;
            process_states[(unsigned char) PP(pp, stat)]++;
            if ((show_threads && (LP(pp, pid) == 0)) ||
-               (!show_only_threads && (PP(pp, stat) != SZOMB) &&
+               (!show_only_threads && ((PP(pp, flags) & P_ZOMBIE) == 0) &&
                (show_idle || (LP(pp, pctcpu) != 0) ||
-                (PP(pp, stat) == SRUN)) &&
+                (LP(pp, stat) == LSRUN)) &&
                (!show_uid || PP(pp, ruid) == (uid_t)sel->uid)))
            {
                *prefp++ = pp;
@@ -582,14 +582,14 @@ char *format_next_process(caddr_t handle, char *(*get_userid)())
     pct = pctdouble(LP(pp, pctcpu));
 
     /* generate "STATE" field */
-    switch (state = PP(pp, stat)) {
-       case SRUN:
+    switch (state = LP(pp, stat)) {
+       case LSRUN:
            if (smpmode && LP(pp, tdflags) & TDF_RUNNING)
                sprintf(status, "CPU%d", LP(pp, cpuid));
            else
                strcpy(status, "RUN");
            break;
-       case SSLEEP:
+       case LSSLEEP:
            if (LP(pp, wmesg) != NULL) {
                sprintf(status, "%.6s", LP(pp, wmesg));
                break;
@@ -605,6 +605,9 @@ char *format_next_process(caddr_t handle, char *(*get_userid)())
            break;
     }
 
+    if (PP(pp, flags) & P_ZOMBIE)
+           strcpy(status, "ZOMB");
+
     /*
      * idle time 0 - 31 -> nice value +21 - +52
      * normal time      -> nice value -20 - +20 
index 3005ecd..2d0f090 100644 (file)
@@ -32,7 +32,7 @@
  *
  * @(#)proc_compare.c  8.2 (Berkeley) 9/23/93
  *
- * $DragonFly: src/usr.bin/w/proc_compare.c,v 1.6 2007/02/01 10:33:26 corecode Exp $
+ * $DragonFly: src/usr.bin/w/proc_compare.c,v 1.7 2007/02/16 23:11:40 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -60,7 +60,7 @@
  * TODO - consider whether pctcpu should be used.
  */
 
-#define ISRUN(p)       (((p)->kp_stat == SRUN) || ((p)->kp_stat == SIDL))
+#define ISRUN(p)       ((p)->kp_lwp.kl_stat == LSRUN)
 #define TESTAB(a, b)    ((a)<<1 | (b))
 #define ONLYA   2
 #define ONLYB   1
@@ -93,7 +93,7 @@ proc_compare(struct kinfo_proc *p1, struct kinfo_proc *p2)
        /*
         * weed out zombies
         */
-       switch (TESTAB(p1->kp_stat == SZOMB, p2->kp_stat == SZOMB)) {
+       switch (TESTAB(p1->kp_flags & P_ZOMBIE, p2->kp_flags & P_ZOMBIE)) {
        case ONLYA:
                return (1);
        case ONLYB:
index 22ab828..eb16bce 100644 (file)
@@ -33,7 +33,7 @@
  * @(#) Copyright (c) 1980, 1991, 1993, 1994 The Regents of the University of California.  All rights reserved.
  * @(#)w.c     8.4 (Berkeley) 4/16/94
  * $FreeBSD: src/usr.bin/w/w.c,v 1.38.2.6 2002/03/12 19:51:51 phantom Exp $
- * $DragonFly: src/usr.bin/w/w.c,v 1.8 2007/02/01 10:33:26 corecode Exp $
+ * $DragonFly: src/usr.bin/w/w.c,v 1.9 2007/02/16 23:11:40 corecode Exp $
  */
 
 /*
@@ -275,7 +275,7 @@ main(int argc, char **argv)
        if ((kp = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nentries)) == NULL)
                err(1, "%s", kvm_geterr(kd));
        for (i = 0; i < nentries; i++, kp++) {
-               if (kp->kp_stat == SIDL || kp->kp_stat == SZOMB)
+               if (kp->kp_stat == SIDL || (kp->kp_flags & P_ZOMBIE))
                        continue;
                for (ep = ehead; ep != NULL; ep = ep->next) {
                        if (ep->tdev == kp->kp_tdev) {