xref: /f-stack/tools/compat/include/sys/resource.h (revision 1eaf0ac3)
1*1eaf0ac3Slogwang /*-
2*1eaf0ac3Slogwang  * Copyright (c) 1982, 1986, 1993
3*1eaf0ac3Slogwang  *	The Regents of the University of California.  All rights reserved.
4*1eaf0ac3Slogwang  *
5*1eaf0ac3Slogwang  * Redistribution and use in source and binary forms, with or without
6*1eaf0ac3Slogwang  * modification, are permitted provided that the following conditions
7*1eaf0ac3Slogwang  * are met:
8*1eaf0ac3Slogwang  * 1. Redistributions of source code must retain the above copyright
9*1eaf0ac3Slogwang  *    notice, this list of conditions and the following disclaimer.
10*1eaf0ac3Slogwang  * 2. Redistributions in binary form must reproduce the above copyright
11*1eaf0ac3Slogwang  *    notice, this list of conditions and the following disclaimer in the
12*1eaf0ac3Slogwang  *    documentation and/or other materials provided with the distribution.
13*1eaf0ac3Slogwang  * 4. Neither the name of the University nor the names of its contributors
14*1eaf0ac3Slogwang  *    may be used to endorse or promote products derived from this software
15*1eaf0ac3Slogwang  *    without specific prior written permission.
16*1eaf0ac3Slogwang  *
17*1eaf0ac3Slogwang  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18*1eaf0ac3Slogwang  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*1eaf0ac3Slogwang  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*1eaf0ac3Slogwang  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21*1eaf0ac3Slogwang  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*1eaf0ac3Slogwang  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23*1eaf0ac3Slogwang  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24*1eaf0ac3Slogwang  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25*1eaf0ac3Slogwang  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26*1eaf0ac3Slogwang  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27*1eaf0ac3Slogwang  * SUCH DAMAGE.
28*1eaf0ac3Slogwang  *
29*1eaf0ac3Slogwang  *	@(#)resource.h	8.4 (Berkeley) 1/9/95
30*1eaf0ac3Slogwang  * $FreeBSD$
31*1eaf0ac3Slogwang  */
32*1eaf0ac3Slogwang 
33*1eaf0ac3Slogwang #ifndef _SYS_RESOURCE_H_
34*1eaf0ac3Slogwang #define	_SYS_RESOURCE_H_
35*1eaf0ac3Slogwang 
36*1eaf0ac3Slogwang #include <sys/cdefs.h>
37*1eaf0ac3Slogwang #include <sys/_types.h>
38*1eaf0ac3Slogwang 
39*1eaf0ac3Slogwang #ifndef _ID_T_DECLARED
40*1eaf0ac3Slogwang typedef	__id_t		id_t;
41*1eaf0ac3Slogwang #define	_ID_T_DECLARED
42*1eaf0ac3Slogwang #endif
43*1eaf0ac3Slogwang 
44*1eaf0ac3Slogwang #ifndef _RLIM_T_DECLARED
45*1eaf0ac3Slogwang typedef	__rlim_t	rlim_t;
46*1eaf0ac3Slogwang #define	_RLIM_T_DECLARED
47*1eaf0ac3Slogwang #endif
48*1eaf0ac3Slogwang 
49*1eaf0ac3Slogwang /*
50*1eaf0ac3Slogwang  * Process priority specifications to get/setpriority.
51*1eaf0ac3Slogwang  */
52*1eaf0ac3Slogwang #define	PRIO_MIN	-20
53*1eaf0ac3Slogwang #define	PRIO_MAX	20
54*1eaf0ac3Slogwang 
55*1eaf0ac3Slogwang #define	PRIO_PROCESS	0
56*1eaf0ac3Slogwang #define	PRIO_PGRP	1
57*1eaf0ac3Slogwang #define	PRIO_USER	2
58*1eaf0ac3Slogwang 
59*1eaf0ac3Slogwang /*
60*1eaf0ac3Slogwang  * Resource utilization information.
61*1eaf0ac3Slogwang  *
62*1eaf0ac3Slogwang  * All fields are only modified by curthread and
63*1eaf0ac3Slogwang  * no locks are required to read.
64*1eaf0ac3Slogwang  */
65*1eaf0ac3Slogwang 
66*1eaf0ac3Slogwang #define	RUSAGE_SELF	0
67*1eaf0ac3Slogwang #define	RUSAGE_CHILDREN	-1
68*1eaf0ac3Slogwang #define	RUSAGE_THREAD	1
69*1eaf0ac3Slogwang 
70*1eaf0ac3Slogwang struct rusage {
71*1eaf0ac3Slogwang 	struct timeval ru_utime;	/* user time used */
72*1eaf0ac3Slogwang 	struct timeval ru_stime;	/* system time used */
73*1eaf0ac3Slogwang 	long	ru_maxrss;		/* max resident set size */
74*1eaf0ac3Slogwang #define	ru_first	ru_ixrss
75*1eaf0ac3Slogwang 	long	ru_ixrss;		/* integral shared memory size */
76*1eaf0ac3Slogwang 	long	ru_idrss;		/* integral unshared data " */
77*1eaf0ac3Slogwang 	long	ru_isrss;		/* integral unshared stack " */
78*1eaf0ac3Slogwang 	long	ru_minflt;		/* page reclaims */
79*1eaf0ac3Slogwang 	long	ru_majflt;		/* page faults */
80*1eaf0ac3Slogwang 	long	ru_nswap;		/* swaps */
81*1eaf0ac3Slogwang 	long	ru_inblock;		/* block input operations */
82*1eaf0ac3Slogwang 	long	ru_oublock;		/* block output operations */
83*1eaf0ac3Slogwang 	long	ru_msgsnd;		/* messages sent */
84*1eaf0ac3Slogwang 	long	ru_msgrcv;		/* messages received */
85*1eaf0ac3Slogwang 	long	ru_nsignals;		/* signals received */
86*1eaf0ac3Slogwang 	long	ru_nvcsw;		/* voluntary context switches */
87*1eaf0ac3Slogwang 	long	ru_nivcsw;		/* involuntary " */
88*1eaf0ac3Slogwang #define	ru_last		ru_nivcsw
89*1eaf0ac3Slogwang };
90*1eaf0ac3Slogwang 
91*1eaf0ac3Slogwang #if __BSD_VISIBLE
92*1eaf0ac3Slogwang struct __wrusage {
93*1eaf0ac3Slogwang 	struct rusage	wru_self;
94*1eaf0ac3Slogwang 	struct rusage	wru_children;
95*1eaf0ac3Slogwang };
96*1eaf0ac3Slogwang #endif
97*1eaf0ac3Slogwang 
98*1eaf0ac3Slogwang /*
99*1eaf0ac3Slogwang  * Resource limits
100*1eaf0ac3Slogwang  */
101*1eaf0ac3Slogwang #define	RLIMIT_CPU	0		/* maximum cpu time in seconds */
102*1eaf0ac3Slogwang #define	RLIMIT_FSIZE	1		/* maximum file size */
103*1eaf0ac3Slogwang #define	RLIMIT_DATA	2		/* data size */
104*1eaf0ac3Slogwang #define	RLIMIT_STACK	3		/* stack size */
105*1eaf0ac3Slogwang #define	RLIMIT_CORE	4		/* core file size */
106*1eaf0ac3Slogwang #define	RLIMIT_RSS	5		/* resident set size */
107*1eaf0ac3Slogwang #define	RLIMIT_MEMLOCK	6		/* locked-in-memory address space */
108*1eaf0ac3Slogwang #define	RLIMIT_NPROC	7		/* number of processes */
109*1eaf0ac3Slogwang #define	RLIMIT_NOFILE	8		/* number of open files */
110*1eaf0ac3Slogwang #define	RLIMIT_SBSIZE	9		/* maximum size of all socket buffers */
111*1eaf0ac3Slogwang #define	RLIMIT_VMEM	10		/* virtual process size (incl. mmap) */
112*1eaf0ac3Slogwang #define	RLIMIT_AS	RLIMIT_VMEM	/* standard name for RLIMIT_VMEM */
113*1eaf0ac3Slogwang #define	RLIMIT_NPTS	11		/* pseudo-terminals */
114*1eaf0ac3Slogwang #define	RLIMIT_SWAP	12		/* swap used */
115*1eaf0ac3Slogwang #define	RLIMIT_KQUEUES	13		/* kqueues allocated */
116*1eaf0ac3Slogwang #define	RLIMIT_UMTXP	14		/* process-shared umtx */
117*1eaf0ac3Slogwang 
118*1eaf0ac3Slogwang #define	RLIM_NLIMITS	15		/* number of resource limits */
119*1eaf0ac3Slogwang 
120*1eaf0ac3Slogwang #define	RLIM_INFINITY	((rlim_t)(((__uint64_t)1 << 63) - 1))
121*1eaf0ac3Slogwang /* XXX Missing: RLIM_SAVED_MAX, RLIM_SAVED_CUR */
122*1eaf0ac3Slogwang 
123*1eaf0ac3Slogwang 
124*1eaf0ac3Slogwang /*
125*1eaf0ac3Slogwang  * Resource limit string identifiers
126*1eaf0ac3Slogwang  */
127*1eaf0ac3Slogwang 
128*1eaf0ac3Slogwang #ifdef _RLIMIT_IDENT
129*1eaf0ac3Slogwang static const char *rlimit_ident[RLIM_NLIMITS] = {
130*1eaf0ac3Slogwang 	"cpu",
131*1eaf0ac3Slogwang 	"fsize",
132*1eaf0ac3Slogwang 	"data",
133*1eaf0ac3Slogwang 	"stack",
134*1eaf0ac3Slogwang 	"core",
135*1eaf0ac3Slogwang 	"rss",
136*1eaf0ac3Slogwang 	"memlock",
137*1eaf0ac3Slogwang 	"nproc",
138*1eaf0ac3Slogwang 	"nofile",
139*1eaf0ac3Slogwang 	"sbsize",
140*1eaf0ac3Slogwang 	"vmem",
141*1eaf0ac3Slogwang 	"npts",
142*1eaf0ac3Slogwang 	"swap",
143*1eaf0ac3Slogwang 	"kqueues",
144*1eaf0ac3Slogwang 	"umtx",
145*1eaf0ac3Slogwang };
146*1eaf0ac3Slogwang #endif
147*1eaf0ac3Slogwang 
148*1eaf0ac3Slogwang struct rlimit {
149*1eaf0ac3Slogwang 	rlim_t	rlim_cur;		/* current (soft) limit */
150*1eaf0ac3Slogwang 	rlim_t	rlim_max;		/* maximum value for rlim_cur */
151*1eaf0ac3Slogwang };
152*1eaf0ac3Slogwang 
153*1eaf0ac3Slogwang #if __BSD_VISIBLE
154*1eaf0ac3Slogwang 
155*1eaf0ac3Slogwang struct orlimit {
156*1eaf0ac3Slogwang 	__int32_t	rlim_cur;	/* current (soft) limit */
157*1eaf0ac3Slogwang 	__int32_t	rlim_max;	/* maximum value for rlim_cur */
158*1eaf0ac3Slogwang };
159*1eaf0ac3Slogwang 
160*1eaf0ac3Slogwang struct loadavg {
161*1eaf0ac3Slogwang 	__fixpt_t	ldavg[3];
162*1eaf0ac3Slogwang 	long		fscale;
163*1eaf0ac3Slogwang };
164*1eaf0ac3Slogwang 
165*1eaf0ac3Slogwang #define	CP_USER		0
166*1eaf0ac3Slogwang #define	CP_NICE		1
167*1eaf0ac3Slogwang #define	CP_SYS		2
168*1eaf0ac3Slogwang #define	CP_INTR		3
169*1eaf0ac3Slogwang #define	CP_IDLE		4
170*1eaf0ac3Slogwang #define	CPUSTATES	5
171*1eaf0ac3Slogwang 
172*1eaf0ac3Slogwang #endif	/* __BSD_VISIBLE */
173*1eaf0ac3Slogwang 
174*1eaf0ac3Slogwang #ifdef _KERNEL
175*1eaf0ac3Slogwang 
176*1eaf0ac3Slogwang extern struct loadavg averunnable;
177*1eaf0ac3Slogwang void	read_cpu_time(long *cp_time);	/* Writes array of CPUSTATES */
178*1eaf0ac3Slogwang 
179*1eaf0ac3Slogwang #else
180*1eaf0ac3Slogwang 
181*1eaf0ac3Slogwang __BEGIN_DECLS
182*1eaf0ac3Slogwang /* XXX 2nd arg to [gs]etpriority() should be an id_t */
183*1eaf0ac3Slogwang int	getpriority(int, int);
184*1eaf0ac3Slogwang int	getrlimit(int, struct rlimit *);
185*1eaf0ac3Slogwang int	getrusage(int, struct rusage *);
186*1eaf0ac3Slogwang int	setpriority(int, int, int);
187*1eaf0ac3Slogwang int	setrlimit(int, const struct rlimit *);
188*1eaf0ac3Slogwang __END_DECLS
189*1eaf0ac3Slogwang 
190*1eaf0ac3Slogwang #endif	/* _KERNEL */
191*1eaf0ac3Slogwang #endif	/* !_SYS_RESOURCE_H_ */
192