move definition of vm_inherit_t to vm.h
[unix-history] / usr / src / sys / vm / vm_meter.c
index 306b421..c14da26 100644 (file)
@@ -4,7 +4,7 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)vm_meter.c  7.12 (Berkeley) %G%
+ *     @(#)vm_meter.c  7.14 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -13,7 +13,7 @@
 #include "kernel.h"
 #include "vm.h"
 
 #include "kernel.h"
 #include "vm.h"
 
-fixpt_t        averunnable[3];         /* load average, of runnable procs */
+struct loadavg averunnable;            /* load average, of runnable procs */
 
 int    maxslp = MAXSLP;
 int    saferss = SAFERSS;
 
 int    maxslp = MAXSLP;
 int    saferss = SAFERSS;
@@ -24,7 +24,7 @@ vmmeter()
        register unsigned *cp, *rp, *sp;
 
        if (time.tv_sec % 5 == 0)
        register unsigned *cp, *rp, *sp;
 
        if (time.tv_sec % 5 == 0)
-               loadav(averunnable);
+               loadav(&averunnable);
        if (proc0.p_slptime > maxslp/2)
                wakeup((caddr_t)&proc0);
 }
        if (proc0.p_slptime > maxslp/2)
                wakeup((caddr_t)&proc0);
 }
@@ -44,7 +44,7 @@ fixpt_t       cexp[3] = {
  * 1, 5 and 15 minute intervals.
  */
 loadav(avg)
  * 1, 5 and 15 minute intervals.
  */
 loadav(avg)
-       register fixpt_t *avg;
+       register struct loadavg *avg;
 {
        register int i, nrun;
        register struct proc *p;
 {
        register int i, nrun;
        register struct proc *p;
@@ -61,14 +61,46 @@ loadav(avg)
                }
        }
        for (i = 0; i < 3; i++)
                }
        }
        for (i = 0; i < 3; i++)
-               avg[i] = (cexp[i] * avg[i] + nrun * FSCALE * (FSCALE - cexp[i]))
-                        >> FSHIFT;
+               avg->ldavg[i] = (cexp[i] * avg->ldavg[i] +
+                       nrun * FSCALE * (FSCALE - cexp[i])) >> FSHIFT;
 #if defined(COMPAT_43) && (defined(vax) || defined(tahoe))
        for (i = 0; i < 3; i++)
 #if defined(COMPAT_43) && (defined(vax) || defined(tahoe))
        for (i = 0; i < 3; i++)
-               avenrun[i] = (double) averunnable[i] / FSCALE;
+               avenrun[i] = (double) avg->ldavg[i] / FSCALE;
 #endif /* COMPAT_43 */
 }
 
 #endif /* COMPAT_43 */
 }
 
+/*
+ * Load average information
+ */
+/* ARGSUSED */
+kinfo_loadavg(op, where, acopysize, arg, aneeded)
+       int op;
+       register char *where;
+       int *acopysize, arg, *aneeded;
+{
+       int buflen, error;
+
+       *aneeded = sizeof(averunnable);
+       if (where == NULL)
+               return (0);
+       /*
+        * Check for enough buffering.
+        */
+       buflen = *acopysize;
+       if (buflen < sizeof(averunnable)) {
+               *acopysize = 0;
+               return (0);
+       }
+       /*
+        * Copyout averunnable structure.
+        */
+       averunnable.fscale = FSCALE;
+       if (error = copyout((caddr_t)&averunnable, where, sizeof(averunnable)))
+               return (error);
+       *acopysize = sizeof(averunnable);
+       return (0);
+}
+
 /*
  * Calculate and return vmtotals structure.
  */
 /*
  * Calculate and return vmtotals structure.
  */
@@ -156,7 +188,8 @@ vmtotal(totalp)
                paging = 0;
                for (map = &p->p_vmspace->vm_map, entry = map->header.next;
                     entry != &map->header; entry = entry->next) {
                paging = 0;
                for (map = &p->p_vmspace->vm_map, entry = map->header.next;
                     entry != &map->header; entry = entry->next) {
-                       if (entry->is_a_map || entry->is_sub_map)
+                       if (entry->is_a_map || entry->is_sub_map ||
+                           entry->object.vm_object == NULL)
                                continue;
                        entry->object.vm_object->flags |= OBJ_ACTIVE;
                        paging |= entry->object.vm_object->paging_in_progress;
                                continue;
                        entry->object.vm_object->flags |= OBJ_ACTIVE;
                        paging |= entry->object.vm_object->paging_in_progress;