root/miscfs/procfs/procfs_linux.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. procfs_domeminfo
  2. procfs_docpuinfo
  3. procfs_getcpuinfstr

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

/* [<][>][^][v][top][bottom][index][help] */