From 71fad9fdeefd5d874768802125f98ea6450cfa5c Mon Sep 17 00:00:00 2001 From: Julian Elischer Date: Wed, 11 Sep 2002 08:13:56 +0000 Subject: Completely redo thread states. Reviewed by: davidxu@freebsd.org --- sys/vm/vm_meter.c | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) (limited to 'sys/vm/vm_meter.c') diff --git a/sys/vm/vm_meter.c b/sys/vm/vm_meter.c index a1b8adb238fa..78a53488acff 100644 --- a/sys/vm/vm_meter.c +++ b/sys/vm/vm_meter.c @@ -88,7 +88,6 @@ vmtotal(SYSCTL_HANDLER_ARGS) vm_object_t object; vm_map_t map; int paging; - struct ksegrp *kg; struct thread *td; totalp = &total; @@ -111,42 +110,34 @@ vmtotal(SYSCTL_HANDLER_ARGS) mtx_lock_spin(&sched_lock); switch (p->p_state) { case PRS_NEW: - if (p->p_sflag & PS_INMEM) - totalp->t_rq++; - else - totalp->t_sw++; mtx_unlock_spin(&sched_lock); continue; break; default: FOREACH_THREAD_IN_PROC(p, td) { + /* Need new statistics XXX */ switch (td->td_state) { - case TDS_MTX: - case TDS_SLP: - kg = td->td_ksegrp; /* XXXKSE */ - if (p->p_sflag & PS_INMEM) { + case TDS_INHIBITED: + if (TD_ON_MUTEX(td) || + (td->td_inhibitors == + TDI_SWAPPED)) { + totalp->t_sw++; + } else if (TD_IS_SLEEPING(td) || + TD_AWAITING_INTR(td) || + TD_IS_SUSPENDED(td)) { if (td->td_priority <= PZERO) totalp->t_dw++; - else if (kg->kg_slptime - < maxslp) + else totalp->t_sl++; - } else if (kg->kg_slptime < maxslp) - totalp->t_sw++; - if (kg->kg_slptime >= maxslp) { - continue; } break; + case TDS_CAN_RUN: + totalp->t_sw++; + break; case TDS_RUNQ: case TDS_RUNNING: - if (p->p_sflag & PS_INMEM) - totalp->t_rq++; - else - totalp->t_sw++; - continue; - - case TDS_IWAIT: - totalp->t_sl++; + totalp->t_rq++; continue; default: break; -- cgit v1.2.3