sched.h
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022: #ifndef __need_schedparam
023:
024: #ifndef _SCHED_H
025: # error "Never include <bits/sched.h> directly; use <sched.h> instead."
026: #endif
027:
028:
029:
030: #define SCHED_OTHER 0
031: #define SCHED_FIFO 1
032: #define SCHED_RR 2
033: #ifdef __USE_GNU
034: # define SCHED_BATCH 3
035: # define SCHED_IDLE 5
036:
037: # define SCHED_RESET_ON_FORK 0x40000000
038: #endif
039:
040: #ifdef __USE_GNU
041:
042: # define CSIGNAL 0x000000ff
043: # define CLONE_VM 0x00000100
044: # define CLONE_FS 0x00000200
045: # define CLONE_FILES 0x00000400
046: # define CLONE_SIGHAND 0x00000800
047: # define CLONE_PTRACE 0x00002000
048: # define CLONE_VFORK 0x00004000
049:
050: # define CLONE_PARENT 0x00008000
051:
052: # define CLONE_THREAD 0x00010000
053: # define CLONE_NEWNS 0x00020000
054: # define CLONE_SYSVSEM 0x00040000
055: # define CLONE_SETTLS 0x00080000
056: # define CLONE_PARENT_SETTID 0x00100000
057:
058: # define CLONE_CHILD_CLEARTID 0x00200000
059:
060: # define CLONE_DETACHED 0x00400000
061: # define CLONE_UNTRACED 0x00800000
062:
063: # define CLONE_CHILD_SETTID 0x01000000
064:
065: # define CLONE_NEWUTS 0x04000000
066: # define CLONE_NEWIPC 0x08000000
067: # define CLONE_NEWUSER 0x10000000
068: # define CLONE_NEWPID 0x20000000
069: # define CLONE_NEWNET 0x40000000
070: # define CLONE_IO 0x80000000
071: #endif
072:
073:
074: struct sched_param
075: {
076: int __sched_priority;
077: };
078:
079: __BEGIN_DECLS
080:
081: #ifdef __USE_GNU
082:
083: extern int clone (int (*__fn) (void *__arg), void *__child_stack,
084: int __flags, void *__arg, ...) __THROW;
085:
086:
087: extern int unshare (int __flags) __THROW;
088:
089:
090: extern int sched_getcpu (void) __THROW;
091:
092:
093: extern int setns (int __fd, int __nstype) __THROW;
094: #endif
095:
096:
097: __END_DECLS
098:
099: #endif
100:
101: #if !defined __defined_schedparam \
102: && (defined __need_schedparam || defined _SCHED_H)
103: # define __defined_schedparam 1
104:
105: struct __sched_param
106: {
107: int __sched_priority;
108: };
109: # undef __need_schedparam
110: #endif
111:
112:
113: #if defined _SCHED_H && !defined __cpu_set_t_defined
114: # define __cpu_set_t_defined
115:
116: # define __CPU_SETSIZE 1024
117: # define __NCPUBITS (8 * sizeof (__cpu_mask))
118:
119:
120: typedef unsigned long int __cpu_mask;
121:
122:
123: # define __CPUELT(cpu) ((cpu) / __NCPUBITS)
124: # define __CPUMASK(cpu) ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
125:
126:
127: typedef struct
128: {
129: __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS];
130: } cpu_set_t;
131:
132:
133: # if __GNUC_PREREQ (2, 91)
134: # define __CPU_ZERO_S(setsize, cpusetp) \
135: do __builtin_memset (cpusetp, '\0', setsize); while (0)
136: # else
137: # define __CPU_ZERO_S(setsize, cpusetp) \
138: do { \
139: size_t __i; \
140: size_t __imax = (setsize) / sizeof (__cpu_mask); \
141: __cpu_mask *__bits = (cpusetp)->__bits; \
142: for (__i = 0; __i < __imax; ++__i) \
143: __bits[__i] = 0; \
144: } while (0)
145: # endif
146: # define __CPU_SET_S(cpu, setsize, cpusetp) \
147: (__extension__ \
148: ({ size_t __cpu = (cpu); \
149: __cpu < 8 * (setsize) \
150: ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \
151: |= __CPUMASK (__cpu)) \
152: : 0; }))
153: # define __CPU_CLR_S(cpu, setsize, cpusetp) \
154: (__extension__ \
155: ({ size_t __cpu = (cpu); \
156: __cpu < 8 * (setsize) \
157: ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \
158: &= ~__CPUMASK (__cpu)) \
159: : 0; }))
160: # define __CPU_ISSET_S(cpu, setsize, cpusetp) \
161: (__extension__ \
162: ({ size_t __cpu = (cpu); \
163: __cpu < 8 * (setsize) \
164: ? ((((__const __cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \
165: & __CPUMASK (__cpu))) != 0 \
166: : 0; }))
167:
168: # define __CPU_COUNT_S(setsize, cpusetp) \
169: __sched_cpucount (setsize, cpusetp)
170:
171: # if __GNUC_PREREQ (2, 91)
172: # define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
173: (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0)
174: # else
175: # define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
176: (__extension__ \
177: ({ __const __cpu_mask *__arr1 = (cpusetp1)->__bits; \
178: __const __cpu_mask *__arr2 = (cpusetp2)->__bits; \
179: size_t __imax = (setsize) / sizeof (__cpu_mask); \
180: size_t __i; \
181: for (__i = 0; __i < __imax; ++__i) \
182: if (__arr1[__i] != __arr2[__i]) \
183: break; \
184: __i == __imax; }))
185: # endif
186:
187: # define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \
188: (__extension__ \
189: ({ cpu_set_t *__dest = (destset); \
190: __const __cpu_mask *__arr1 = (srcset1)->__bits; \
191: __const __cpu_mask *__arr2 = (srcset2)->__bits; \
192: size_t __imax = (setsize) / sizeof (__cpu_mask); \
193: size_t __i; \
194: for (__i = 0; __i < __imax; ++__i) \
195: ((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i]; \
196: __dest; }))
197:
198: # define __CPU_ALLOC_SIZE(count) \
199: ((((count) + __NCPUBITS - 1) / __NCPUBITS) * sizeof (__cpu_mask))
200: # define __CPU_ALLOC(count) __sched_cpualloc (count)
201: # define __CPU_FREE(cpuset) __sched_cpufree (cpuset)
202:
203: __BEGIN_DECLS
204:
205: extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
206: __THROW;
207: extern cpu_set_t *__sched_cpualloc (size_t __count) __THROW __wur;
208: extern void __sched_cpufree (cpu_set_t *__set) __THROW;
209:
210: __END_DECLS
211:
212: #endif
213:
© Andrew Scott 2006 -
2025,
All Rights Reserved