Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


sched.h
001: /* Definitions of constants and data structure for POSIX 1003.1b-1993
002:    scheduling interface.
003:    Copyright (C) 1996-1999,2001-2003,2005,2006,2007,2008,2009,2011
004:    Free Software Foundation, Inc.
005:    This file is part of the GNU C Library.
006: 
007:    The GNU C Library is free software; you can redistribute it and/or
008:    modify it under the terms of the GNU Lesser General Public
009:    License as published by the Free Software Foundation; either
010:    version 2.1 of the License, or (at your option) any later version.
011: 
012:    The GNU C Library is distributed in the hope that it will be useful,
013:    but WITHOUT ANY WARRANTY; without even the implied warranty of
014:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
015:    Lesser General Public License for more details.
016: 
017:    You should have received a copy of the GNU Lesser General Public
018:    License along with the GNU C Library; if not, write to the Free
019:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
020:    02111-1307 USA.  */
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: /* Scheduling algorithms.  */
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: /* Cloning flags.  */
042: # define CSIGNAL       0x000000ff /* Signal mask to be sent at exit.  */
043: # define CLONE_VM      0x00000100 /* Set if VM shared between processes.  */
044: # define CLONE_FS      0x00000200 /* Set if fs info shared between processes.  */
045: # define CLONE_FILES   0x00000400 /* Set if open files shared between processes.  */
046: # define CLONE_SIGHAND 0x00000800 /* Set if signal handlers shared.  */
047: # define CLONE_PTRACE  0x00002000 /* Set if tracing continues on the child.  */
048: # define CLONE_VFORK   0x00004000 /* Set if the parent wants the child to
049:                                      wake it up on mm_release.  */
050: # define CLONE_PARENT  0x00008000 /* Set if we want to have the same
051:                                      parent as the cloner.  */
052: # define CLONE_THREAD  0x00010000 /* Set to add to same thread group.  */
053: # define CLONE_NEWNS   0x00020000 /* Set to create new namespace.  */
054: # define CLONE_SYSVSEM 0x00040000 /* Set to shared SVID SEM_UNDO semantics.  */
055: # define CLONE_SETTLS  0x00080000 /* Set TLS info.  */
056: # define CLONE_PARENT_SETTID 0x00100000 /* Store TID in userlevel buffer
057:                                            before MM copy.  */
058: # define CLONE_CHILD_CLEARTID 0x00200000 /* Register exit futex and memory
059:                                             location to clear.  */
060: # define CLONE_DETACHED 0x00400000 /* Create clone detached.  */
061: # define CLONE_UNTRACED 0x00800000 /* Set if the tracing process can't
062:                                       force CLONE_PTRACE on this clone.  */
063: # define CLONE_CHILD_SETTID 0x01000000 /* Store TID in userlevel buffer in
064:                                           the child.  */
065: # define CLONE_NEWUTS   0x04000000      /* New utsname group.  */
066: # define CLONE_NEWIPC   0x08000000      /* New ipcs.  */
067: # define CLONE_NEWUSER  0x10000000      /* New user namespace.  */
068: # define CLONE_NEWPID   0x20000000      /* New pid namespace.  */
069: # define CLONE_NEWNET   0x40000000      /* New network namespace.  */
070: # define CLONE_IO       0x80000000      /* Clone I/O context.  */
071: #endif
072: 
073: /* The official definition.  */
074: struct sched_param
075:   {
076:     int __sched_priority;
077:   };
078: 
079: __BEGIN_DECLS
080: 
081: #ifdef __USE_GNU
082: /* Clone current process.  */
083: extern int clone (int (*__fn) (void *__arg), void *__child_stack,
084:                   int __flags, void *__arg, ...) __THROW;
085: 
086: /* Unshare the specified resources.  */
087: extern int unshare (int __flags) __THROW;
088: 
089: /* Get index of currently used CPU.  */
090: extern int sched_getcpu (void) __THROW;
091: 
092: /* Switch process to namespace of type NSTYPE indicated by FD.  */
093: extern int setns (int __fd, int __nstype) __THROW;
094: #endif
095: 
096: 
097: __END_DECLS
098: 
099: #endif  /* need schedparam */
100: 
101: #if !defined __defined_schedparam \
102:     && (defined __need_schedparam || defined _SCHED_H)
103: # define __defined_schedparam   1
104: /* Data structure to describe a process' schedulability.  */
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: /* Size definition for CPU sets.  */
116: # define __CPU_SETSIZE  1024
117: # define __NCPUBITS     (8 * sizeof (__cpu_mask))
118: 
119: /* Type for array elements in 'cpu_set_t'.  */
120: typedef unsigned long int __cpu_mask;
121: 
122: /* Basic access functions.  */
123: # define __CPUELT(cpu)  ((cpu) / __NCPUBITS)
124: # define __CPUMASK(cpu) ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
125: 
126: /* Data structure to describe CPU mask.  */
127: typedef struct
128: {
129:   __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS];
130: } cpu_set_t;
131: 
132: /* Access functions for CPU masks.  */
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: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/