summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_meter.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/vm/vm_meter.c')
-rw-r--r--sys/vm/vm_meter.c45
1 files changed, 27 insertions, 18 deletions
diff --git a/sys/vm/vm_meter.c b/sys/vm/vm_meter.c
index 20346fa..c3697be 100644
--- a/sys/vm/vm_meter.c
+++ b/sys/vm/vm_meter.c
@@ -73,27 +73,34 @@ static fixpt_t cexp[3] = {
/*
* Compute a tenex style load average of a quantity on
* 1, 5 and 15 minute intervals.
+ * XXXKSE Needs complete rewrite when correct info is available.
+ * Completely Bogus.. only works with 1:1 (but compiles ok now :-)
*/
static void
loadav(struct loadavg *avg)
{
int i, nrun;
struct proc *p;
+ struct ksegrp *kg;
sx_slock(&allproc_lock);
- for (nrun = 0, p = LIST_FIRST(&allproc); p != 0; p = LIST_NEXT(p, p_list)) {
- switch (p->p_stat) {
- case SSLEEP:
- if (p->p_pri.pri_level > PZERO ||
- p->p_slptime != 0)
- continue;
- /* FALLTHROUGH */
- case SRUN:
- if ((p->p_flag & P_NOLOAD) != 0)
- continue;
- /* FALLTHROUGH */
- case SIDL:
- nrun++;
+ nrun = 0;
+ FOREACH_PROC_IN_SYSTEM(p) {
+ FOREACH_KSEGRP_IN_PROC(p, kg) {
+ switch (p->p_stat) {
+ case SSLEEP:
+ if (kg->kg_pri.pri_level > PZERO ||
+ kg->kg_slptime != 0) /* ke? */
+ goto nextproc;
+ /* FALLTHROUGH */
+ case SRUN:
+ if ((p->p_flag & P_NOLOAD) != 0)
+ goto nextproc;
+ /* FALLTHROUGH */
+ case SIDL:
+ nrun++;
+ }
+nextproc:
}
}
sx_sunlock(&allproc_lock);
@@ -139,6 +146,7 @@ vmtotal(SYSCTL_HANDLER_ARGS)
vm_object_t object;
vm_map_t map;
int paging;
+ struct ksegrp *kg;
totalp = &total;
bzero(totalp, sizeof *totalp);
@@ -152,7 +160,7 @@ vmtotal(SYSCTL_HANDLER_ARGS)
* Calculate process statistics.
*/
sx_slock(&allproc_lock);
- LIST_FOREACH(p, &allproc, p_list) {
+ FOREACH_PROC_IN_SYSTEM(p) {
if (p->p_flag & P_SYSTEM)
continue;
mtx_lock_spin(&sched_lock);
@@ -164,14 +172,15 @@ vmtotal(SYSCTL_HANDLER_ARGS)
case SMTX:
case SSLEEP:
case SSTOP:
+ kg = &p->p_ksegrp; /* XXXKSE */
if (p->p_sflag & PS_INMEM) {
- if (p->p_pri.pri_level <= PZERO)
+ if (kg->kg_pri.pri_level <= PZERO)
totalp->t_dw++;
- else if (p->p_slptime < maxslp)
+ else if (kg->kg_slptime < maxslp)
totalp->t_sl++;
- } else if (p->p_slptime < maxslp)
+ } else if (kg->kg_slptime < maxslp)
totalp->t_sw++;
- if (p->p_slptime >= maxslp) {
+ if (kg->kg_slptime >= maxslp) {
mtx_unlock_spin(&sched_lock);
continue;
}
OpenPOWER on IntegriCloud