]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/cpu-set-util.h
udevd: Add ReceivePacketSteeringCPUMask for systemd.link
[thirdparty/systemd.git] / src / shared / cpu-set-util.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
618234a5
LP
2#pragma once
3
618234a5
LP
4#include <sched.h>
5
6#include "macro.h"
b070c7c0 7#include "missing_syscall.h"
618234a5 8
0985c7c4
ZJS
9/* This wraps the libc interface with a variable to keep the allocated size. */
10typedef struct CPUSet {
11 cpu_set_t *set;
12 size_t allocated; /* in bytes */
13} CPUSet;
14
15static inline void cpu_set_reset(CPUSet *a) {
16 assert((a->allocated > 0) == !!a->set);
17 if (a->set)
18 CPU_FREE(a->set);
19 *a = (CPUSet) {};
6d8a29b2
YW
20}
21
0f30bf58
RRZ
22CPUSet* cpu_set_free(CPUSet *c);
23DEFINE_TRIVIAL_CLEANUP_FUNC(CPUSet*, cpu_set_free);
24
0985c7c4 25int cpu_set_add_all(CPUSet *a, const CPUSet *b);
332d387f 26int cpu_set_add(CPUSet *a, unsigned cpu);
0985c7c4
ZJS
27
28char* cpu_set_to_string(const CPUSet *a);
71b28519 29char *cpu_set_to_range_string(const CPUSet *a);
0f30bf58 30char* cpu_set_to_mask_string(const CPUSet *a);
167a776d 31int cpu_set_realloc(CPUSet *cpu_set, unsigned ncpus);
71b28519 32
0985c7c4
ZJS
33int parse_cpu_set_full(
34 const char *rvalue,
35 CPUSet *cpu_set,
36 bool warn,
37 const char *unit,
38 const char *filename, unsigned line,
39 const char *lvalue);
40int parse_cpu_set_extend(
41 const char *rvalue,
42 CPUSet *old,
43 bool warn,
44 const char *unit,
45 const char *filename,
46 unsigned line,
47 const char *lvalue);
48
49static inline int parse_cpu_set(const char *rvalue, CPUSet *cpu_set){
50 return parse_cpu_set_full(rvalue, cpu_set, false, NULL, NULL, 0, NULL);
6d8a29b2 51}
f44b3035 52
c367f996
MS
53int cpu_set_to_dbus(const CPUSet *set, uint8_t **ret, size_t *allocated);
54int cpu_set_from_dbus(const uint8_t *bits, size_t size, CPUSet *set);
55
f44b3035 56int cpus_in_affinity_mask(void);
0f30bf58 57int cpu_mask_add_all(CPUSet *mask);