/* * Linux compatible /proc/meminfo. Only active when the -o linux * mountflag is used. */ int procfs_domeminfo(struct lwp *curl, struct proc *p, struct pfsnode *pfs, struct uio *uio) { char *bf; int len; int error = 0; bf = malloc(LBFSZ, M_TEMP, M_WAITOK); len = snprintf(bf, LBFSZ, " total: used: free: shared: buffers: cached:\n" "Mem: %8lu %8lu %8lu %8lu %8lu %8lu\n" "Swap: %8lu %8lu %8lu\n" "MemTotal: %8lu kB\n" "MemFree: %8lu kB\n" "MemShared: %8lu kB\n" "Buffers: %8lu kB\n" "Cached: %8lu kB\n" "SwapTotal: %8lu kB\n" "SwapFree: %8lu kB\n", PGTOB(uvmexp.npages), PGTOB(uvmexp.npages - uvmexp.free), PGTOB(uvmexp.free), 0L, PGTOB(uvmexp.filepages), PGTOB(uvmexp.anonpages + uvmexp.filepages + uvmexp.execpages), PGTOB(uvmexp.swpages), PGTOB(uvmexp.swpginuse), PGTOB(uvmexp.swpages - uvmexp.swpginuse), PGTOKB(uvmexp.npages), PGTOKB(uvmexp.free), 0L, PGTOKB(uvmexp.filepages), PGTOKB(uvmexp.anonpages + uvmexp.filepages + uvmexp.execpages), PGTOKB(uvmexp.swpages), PGTOKB(uvmexp.swpages - uvmexp.swpginuse)); if (len == 0) goto out; error = uiomove_frombuf(bf, len, uio); out: free(bf, M_TEMP); return error; }
/* * Linux compatible /proc/meminfo. Only active when the -o linux * mountflag is used. */ int procfs_domeminfo(struct proc *curp, struct proc *p, struct pfsnode *pfs, struct uio *uio) { char buf[512], *cp; int len, error; len = snprintf(buf, sizeof buf, " total: used: free: shared: buffers: cached:\n" "Mem: %8lu %8lu %8lu %8lu %8lu %8lu\n" "Swap: %8lu %8lu %8lu\n" "MemTotal: %8lu kB\n" "MemFree: %8lu kB\n" "MemShared: %8lu kB\n" "Buffers: %8lu kB\n" "Cached: %8lu kB\n" "SwapTotal: %8lu kB\n" "SwapFree: %8lu kB\n", PGTOB(uvmexp.npages), PGTOB(uvmexp.npages - uvmexp.free), PGTOB(uvmexp.free), 0L, 0L, 0L, PGTOB(uvmexp.swpages), PGTOB(uvmexp.swpginuse), PGTOB(uvmexp.swpages - uvmexp.swpginuse), PGTOKB(uvmexp.npages), PGTOKB(uvmexp.free), 0L, 0L, 0L, PGTOKB(uvmexp.swpages), PGTOKB(uvmexp.swpages - uvmexp.swpginuse)); if (len == 0) return 0; len -= uio->uio_offset; cp = buf + uio->uio_offset; len = imin(len, uio->uio_resid); if (len <= 0) error = 0; else error = uiomove(cp, len, uio); return error; }