mirror of git://gcc.gnu.org/git/gcc.git
81 lines
1.8 KiB
D
81 lines
1.8 KiB
D
/*******************************************************************************
|
|
|
|
D binding for Linux specific scheduler control methods.
|
|
|
|
Defines functions sched_setaffinity and sched_getaffinity and the data
|
|
types they operate on.
|
|
|
|
Copyright: Copyright (c) 2016 Sociomantic Labs. All rights reserved.
|
|
License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
|
|
Authors: Nemanja Boric
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
module core.sys.linux.sched;
|
|
|
|
import core.sys.posix.sched;
|
|
import core.sys.posix.config;
|
|
import core.sys.posix.sys.types;
|
|
|
|
version (linux):
|
|
extern (C):
|
|
@nogc:
|
|
nothrow:
|
|
|
|
|
|
private // helpers
|
|
{
|
|
|
|
/* Size definition for CPU sets. */
|
|
enum
|
|
{
|
|
__CPU_SETSIZE = 1024,
|
|
__NCPUBITS = 8 * cpu_mask.sizeof,
|
|
}
|
|
|
|
/* Macros */
|
|
|
|
/* Basic access functions. */
|
|
size_t __CPUELT(size_t cpu) pure
|
|
{
|
|
return cpu / __NCPUBITS;
|
|
}
|
|
cpu_mask __CPUMASK(size_t cpu) pure
|
|
{
|
|
return 1UL << (cpu % __NCPUBITS);
|
|
}
|
|
|
|
cpu_mask __CPU_SET_S(size_t cpu, size_t setsize, cpu_set_t* cpusetp) pure
|
|
{
|
|
if (cpu < 8 * setsize)
|
|
{
|
|
cpusetp.__bits[__CPUELT(cpu)] |= __CPUMASK(cpu);
|
|
return __CPUMASK(cpu);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/// Type for array elements in 'cpu_set_t'.
|
|
alias c_ulong cpu_mask;
|
|
|
|
/// Data structure to describe CPU mask.
|
|
struct cpu_set_t
|
|
{
|
|
cpu_mask[__CPU_SETSIZE / __NCPUBITS] __bits;
|
|
}
|
|
|
|
/// Access macros for 'cpu_set' (missing a lot of them)
|
|
|
|
cpu_mask CPU_SET(size_t cpu, cpu_set_t* cpusetp) pure
|
|
{
|
|
return __CPU_SET_S(cpu, cpu_set_t.sizeof, cpusetp);
|
|
}
|
|
|
|
/* Functions */
|
|
int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);
|
|
int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);
|
|
|