Home | History | Annotate | Download | only in sys
      1 /*	$NetBSD: resource.h,v 1.29 2006/07/23 22:06:14 ad Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 1982, 1986, 1993
      5  *	The Regents of the University of California.  All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  * 3. Neither the name of the University nor the names of its contributors
     16  *    may be used to endorse or promote products derived from this software
     17  *    without specific prior written permission.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     29  * SUCH DAMAGE.
     30  *
     31  *	@(#)resource.h	8.4 (Berkeley) 1/9/95
     32  */
     33 
     34 #ifndef _SYS_RESOURCE_H_
     35 #define	_SYS_RESOURCE_H_
     36 
     37 #include <sys/featuretest.h>
     38 #include <sys/time.h>
     39 
     40 /*
     41  * Process priority specifications to get/setpriority.
     42  */
     43 #define	PRIO_MIN	-20
     44 #define	PRIO_MAX	20
     45 
     46 #define	PRIO_PROCESS	0
     47 #define	PRIO_PGRP	1
     48 #define	PRIO_USER	2
     49 
     50 /*
     51  * Resource utilization information.
     52  */
     53 
     54 #define	RUSAGE_SELF	0
     55 #define	RUSAGE_CHILDREN	-1
     56 
     57 struct	rusage {
     58 	struct timeval ru_utime;	/* user time used */
     59 	struct timeval ru_stime;	/* system time used */
     60 	long	ru_maxrss;		/* max resident set size */
     61 #ifdef _KERNEL
     62 #define	ru_first	ru_ixrss
     63 #endif
     64 	long	ru_ixrss;		/* integral shared memory size */
     65 	long	ru_idrss;		/* integral unshared data " */
     66 	long	ru_isrss;		/* integral unshared stack " */
     67 	long	ru_minflt;		/* page reclaims */
     68 	long	ru_majflt;		/* page faults */
     69 	long	ru_nswap;		/* swaps */
     70 	long	ru_inblock;		/* block input operations */
     71 	long	ru_oublock;		/* block output operations */
     72 	long	ru_msgsnd;		/* messages sent */
     73 	long	ru_msgrcv;		/* messages received */
     74 	long	ru_nsignals;		/* signals received */
     75 	long	ru_nvcsw;		/* voluntary context switches */
     76 	long	ru_nivcsw;		/* involuntary " */
     77 #ifdef _KERNEL
     78 #define	ru_last		ru_nivcsw
     79 #endif
     80 };
     81 
     82 /*
     83  * Resource limits
     84  */
     85 #define	RLIMIT_CPU	0		/* cpu time in milliseconds */
     86 #define	RLIMIT_FSIZE	1		/* maximum file size */
     87 #define	RLIMIT_DATA	2		/* data size */
     88 #define	RLIMIT_STACK	3		/* stack size */
     89 #define	RLIMIT_CORE	4		/* core file size */
     90 #define	RLIMIT_RSS	5		/* resident set size */
     91 #define	RLIMIT_MEMLOCK	6		/* locked-in-memory address space */
     92 #define	RLIMIT_NPROC	7		/* number of processes */
     93 #define	RLIMIT_NOFILE	8		/* number of open files */
     94 #define	RLIMIT_SBSIZE	9		/* maximum size of all socket buffers */
     95 
     96 #if defined(_NETBSD_SOURCE)
     97 #define	RLIM_NLIMITS	10		/* number of resource limits */
     98 #endif
     99 
    100 #define	RLIM_INFINITY	(~((u_quad_t)1 << 63))	/* no limit */
    101 #define	RLIM_SAVED_MAX	RLIM_INFINITY	/* unrepresentable hard limit */
    102 #define	RLIM_SAVED_CUR	RLIM_INFINITY	/* unrepresentable soft limit */
    103 
    104 #if defined(_KERNEL)
    105 /* 4.3BSD compatibility rlimit argument structure. */
    106 struct orlimit {
    107 	int32_t	rlim_cur;		/* current (soft) limit */
    108 	int32_t	rlim_max;		/* maximum value for rlim_cur */
    109 };
    110 #endif
    111 
    112 struct rlimit {
    113 	rlim_t	rlim_cur;		/* current (soft) limit */
    114 	rlim_t	rlim_max;		/* maximum value for rlim_cur */
    115 };
    116 
    117 #if defined(_NETBSD_SOURCE)
    118 /* Load average structure. */
    119 struct loadavg {
    120 	fixpt_t	ldavg[3];
    121 	long	fscale;
    122 };
    123 #endif
    124 
    125 #ifdef _KERNEL
    126 extern struct loadavg averunnable;
    127 struct pcred;
    128 int	dosetrlimit(struct lwp *, struct proc *, int, struct rlimit *);
    129 int	donice(struct lwp *, struct proc *, int);
    130 
    131 #else
    132 #include <sys/EfiCdefs.h>
    133 
    134 __BEGIN_DECLS
    135 int	getpriority(int, id_t);
    136 int	getrlimit(int, struct rlimit *);
    137 int	getrusage(int, struct rusage *);
    138 int	setpriority(int, id_t, int);
    139 int	setrlimit(int, const struct rlimit *);
    140 __END_DECLS
    141 
    142 #endif	/* _KERNEL */
    143 #endif	/* !_SYS_RESOURCE_H_ */
    144