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.
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.
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]
22 * Copyright 2014 Garrrett D'Amore <garrett@damore.org>
24 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
25 * Use is subject to license terms.
28 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
29 /* All Rights Reserved */
32 * University Copyright- Copyright (c) 1982, 1986, 1988
33 * The Regents of the University of California
36 * University Acknowledgment- Portions of this document are derived from
37 * software developed by the University of California, Berkeley, and its
41 #ifndef _SYS_RESOURCE_H
42 #define _SYS_RESOURCE_H
44 #include <sys/feature_tests.h>
46 #include <sys/types.h>
54 * Process priority specifications
56 #define PRIO_PROCESS 0
60 #define PRIO_SESSION 4
63 #define PRIO_PROJECT 7
65 #define PRIO_CONTRACT 9
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
79 #define RLIM_NLIMITS 7 /* number of resource limits */
83 typedef unsigned long rlim_t
;
85 #define RLIM_INFINITY ((rlim_t)-3)
86 #define RLIM_SAVED_MAX ((rlim_t)-2)
87 #define RLIM_SAVED_CUR ((rlim_t)-1)
92 * The definitions of the following types and constants differ between the
93 * regular and large file compilation environments.
95 #if _FILE_OFFSET_BITS == 32
97 typedef unsigned long rlim_t
;
99 #define RLIM_INFINITY 0x7fffffff
100 #define RLIM_SAVED_MAX 0x7ffffffe
101 #define RLIM_SAVED_CUR 0x7ffffffd
103 #else /* _FILE_OFFSET_BITS == 32 */
105 typedef u_longlong_t rlim_t
;
107 #define RLIM_INFINITY ((rlim_t)-3)
108 #define RLIM_SAVED_MAX ((rlim_t)-2)
109 #define RLIM_SAVED_CUR ((rlim_t)-1)
111 #endif /* _FILE_OFFSET_BITS == 32 */
115 #if defined(_SYSCALL32)
117 /* Kernel's view of user ILP32 rlimits */
119 typedef uint32_t rlim32_t
;
121 #define RLIM32_INFINITY 0x7fffffff
122 #define RLIM32_SAVED_MAX 0x7ffffffe
123 #define RLIM32_SAVED_CUR 0x7ffffffd
126 rlim32_t rlim_cur
; /* current limit */
127 rlim32_t rlim_max
; /* maximum value for rlim_cur */
130 #endif /* _SYSCALL32 */
133 rlim_t rlim_cur
; /* current limit */
134 rlim_t rlim_max
; /* maximum value for rlim_cur */
137 /* transitional large file interface versions */
138 #ifdef _LARGEFILE64_SOURCE
140 typedef u_longlong_t rlim64_t
;
142 #define RLIM64_INFINITY ((rlim64_t)-3)
143 #define RLIM64_SAVED_MAX ((rlim64_t)-2)
144 #define RLIM64_SAVED_CUR ((rlim64_t)-1)
147 rlim64_t rlim_cur
; /* current limit */
148 rlim64_t rlim_max
; /* maximum value for rlim_cur */
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.
160 #define RLIM_SAVED(x) (1) /* save all resource limits */
161 #define RLIM_NSAVED RLIM_NLIMITS /* size of u_saved_rlimits[] */
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[] */
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 " */
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 */
195 #if defined(_SYSCALL32)
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 " */
216 #endif /* _SYSCALL32 */
221 #include <sys/model.h>
227 #define RUSAGE_SELF 0
229 #define RUSAGE_CHILDREN -1
232 #if !defined(_LP64) && _FILE_OFFSET_BITS == 64
234 * large file compilation environment setup
236 #ifdef __PRAGMA_REDEFINE_EXTNAME
237 #pragma redefine_extname setrlimit setrlimit64
238 #pragma redefine_extname getrlimit getrlimit64
240 #define setrlimit setrlimit64
241 #define getrlimit getrlimit64
242 #define rlimit rlimit64
244 #endif /* !_LP64 && _FILE_OFFSET_BITS == 64 */
246 #if defined(_LP64) && defined(_LARGEFILE64_SOURCE)
248 * In the LP64 compilation environment, map large file interfaces
249 * back to native versions where possible.
251 #ifdef __PRAGMA_REDEFINE_EXTNAME
252 #pragma redefine_extname setrlimit64 setrlimit
253 #pragma redefine_extname getrlimit64 getrlimit
255 #define setrlimit64 setrlimit
256 #define getrlimit64 getrlimit
257 #define rlimit64 rlimit
259 #endif /* _LP64 && _LARGEFILE64_SOURCE */
261 extern int setrlimit(int, const struct rlimit
*);
262 extern int getrlimit(int, struct rlimit
*);
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... */
271 extern int getpriority(int, id_t
);
272 extern int setpriority(int, id_t
, int);
273 extern int getrusage(int, struct rusage
*);
281 #endif /* _SYS_RESOURCE_H */