Home | History | Annotate | Line # | Download | only in procfs
procfs_linux.c revision 1.2.10.1
      1 /*      $NetBSD: procfs_linux.c,v 1.2.10.1 2001/11/12 21:19:12 thorpej Exp $      */
      2 
      3 /*
      4  * Copyright (c) 2001 Wasabi Systems, Inc.
      5  * All rights reserved.
      6  *
      7  * Written by Frank van der Linden for Wasabi Systems, Inc.
      8  *
      9  * Redistribution and use in source and binary forms, with or without
     10  * modification, are permitted provided that the following conditions
     11  * are met:
     12  * 1. Redistributions of source code must retain the above copyright
     13  *    notice, this list of conditions and the following disclaimer.
     14  * 2. Redistributions in binary form must reproduce the above copyright
     15  *    notice, this list of conditions and the following disclaimer in the
     16  *    documentation and/or other materials provided with the distribution.
     17  * 3. All advertising materials mentioning features or use of this software
     18  *    must display the following acknowledgement:
     19  *      This product includes software developed for the NetBSD Project by
     20  *      Wasabi Systems, Inc.
     21  * 4. The name of Wasabi Systems, Inc. may not be used to endorse
     22  *    or promote products derived from this software without specific prior
     23  *    written permission.
     24  *
     25  * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
     26  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     27  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     28  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
     29  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     30  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     31  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     32  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     33  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     34  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     35  * POSSIBILITY OF SUCH DAMAGE.
     36  */
     37 
     38 #include <sys/cdefs.h>
     39 __KERNEL_RCSID(0, "$NetBSD: procfs_linux.c,v 1.2.10.1 2001/11/12 21:19:12 thorpej Exp $");
     40 
     41 #include <sys/param.h>
     42 #include <sys/systm.h>
     43 #include <sys/time.h>
     44 #include <sys/kernel.h>
     45 #include <sys/proc.h>
     46 #include <sys/vnode.h>
     47 
     48 #include <miscfs/procfs/procfs.h>
     49 
     50 #include <uvm/uvm_extern.h>
     51 
     52 #define PGTOB(p)	((unsigned long)(p) << PAGE_SHIFT)
     53 #define PGTOKB(p)	((unsigned long)(p) << (PAGE_SHIFT - 10))
     54 
     55 /*
     56  * Linux compatible /proc/meminfo. Only active when the -o linux
     57  * mountflag is used.
     58  */
     59 int
     60 procfs_domeminfo(struct proc *curp, struct proc *p, struct pfsnode *pfs,
     61 		 struct uio *uio)
     62 {
     63 	char buf[512], *cp;
     64 	int len, error;
     65 
     66 	len = snprintf(buf, sizeof buf,
     67 		"        total:    used:    free:  shared: buffers: cached:\n"
     68 		"Mem:  %8lu %8lu %8lu %8lu %8lu %8lu\n"
     69 		"Swap: %8lu %8lu %8lu\n"
     70 		"MemTotal:  %8lu kB\n"
     71 		"MemFree:   %8lu kB\n"
     72 		"MemShared: %8lu kB\n"
     73 		"Buffers:   %8lu kB\n"
     74 		"Cached:    %8lu kB\n"
     75 		"SwapTotal: %8lu kB\n"
     76 		"SwapFree:  %8lu kB\n",
     77 		PGTOB(uvmexp.npages),
     78 		PGTOB(uvmexp.npages - uvmexp.free),
     79 		PGTOB(uvmexp.free),
     80 		0L,
     81 		PGTOB(uvmexp.vnodepages),
     82 		PGTOB(uvmexp.anonpages + uvmexp.vnodepages + uvmexp.vtextpages),
     83 		PGTOB(uvmexp.swpages),
     84 		PGTOB(uvmexp.swpginuse),
     85 		PGTOB(uvmexp.swpages - uvmexp.swpginuse),
     86 		PGTOKB(uvmexp.npages),
     87 		PGTOKB(uvmexp.free),
     88 		0L,
     89 		PGTOKB(uvmexp.vnodepages),
     90 		PGTOKB(uvmexp.anonpages + uvmexp.vnodepages +uvmexp.vtextpages),
     91 		PGTOKB(uvmexp.swpages),
     92 		PGTOKB(uvmexp.swpages - uvmexp.swpginuse));
     93 
     94 	if (len == 0)
     95 		return 0;
     96 
     97 	len -= uio->uio_offset;
     98 	cp = buf + uio->uio_offset;
     99 	len = imin(len, uio->uio_resid);
    100 	if (len <= 0)
    101 		error = 0;
    102 	else
    103 		error = uiomove(cp, len, uio);
    104 	return error;
    105 }
    106 
    107 int
    108 procfs_docpuinfo(struct proc *curp, struct proc *p, struct pfsnode *pfs,
    109 		 struct uio *uio)
    110 {
    111 	char buf[512], *cp;
    112 	int len, error;
    113 
    114 	len = sizeof buf;
    115 	if (procfs_getcpuinfstr(buf, &len) < 0)
    116 		return EIO;
    117 
    118 	if (len == 0)
    119 		return 0;
    120 
    121 	len -= uio->uio_offset;
    122 	cp = buf + uio->uio_offset;
    123 	len = imin(len, uio->uio_resid);
    124 	if (len <= 0)
    125 		error = 0;
    126 	else
    127 		error = uiomove(cp, len, uio);
    128 	return error;
    129 }
    130