docs/how-to-build.md: use proper markup for directory names
[unleashed/tickless.git] / include / sys / resource.h
blob13166f378d27cc1ea412239425eca9b267c6fd6c
1 /*
2 * CDDL HEADER START
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]
19 * CDDL HEADER END
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
34 * All Rights Reserved
36 * University Acknowledgment- Portions of this document are derived from
37 * software developed by the University of California, Berkeley, and its
38 * contributors.
41 #ifndef _SYS_RESOURCE_H
42 #define _SYS_RESOURCE_H
44 #include <sys/feature_tests.h>
46 #include <sys/types.h>
47 #include <sys/time.h>
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
54 * Process priority specifications
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
68 * Resource limits
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 */
81 #if defined(_LP64)
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)
89 #else /* _LP64 */
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 */
113 #endif /* _LP64 */
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
125 struct rlimit32 {
126 rlim32_t rlim_cur; /* current limit */
127 rlim32_t rlim_max; /* maximum value for rlim_cur */
130 #endif /* _SYSCALL32 */
132 struct rlimit {
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)
146 struct rlimit64 {
147 rlim64_t rlim_cur; /* current limit */
148 rlim64_t rlim_max; /* maximum value for rlim_cur */
151 #endif
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.
158 #if defined(_LP64)
160 #define RLIM_SAVED(x) (1) /* save all resource limits */
161 #define RLIM_NSAVED RLIM_NLIMITS /* size of u_saved_rlimits[] */
163 #else /* _LP64 */
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[] */
168 #endif /* _LP64 */
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 " */
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)
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 " */
216 #endif /* _SYSCALL32 */
219 #ifdef _KERNEL
221 #include <sys/model.h>
223 struct proc;
225 #else
227 #define RUSAGE_SELF 0
228 #define RUSAGE_LWP 1
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
239 #else
240 #define setrlimit setrlimit64
241 #define getrlimit getrlimit64
242 #define rlimit rlimit64
243 #endif
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
254 #else
255 #define setrlimit64 setrlimit
256 #define getrlimit64 getrlimit
257 #define rlimit64 rlimit
258 #endif
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 *);
275 #endif /* _KERNEL */
277 #ifdef __cplusplus
279 #endif
281 #endif /* _SYS_RESOURCE_H */