include: import kernel headers for several struct and enum definitions
- mempolicy.h for MPOL_DEFAULT and friends, - sched/types.h for struct sched_attr, - xattr.h for struct xattr_args.
This commit is contained in:
@@ -575,14 +575,6 @@ long_max = cc.compute_int(
|
||||
assert(long_max > 100000)
|
||||
conf.set_quoted('LONG_MAX_STR', '@0@'.format(long_max))
|
||||
|
||||
foreach ident : [
|
||||
['struct sched_attr', '''#include <sched.h>'''], # since glibc-2.41
|
||||
]
|
||||
# We get -1 if the size cannot be determined
|
||||
have = cc.sizeof(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE') > 0
|
||||
conf.set10('HAVE_' + ident[0].underscorify().to_upper(), have)
|
||||
endforeach
|
||||
|
||||
foreach ident : [
|
||||
['set_mempolicy', '''#include <sys/syscall.h>'''], # declared at numaif.h provided by libnuma, which we do not use
|
||||
['get_mempolicy', '''#include <sys/syscall.h>'''], # declared at numaif.h provided by libnuma, which we do not use
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
/*
|
||||
* NUMA memory policies for Linux.
|
||||
* Copyright 2003,2004 Andi Kleen SuSE Labs
|
||||
*/
|
||||
#ifndef _LINUX_MEMPOLICY_H
|
||||
#define _LINUX_MEMPOLICY_H
|
||||
|
||||
#include <linux/errno.h>
|
||||
|
||||
|
||||
/*
|
||||
* Both the MPOL_* mempolicy mode and the MPOL_F_* optional mode flags are
|
||||
* passed by the user to either set_mempolicy() or mbind() in an 'int' actual.
|
||||
* The MPOL_MODE_FLAGS macro determines the legal set of optional mode flags.
|
||||
*/
|
||||
|
||||
/* Policies */
|
||||
enum {
|
||||
MPOL_DEFAULT,
|
||||
MPOL_PREFERRED,
|
||||
MPOL_BIND,
|
||||
MPOL_INTERLEAVE,
|
||||
MPOL_LOCAL,
|
||||
MPOL_PREFERRED_MANY,
|
||||
MPOL_WEIGHTED_INTERLEAVE,
|
||||
MPOL_MAX, /* always last member of enum */
|
||||
};
|
||||
|
||||
/* Flags for set_mempolicy */
|
||||
#define MPOL_F_STATIC_NODES (1 << 15)
|
||||
#define MPOL_F_RELATIVE_NODES (1 << 14)
|
||||
#define MPOL_F_NUMA_BALANCING (1 << 13) /* Optimize with NUMA balancing if possible */
|
||||
|
||||
/*
|
||||
* MPOL_MODE_FLAGS is the union of all possible optional mode flags passed to
|
||||
* either set_mempolicy() or mbind().
|
||||
*/
|
||||
#define MPOL_MODE_FLAGS \
|
||||
(MPOL_F_STATIC_NODES | MPOL_F_RELATIVE_NODES | MPOL_F_NUMA_BALANCING)
|
||||
|
||||
/* Flags for get_mempolicy */
|
||||
#define MPOL_F_NODE (1<<0) /* return next IL mode instead of node mask */
|
||||
#define MPOL_F_ADDR (1<<1) /* look up vma using address */
|
||||
#define MPOL_F_MEMS_ALLOWED (1<<2) /* return allowed memories */
|
||||
|
||||
/* Flags for mbind */
|
||||
#define MPOL_MF_STRICT (1<<0) /* Verify existing pages in the mapping */
|
||||
#define MPOL_MF_MOVE (1<<1) /* Move pages owned by this process to conform
|
||||
to policy */
|
||||
#define MPOL_MF_MOVE_ALL (1<<2) /* Move every page to conform to policy */
|
||||
#define MPOL_MF_LAZY (1<<3) /* UNSUPPORTED FLAG: Lazy migrate on fault */
|
||||
#define MPOL_MF_INTERNAL (1<<4) /* Internal flags start here */
|
||||
|
||||
#define MPOL_MF_VALID (MPOL_MF_STRICT | \
|
||||
MPOL_MF_MOVE | \
|
||||
MPOL_MF_MOVE_ALL)
|
||||
|
||||
/*
|
||||
* Internal flags that share the struct mempolicy flags word with
|
||||
* "mode flags". These flags are allocated from bit 0 up, as they
|
||||
* are never OR'ed into the mode in mempolicy API arguments.
|
||||
*/
|
||||
#define MPOL_F_SHARED (1 << 0) /* identify shared policies */
|
||||
#define MPOL_F_MOF (1 << 3) /* this policy wants migrate on fault */
|
||||
#define MPOL_F_MORON (1 << 4) /* Migrate On protnone Reference On Node */
|
||||
|
||||
/*
|
||||
* These bit locations are exposed in the vm.zone_reclaim_mode sysctl
|
||||
* ABI. New bits are OK, but existing bits can never change.
|
||||
*/
|
||||
#define RECLAIM_ZONE (1<<0) /* Run shrink_inactive_list on the zone */
|
||||
#define RECLAIM_WRITE (1<<1) /* Writeout pages during reclaim */
|
||||
#define RECLAIM_UNMAP (1<<2) /* Unmap pages during reclaim */
|
||||
|
||||
#endif /* _LINUX_MEMPOLICY_H */
|
||||
@@ -0,0 +1,121 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef _LINUX_SCHED_TYPES_H
|
||||
#define _LINUX_SCHED_TYPES_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define SCHED_ATTR_SIZE_VER0 48 /* sizeof first published struct */
|
||||
#define SCHED_ATTR_SIZE_VER1 56 /* add: util_{min,max} */
|
||||
|
||||
/*
|
||||
* Extended scheduling parameters data structure.
|
||||
*
|
||||
* This is needed because the original struct sched_param can not be
|
||||
* altered without introducing ABI issues with legacy applications
|
||||
* (e.g., in sched_getparam()).
|
||||
*
|
||||
* However, the possibility of specifying more than just a priority for
|
||||
* the tasks may be useful for a wide variety of application fields, e.g.,
|
||||
* multimedia, streaming, automation and control, and many others.
|
||||
*
|
||||
* This variant (sched_attr) allows to define additional attributes to
|
||||
* improve the scheduler knowledge about task requirements.
|
||||
*
|
||||
* Scheduling Class Attributes
|
||||
* ===========================
|
||||
*
|
||||
* A subset of sched_attr attributes specifies the
|
||||
* scheduling policy and relative POSIX attributes:
|
||||
*
|
||||
* @size size of the structure, for fwd/bwd compat.
|
||||
*
|
||||
* @sched_policy task's scheduling policy
|
||||
* @sched_nice task's nice value (SCHED_NORMAL/BATCH)
|
||||
* @sched_priority task's static priority (SCHED_FIFO/RR)
|
||||
*
|
||||
* Certain more advanced scheduling features can be controlled by a
|
||||
* predefined set of flags via the attribute:
|
||||
*
|
||||
* @sched_flags for customizing the scheduler behaviour
|
||||
*
|
||||
* Sporadic Time-Constrained Task Attributes
|
||||
* =========================================
|
||||
*
|
||||
* A subset of sched_attr attributes allows to describe a so-called
|
||||
* sporadic time-constrained task.
|
||||
*
|
||||
* In such a model a task is specified by:
|
||||
* - the activation period or minimum instance inter-arrival time;
|
||||
* - the maximum (or average, depending on the actual scheduling
|
||||
* discipline) computation time of all instances, a.k.a. runtime;
|
||||
* - the deadline (relative to the actual activation time) of each
|
||||
* instance.
|
||||
* Very briefly, a periodic (sporadic) task asks for the execution of
|
||||
* some specific computation --which is typically called an instance--
|
||||
* (at most) every period. Moreover, each instance typically lasts no more
|
||||
* than the runtime and must be completed by time instant t equal to
|
||||
* the instance activation time + the deadline.
|
||||
*
|
||||
* This is reflected by the following fields of the sched_attr structure:
|
||||
*
|
||||
* @sched_deadline representative of the task's deadline in nanoseconds
|
||||
* @sched_runtime representative of the task's runtime in nanoseconds
|
||||
* @sched_period representative of the task's period in nanoseconds
|
||||
*
|
||||
* Given this task model, there are a multiplicity of scheduling algorithms
|
||||
* and policies, that can be used to ensure all the tasks will make their
|
||||
* timing constraints.
|
||||
*
|
||||
* As of now, the SCHED_DEADLINE policy (sched_dl scheduling class) is the
|
||||
* only user of this new interface. More information about the algorithm
|
||||
* available in the scheduling class file or in Documentation/.
|
||||
*
|
||||
* Task Utilization Attributes
|
||||
* ===========================
|
||||
*
|
||||
* A subset of sched_attr attributes allows to specify the utilization
|
||||
* expected for a task. These attributes allow to inform the scheduler about
|
||||
* the utilization boundaries within which it should schedule the task. These
|
||||
* boundaries are valuable hints to support scheduler decisions on both task
|
||||
* placement and frequency selection.
|
||||
*
|
||||
* @sched_util_min represents the minimum utilization
|
||||
* @sched_util_max represents the maximum utilization
|
||||
*
|
||||
* Utilization is a value in the range [0..SCHED_CAPACITY_SCALE]. It
|
||||
* represents the percentage of CPU time used by a task when running at the
|
||||
* maximum frequency on the highest capacity CPU of the system. For example, a
|
||||
* 20% utilization task is a task running for 2ms every 10ms at maximum
|
||||
* frequency.
|
||||
*
|
||||
* A task with a min utilization value bigger than 0 is more likely scheduled
|
||||
* on a CPU with a capacity big enough to fit the specified value.
|
||||
* A task with a max utilization value smaller than 1024 is more likely
|
||||
* scheduled on a CPU with no more capacity than the specified value.
|
||||
*
|
||||
* A task utilization boundary can be reset by setting the attribute to -1.
|
||||
*/
|
||||
struct sched_attr {
|
||||
__u32 size;
|
||||
|
||||
__u32 sched_policy;
|
||||
__u64 sched_flags;
|
||||
|
||||
/* SCHED_NORMAL, SCHED_BATCH */
|
||||
__s32 sched_nice;
|
||||
|
||||
/* SCHED_FIFO, SCHED_RR */
|
||||
__u32 sched_priority;
|
||||
|
||||
/* SCHED_DEADLINE */
|
||||
__u64 sched_runtime;
|
||||
__u64 sched_deadline;
|
||||
__u64 sched_period;
|
||||
|
||||
/* Utilization hints */
|
||||
__u32 sched_util_min;
|
||||
__u32 sched_util_max;
|
||||
|
||||
};
|
||||
|
||||
#endif /* _LINUX_SCHED_TYPES_H */
|
||||
@@ -0,0 +1,96 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
/*
|
||||
File: linux/xattr.h
|
||||
|
||||
Extended attributes handling.
|
||||
|
||||
Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org>
|
||||
Copyright (c) 2001-2002 Silicon Graphics, Inc. All Rights Reserved.
|
||||
Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
|
||||
Copyright (c) 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
*/
|
||||
|
||||
#include <linux/libc-compat.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#ifndef _LINUX_XATTR_H
|
||||
#define _LINUX_XATTR_H
|
||||
|
||||
#if __UAPI_DEF_XATTR
|
||||
#define __USE_KERNEL_XATTR_DEFS
|
||||
|
||||
#define XATTR_CREATE 0x1 /* set value, fail if attr already exists */
|
||||
#define XATTR_REPLACE 0x2 /* set value, fail if attr does not exist */
|
||||
|
||||
struct xattr_args {
|
||||
__aligned_u64 value;
|
||||
__u32 size;
|
||||
__u32 flags;
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Namespaces */
|
||||
#define XATTR_OS2_PREFIX "os2."
|
||||
#define XATTR_OS2_PREFIX_LEN (sizeof(XATTR_OS2_PREFIX) - 1)
|
||||
|
||||
#define XATTR_MAC_OSX_PREFIX "osx."
|
||||
#define XATTR_MAC_OSX_PREFIX_LEN (sizeof(XATTR_MAC_OSX_PREFIX) - 1)
|
||||
|
||||
#define XATTR_BTRFS_PREFIX "btrfs."
|
||||
#define XATTR_BTRFS_PREFIX_LEN (sizeof(XATTR_BTRFS_PREFIX) - 1)
|
||||
|
||||
#define XATTR_HURD_PREFIX "gnu."
|
||||
#define XATTR_HURD_PREFIX_LEN (sizeof(XATTR_HURD_PREFIX) - 1)
|
||||
|
||||
#define XATTR_SECURITY_PREFIX "security."
|
||||
#define XATTR_SECURITY_PREFIX_LEN (sizeof(XATTR_SECURITY_PREFIX) - 1)
|
||||
|
||||
#define XATTR_SYSTEM_PREFIX "system."
|
||||
#define XATTR_SYSTEM_PREFIX_LEN (sizeof(XATTR_SYSTEM_PREFIX) - 1)
|
||||
|
||||
#define XATTR_TRUSTED_PREFIX "trusted."
|
||||
#define XATTR_TRUSTED_PREFIX_LEN (sizeof(XATTR_TRUSTED_PREFIX) - 1)
|
||||
|
||||
#define XATTR_USER_PREFIX "user."
|
||||
#define XATTR_USER_PREFIX_LEN (sizeof(XATTR_USER_PREFIX) - 1)
|
||||
|
||||
/* Security namespace */
|
||||
#define XATTR_EVM_SUFFIX "evm"
|
||||
#define XATTR_NAME_EVM XATTR_SECURITY_PREFIX XATTR_EVM_SUFFIX
|
||||
|
||||
#define XATTR_IMA_SUFFIX "ima"
|
||||
#define XATTR_NAME_IMA XATTR_SECURITY_PREFIX XATTR_IMA_SUFFIX
|
||||
|
||||
#define XATTR_SELINUX_SUFFIX "selinux"
|
||||
#define XATTR_NAME_SELINUX XATTR_SECURITY_PREFIX XATTR_SELINUX_SUFFIX
|
||||
|
||||
#define XATTR_SMACK_SUFFIX "SMACK64"
|
||||
#define XATTR_SMACK_IPIN "SMACK64IPIN"
|
||||
#define XATTR_SMACK_IPOUT "SMACK64IPOUT"
|
||||
#define XATTR_SMACK_EXEC "SMACK64EXEC"
|
||||
#define XATTR_SMACK_TRANSMUTE "SMACK64TRANSMUTE"
|
||||
#define XATTR_SMACK_MMAP "SMACK64MMAP"
|
||||
#define XATTR_NAME_SMACK XATTR_SECURITY_PREFIX XATTR_SMACK_SUFFIX
|
||||
#define XATTR_NAME_SMACKIPIN XATTR_SECURITY_PREFIX XATTR_SMACK_IPIN
|
||||
#define XATTR_NAME_SMACKIPOUT XATTR_SECURITY_PREFIX XATTR_SMACK_IPOUT
|
||||
#define XATTR_NAME_SMACKEXEC XATTR_SECURITY_PREFIX XATTR_SMACK_EXEC
|
||||
#define XATTR_NAME_SMACKTRANSMUTE XATTR_SECURITY_PREFIX XATTR_SMACK_TRANSMUTE
|
||||
#define XATTR_NAME_SMACKMMAP XATTR_SECURITY_PREFIX XATTR_SMACK_MMAP
|
||||
|
||||
#define XATTR_APPARMOR_SUFFIX "apparmor"
|
||||
#define XATTR_NAME_APPARMOR XATTR_SECURITY_PREFIX XATTR_APPARMOR_SUFFIX
|
||||
|
||||
#define XATTR_CAPS_SUFFIX "capability"
|
||||
#define XATTR_NAME_CAPS XATTR_SECURITY_PREFIX XATTR_CAPS_SUFFIX
|
||||
|
||||
#define XATTR_BPF_LSM_SUFFIX "bpf."
|
||||
#define XATTR_NAME_BPF_LSM (XATTR_SECURITY_PREFIX XATTR_BPF_LSM_SUFFIX)
|
||||
#define XATTR_NAME_BPF_LSM_LEN (sizeof(XATTR_NAME_BPF_LSM) - 1)
|
||||
|
||||
#define XATTR_POSIX_ACL_ACCESS "posix_acl_access"
|
||||
#define XATTR_NAME_POSIX_ACL_ACCESS XATTR_SYSTEM_PREFIX XATTR_POSIX_ACL_ACCESS
|
||||
#define XATTR_POSIX_ACL_DEFAULT "posix_acl_default"
|
||||
#define XATTR_NAME_POSIX_ACL_DEFAULT XATTR_SYSTEM_PREFIX XATTR_POSIX_ACL_DEFAULT
|
||||
|
||||
|
||||
#endif /* _LINUX_XATTR_H */
|
||||
@@ -0,0 +1,8 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
#pragma once
|
||||
|
||||
/* To make struct xattr_args defined, which is used by setxattrat(). Note, the kernel header must be
|
||||
* included before the glibc header, otherwise the struct will not be defined. */
|
||||
#include <linux/xattr.h>
|
||||
|
||||
#include_next <sys/xattr.h>
|
||||
@@ -1,7 +1,10 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
#pragma once
|
||||
|
||||
#include <linux/types.h>
|
||||
/* sched.h includes linux/sched/types.h since glibc-2.41 (21571ca0d70302909cf72707b2a7736cf12190a0),
|
||||
* to make struct sched_attr being defined.
|
||||
* Note, this must be included before sched.h, otherwise the headers conflict with each other. */
|
||||
#include <linux/sched/types.h>
|
||||
#include <sched.h> /* IWYU pragma: export */
|
||||
|
||||
#include "forward.h"
|
||||
@@ -31,20 +34,3 @@ assert_cc(PF_KTHREAD == 0x00200000);
|
||||
#else
|
||||
assert_cc(TASK_COMM_LEN == 16);
|
||||
#endif
|
||||
|
||||
#if !HAVE_STRUCT_SCHED_ATTR
|
||||
struct sched_attr {
|
||||
__u32 size; /* Size of this structure */
|
||||
__u32 sched_policy; /* Policy (SCHED_*) */
|
||||
__u64 sched_flags; /* Flags */
|
||||
__s32 sched_nice; /* Nice value (SCHED_OTHER,
|
||||
SCHED_BATCH) */
|
||||
__u32 sched_priority; /* Static priority (SCHED_FIFO,
|
||||
SCHED_RR) */
|
||||
/* Remaining fields are for SCHED_DEADLINE
|
||||
and potentially soon for SCHED_OTHER/SCHED_BATCH */
|
||||
__u64 sched_runtime;
|
||||
__u64 sched_deadline;
|
||||
__u64 sched_period;
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -3,8 +3,10 @@
|
||||
|
||||
/* Missing glibc definitions to access certain kernel APIs */
|
||||
|
||||
#include <linux/mempolicy.h>
|
||||
#include <signal.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <sys/xattr.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifdef ARCH_MIPS
|
||||
@@ -108,14 +110,6 @@ static inline int missing_bpf(int cmd, union bpf_attr *attr, size_t size) {
|
||||
/* ======================================================================= */
|
||||
|
||||
#if !HAVE_SET_MEMPOLICY
|
||||
enum {
|
||||
MPOL_DEFAULT,
|
||||
MPOL_PREFERRED,
|
||||
MPOL_BIND,
|
||||
MPOL_INTERLEAVE,
|
||||
MPOL_LOCAL,
|
||||
};
|
||||
|
||||
static inline long missing_set_mempolicy(int mode, const unsigned long *nodemask,
|
||||
unsigned long maxnode) {
|
||||
return syscall(__NR_set_mempolicy, mode, nodemask, maxnode);
|
||||
@@ -236,12 +230,6 @@ static inline int missing_quotactl_fd(int fd, int cmd, int id, void *addr) {
|
||||
|
||||
#if !HAVE_SETXATTRAT
|
||||
/* since kernel v6.13 (6140be90ec70c39fa844741ca3cc807dd0866394) */
|
||||
struct xattr_args {
|
||||
_align_(8) uint64_t value;
|
||||
uint32_t size;
|
||||
uint32_t flags;
|
||||
};
|
||||
|
||||
static inline int missing_setxattrat(int fd, const char *path, int at_flags, const char *name, const struct xattr_args *args, size_t size) {
|
||||
return syscall(__NR_setxattrat, fd, path, at_flags, name, args, size);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user