Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 #ifndef _UAPI_LINUX_SCHED_H
0003 #define _UAPI_LINUX_SCHED_H
0004 
0005 #include <linux/types.h>
0006 
0007 /*
0008  * cloning flags:
0009  */
0010 #define CSIGNAL     0x000000ff  /* signal mask to be sent at exit */
0011 #define CLONE_VM    0x00000100  /* set if VM shared between processes */
0012 #define CLONE_FS    0x00000200  /* set if fs info shared between processes */
0013 #define CLONE_FILES 0x00000400  /* set if open files shared between processes */
0014 #define CLONE_SIGHAND   0x00000800  /* set if signal handlers and blocked signals shared */
0015 #define CLONE_PIDFD 0x00001000  /* set if a pidfd should be placed in parent */
0016 #define CLONE_PTRACE    0x00002000  /* set if we want to let tracing continue on the child too */
0017 #define CLONE_VFORK 0x00004000  /* set if the parent wants the child to wake it up on mm_release */
0018 #define CLONE_PARENT    0x00008000  /* set if we want to have the same parent as the cloner */
0019 #define CLONE_THREAD    0x00010000  /* Same thread group? */
0020 #define CLONE_NEWNS 0x00020000  /* New mount namespace group */
0021 #define CLONE_SYSVSEM   0x00040000  /* share system V SEM_UNDO semantics */
0022 #define CLONE_SETTLS    0x00080000  /* create a new TLS for the child */
0023 #define CLONE_PARENT_SETTID 0x00100000  /* set the TID in the parent */
0024 #define CLONE_CHILD_CLEARTID    0x00200000  /* clear the TID in the child */
0025 #define CLONE_DETACHED      0x00400000  /* Unused, ignored */
0026 #define CLONE_UNTRACED      0x00800000  /* set if the tracing process can't force CLONE_PTRACE on this clone */
0027 #define CLONE_CHILD_SETTID  0x01000000  /* set the TID in the child */
0028 #define CLONE_NEWCGROUP     0x02000000  /* New cgroup namespace */
0029 #define CLONE_NEWUTS        0x04000000  /* New utsname namespace */
0030 #define CLONE_NEWIPC        0x08000000  /* New ipc namespace */
0031 #define CLONE_NEWUSER       0x10000000  /* New user namespace */
0032 #define CLONE_NEWPID        0x20000000  /* New pid namespace */
0033 #define CLONE_NEWNET        0x40000000  /* New network namespace */
0034 #define CLONE_IO        0x80000000  /* Clone io context */
0035 
0036 /* Flags for the clone3() syscall. */
0037 #define CLONE_CLEAR_SIGHAND 0x100000000ULL /* Clear any signal handler and reset to SIG_DFL. */
0038 #define CLONE_INTO_CGROUP 0x200000000ULL /* Clone into a specific cgroup given the right permissions. */
0039 
0040 /*
0041  * cloning flags intersect with CSIGNAL so can be used with unshare and clone3
0042  * syscalls only:
0043  */
0044 #define CLONE_NEWTIME   0x00000080  /* New time namespace */
0045 
0046 #ifndef __ASSEMBLY__
0047 /**
0048  * struct clone_args - arguments for the clone3 syscall
0049  * @flags:        Flags for the new process as listed above.
0050  *                All flags are valid except for CSIGNAL and
0051  *                CLONE_DETACHED.
0052  * @pidfd:        If CLONE_PIDFD is set, a pidfd will be
0053  *                returned in this argument.
0054  * @child_tid:    If CLONE_CHILD_SETTID is set, the TID of the
0055  *                child process will be returned in the child's
0056  *                memory.
0057  * @parent_tid:   If CLONE_PARENT_SETTID is set, the TID of
0058  *                the child process will be returned in the
0059  *                parent's memory.
0060  * @exit_signal:  The exit_signal the parent process will be
0061  *                sent when the child exits.
0062  * @stack:        Specify the location of the stack for the
0063  *                child process.
0064  *                Note, @stack is expected to point to the
0065  *                lowest address. The stack direction will be
0066  *                determined by the kernel and set up
0067  *                appropriately based on @stack_size.
0068  * @stack_size:   The size of the stack for the child process.
0069  * @tls:          If CLONE_SETTLS is set, the tls descriptor
0070  *                is set to tls.
0071  * @set_tid:      Pointer to an array of type *pid_t. The size
0072  *                of the array is defined using @set_tid_size.
0073  *                This array is used to select PIDs/TIDs for
0074  *                newly created processes. The first element in
0075  *                this defines the PID in the most nested PID
0076  *                namespace. Each additional element in the array
0077  *                defines the PID in the parent PID namespace of
0078  *                the original PID namespace. If the array has
0079  *                less entries than the number of currently
0080  *                nested PID namespaces only the PIDs in the
0081  *                corresponding namespaces are set.
0082  * @set_tid_size: This defines the size of the array referenced
0083  *                in @set_tid. This cannot be larger than the
0084  *                kernel's limit of nested PID namespaces.
0085  * @cgroup:       If CLONE_INTO_CGROUP is specified set this to
0086  *                a file descriptor for the cgroup.
0087  *
0088  * The structure is versioned by size and thus extensible.
0089  * New struct members must go at the end of the struct and
0090  * must be properly 64bit aligned.
0091  */
0092 struct clone_args {
0093     __aligned_u64 flags;
0094     __aligned_u64 pidfd;
0095     __aligned_u64 child_tid;
0096     __aligned_u64 parent_tid;
0097     __aligned_u64 exit_signal;
0098     __aligned_u64 stack;
0099     __aligned_u64 stack_size;
0100     __aligned_u64 tls;
0101     __aligned_u64 set_tid;
0102     __aligned_u64 set_tid_size;
0103     __aligned_u64 cgroup;
0104 };
0105 #endif
0106 
0107 #define CLONE_ARGS_SIZE_VER0 64 /* sizeof first published struct */
0108 #define CLONE_ARGS_SIZE_VER1 80 /* sizeof second published struct */
0109 #define CLONE_ARGS_SIZE_VER2 88 /* sizeof third published struct */
0110 
0111 /*
0112  * Scheduling policies
0113  */
0114 #define SCHED_NORMAL        0
0115 #define SCHED_FIFO      1
0116 #define SCHED_RR        2
0117 #define SCHED_BATCH     3
0118 /* SCHED_ISO: reserved but not implemented yet */
0119 #define SCHED_IDLE      5
0120 #define SCHED_DEADLINE      6
0121 
0122 /* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */
0123 #define SCHED_RESET_ON_FORK     0x40000000
0124 
0125 /*
0126  * For the sched_{set,get}attr() calls
0127  */
0128 #define SCHED_FLAG_RESET_ON_FORK    0x01
0129 #define SCHED_FLAG_RECLAIM      0x02
0130 #define SCHED_FLAG_DL_OVERRUN       0x04
0131 #define SCHED_FLAG_KEEP_POLICY      0x08
0132 #define SCHED_FLAG_KEEP_PARAMS      0x10
0133 #define SCHED_FLAG_UTIL_CLAMP_MIN   0x20
0134 #define SCHED_FLAG_UTIL_CLAMP_MAX   0x40
0135 
0136 #define SCHED_FLAG_KEEP_ALL (SCHED_FLAG_KEEP_POLICY | \
0137                  SCHED_FLAG_KEEP_PARAMS)
0138 
0139 #define SCHED_FLAG_UTIL_CLAMP   (SCHED_FLAG_UTIL_CLAMP_MIN | \
0140                  SCHED_FLAG_UTIL_CLAMP_MAX)
0141 
0142 #define SCHED_FLAG_ALL  (SCHED_FLAG_RESET_ON_FORK   | \
0143              SCHED_FLAG_RECLAIM     | \
0144              SCHED_FLAG_DL_OVERRUN      | \
0145              SCHED_FLAG_KEEP_ALL        | \
0146              SCHED_FLAG_UTIL_CLAMP)
0147 
0148 #endif /* _UAPI_LINUX_SCHED_H */