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 (-3l) 86 #define RLIM_SAVED_MAX (-2l) 87 #define RLIM_SAVED_CUR (-1l) 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 */