xref: /titanic_50/usr/src/uts/common/sys/resource.h (revision d007da4be6a31f5f7c6e3e822eef044a9ac6ae18)
1  /*
2   * CDDL HEADER START
3   *
4   * The contents of this file are subject to the terms of the
5   * Common Development and Distribution License (the "License").
6   * You may not use this file except in compliance with the License.
7   *
8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9   * or http://www.opensolaris.org/os/licensing.
10   * See the License for the specific language governing permissions
11   * and limitations under the License.
12   *
13   * When distributing Covered Code, include this CDDL HEADER in each
14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15   * If applicable, add the following below this CDDL HEADER, with the
16   * fields enclosed by brackets "[]" replaced with your own identifying
17   * information: Portions Copyright [yyyy] [name of copyright owner]
18   *
19   * CDDL HEADER END
20   */
21  /*
22   * Copyright 2014 Garrrett D'Amore <garrett@damore.org>
23   *
24   * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
25   * Use is subject to license terms.
26   */
27  
28  /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
29  /*	  All Rights Reserved  	*/
30  
31  /*
32   * University Copyright- Copyright (c) 1982, 1986, 1988
33   * The Regents of the University of California
34   * All Rights Reserved
35   *
36   * University Acknowledgment- Portions of this document are derived from
37   * software developed by the University of California, Berkeley, and its
38   * contributors.
39   */
40  
41  #ifndef _SYS_RESOURCE_H
42  #define	_SYS_RESOURCE_H
43  
44  #include <sys/feature_tests.h>
45  
46  #include <sys/types.h>
47  #include <sys/time.h>
48  
49  #ifdef	__cplusplus
50  extern "C" {
51  #endif
52  
53  /*
54   * Process priority specifications
55   */
56  #define	PRIO_PROCESS	0
57  #define	PRIO_PGRP	1
58  #define	PRIO_USER	2
59  #define	PRIO_GROUP	3
60  #define	PRIO_SESSION	4
61  #define	PRIO_LWP	5
62  #define	PRIO_TASK	6
63  #define	PRIO_PROJECT	7
64  #define	PRIO_ZONE	8
65  #define	PRIO_CONTRACT	9
66  
67  /*
68   * Resource limits
69   */
70  #define	RLIMIT_CPU	0		/* cpu time in seconds */
71  #define	RLIMIT_FSIZE	1		/* maximum file size */
72  #define	RLIMIT_DATA	2		/* data size */
73  #define	RLIMIT_STACK	3		/* stack size */
74  #define	RLIMIT_CORE	4		/* core file size */
75  #define	RLIMIT_NOFILE	5		/* file descriptors */
76  #define	RLIMIT_VMEM	6		/* maximum mapped memory */
77  #define	RLIMIT_AS	RLIMIT_VMEM
78  
79  #define	RLIM_NLIMITS	7		/* number of resource limits */
80  
81  #if defined(_LP64)
82  
83  typedef	unsigned long	rlim_t;
84  
85  #define	RLIM_INFINITY	((rlim_t)-3)
86  #define	RLIM_SAVED_MAX	((rlim_t)-2)
87  #define	RLIM_SAVED_CUR	((rlim_t)-1)
88  
89  #else	/* _LP64 */
90  
91  /*
92   * The definitions of the following types and constants differ between the
93   * regular and large file compilation environments.
94   */
95  #if _FILE_OFFSET_BITS == 32
96  
97  typedef unsigned long	rlim_t;
98  
99  #define	RLIM_INFINITY	0x7fffffff
100  #define	RLIM_SAVED_MAX	0x7ffffffe
101  #define	RLIM_SAVED_CUR	0x7ffffffd
102  
103  #else	/* _FILE_OFFSET_BITS == 32 */
104  
105  typedef u_longlong_t	rlim_t;
106  
107  #define	RLIM_INFINITY	((rlim_t)-3)
108  #define	RLIM_SAVED_MAX	((rlim_t)-2)
109  #define	RLIM_SAVED_CUR	((rlim_t)-1)
110  
111  #endif	/* _FILE_OFFSET_BITS == 32 */
112  
113  #endif	/* _LP64 */
114  
115  #if defined(_SYSCALL32)
116  
117  /* Kernel's view of user ILP32 rlimits */
118  
119  typedef	uint32_t	rlim32_t;
120  
121  #define	RLIM32_INFINITY		0x7fffffff
122  #define	RLIM32_SAVED_MAX	0x7ffffffe
123  #define	RLIM32_SAVED_CUR	0x7ffffffd
124  
125  struct rlimit32 {
126  	rlim32_t	rlim_cur;	/* current limit */
127  	rlim32_t	rlim_max;	/* maximum value for rlim_cur */
128  };
129  
130  #endif /* _SYSCALL32 */
131  
132  struct rlimit {
133  	rlim_t	rlim_cur;		/* current limit */
134  	rlim_t	rlim_max;		/* maximum value for rlim_cur */
135  };
136  
137  /* transitional large file interface versions */
138  #ifdef	_LARGEFILE64_SOURCE
139  
140  typedef u_longlong_t	rlim64_t;
141  
142  #define	RLIM64_INFINITY		((rlim64_t)-3)
143  #define	RLIM64_SAVED_MAX	((rlim64_t)-2)
144  #define	RLIM64_SAVED_CUR	((rlim64_t)-1)
145  
146  struct rlimit64 {
147  	rlim64_t	rlim_cur;	/* current limit */
148  	rlim64_t	rlim_max;	/* maximum value for rlim_cur */
149  };
150  
151  #endif
152  
153  /*
154   * Although the saved rlimits were initially introduced by the large file API,
155   * they are now available for all resource limits on the 64-bit kernel and for
156   * cpu time and file size limits on the 32-bit kernel.
157   */
158  #if defined(_LP64)
159  
160  #define	RLIM_SAVED(x)	(1)			/* save all resource limits */
161  #define	RLIM_NSAVED	RLIM_NLIMITS		/* size of u_saved_rlimits[] */
162  
163  #else	/* _LP64 */
164  
165  #define	RLIM_SAVED(x)	(x <= RLIMIT_FSIZE)	/* cpu time and file size */
166  #define	RLIM_NSAVED	(RLIMIT_FSIZE + 1)	/* size of u_saved_rlimits[] */
167  
168  #endif	/* _LP64 */
169  
170  
171  struct	rusage {
172  	struct timeval ru_utime;	/* user time used */
173  	struct timeval ru_stime;	/* system time used */
174  	long	ru_maxrss;		/* <unimp> */
175  	long	ru_ixrss;		/* <unimp> */
176  	long	ru_idrss;		/* <unimp> */
177  	long	ru_isrss;		/* <unimp> */
178  	long	ru_minflt;		/* any page faults not requiring I/O */
179  	long	ru_majflt;		/* any page faults requiring I/O */
180  	long	ru_nswap;		/* swaps */
181  	long	ru_inblock;		/* block input operations */
182  	long	ru_oublock;		/* block output operations */
183  	long	ru_msgsnd;		/* streams messsages sent */
184  	long	ru_msgrcv;		/* streams messages received */
185  	long	ru_nsignals;		/* signals received */
186  	long	ru_nvcsw;		/* voluntary context switches */
187  	long	ru_nivcsw;		/* involuntary " */
188  };
189  
190  #define	_RUSAGESYS_GETRUSAGE		0	/* rusage process */
191  #define	_RUSAGESYS_GETRUSAGE_CHLD	1	/* rusage child process */
192  #define	_RUSAGESYS_GETRUSAGE_LWP	2	/* rusage lwp */
193  #define	_RUSAGESYS_GETVMUSAGE		3	/* getvmusage */
194  
195  #if defined(_SYSCALL32)
196  
197  struct	rusage32 {
198  	struct timeval32 ru_utime;	/* user time used */
199  	struct timeval32 ru_stime;	/* system time used */
200  	int	ru_maxrss;		/* <unimp> */
201  	int	ru_ixrss;		/* <unimp> */
202  	int	ru_idrss;		/* <unimp> */
203  	int	ru_isrss;		/* <unimp> */
204  	int	ru_minflt;		/* any page faults not requiring I/O */
205  	int	ru_majflt;		/* any page faults requiring I/O */
206  	int	ru_nswap;		/* swaps */
207  	int	ru_inblock;		/* block input operations */
208  	int	ru_oublock;		/* block output operations */
209  	int	ru_msgsnd;		/* streams messages sent */
210  	int	ru_msgrcv;		/* streams messages received */
211  	int	ru_nsignals;		/* signals received */
212  	int	ru_nvcsw;		/* voluntary context switches */
213  	int	ru_nivcsw;		/* involuntary " */
214  };
215  
216  #endif	/* _SYSCALL32 */
217  
218  
219  #ifdef _KERNEL
220  
221  #include <sys/model.h>
222  
223  struct proc;
224  
225  #else
226  
227  #define	RUSAGE_SELF	0
228  #define	RUSAGE_LWP	1
229  #define	RUSAGE_CHILDREN	-1
230  
231  
232  #if !defined(_LP64) && _FILE_OFFSET_BITS == 64
233  /*
234   * large file compilation environment setup
235   */
236  #ifdef __PRAGMA_REDEFINE_EXTNAME
237  #pragma redefine_extname	setrlimit	setrlimit64
238  #pragma redefine_extname	getrlimit	getrlimit64
239  #else
240  #define	setrlimit		setrlimit64
241  #define	getrlimit		getrlimit64
242  #define	rlimit			rlimit64
243  #endif
244  #endif	/* !_LP64 && _FILE_OFFSET_BITS == 64 */
245  
246  #if defined(_LP64) && defined(_LARGEFILE64_SOURCE)
247  /*
248   * In the LP64 compilation environment, map large file interfaces
249   * back to native versions where possible.
250   */
251  #ifdef __PRAGMA_REDEFINE_EXTNAME
252  #pragma	redefine_extname	setrlimit64	setrlimit
253  #pragma	redefine_extname	getrlimit64	getrlimit
254  #else
255  #define	setrlimit64		setrlimit
256  #define	getrlimit64		getrlimit
257  #define	rlimit64		rlimit
258  #endif
259  #endif	/* _LP64 && _LARGEFILE64_SOURCE */
260  
261  extern int setrlimit(int, const struct rlimit *);
262  extern int getrlimit(int, struct rlimit *);
263  
264  /* transitional large file interfaces */
265  #if	defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
266  	    !defined(__PRAGMA_REDEFINE_EXTNAME))
267  extern int setrlimit64(int, const struct rlimit64 *);
268  extern int getrlimit64(int, struct rlimit64 *);
269  #endif	/* _LARGEFILE64_SOURCE... */
270  
271  extern int getpriority(int, id_t);
272  extern int setpriority(int, id_t, int);
273  extern int getrusage(int, struct rusage *);
274  
275  #endif	/* _KERNEL */
276  
277  #ifdef	__cplusplus
278  }
279  #endif
280  
281  #endif	/* _SYS_RESOURCE_H */
282