xref: /haiku/src/libs/gnu/sched_affinity.cpp (revision 984f843b917a1c4e077915c5961a6ef1cf8dabc7)
1 /*
2  * Copyright 2023, Jérôme Duval, jerome.duval@gmail.com. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 
7 #include <sched.h>
8 
9 #include <pthread_private.h>
10 #include <syscalls.h>
11 
12 
13 int
14 pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpuset_t* mask)
15 {
16 	return _kern_set_thread_affinity(thread->id, mask, cpusetsize);
17 }
18 
19 
20 int
21 pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpuset_t* mask)
22 {
23 	status_t status = _kern_get_thread_affinity(thread->id, mask, cpusetsize);
24 	if (status != B_OK) {
25 		if (status == B_BAD_THREAD_ID)
26 			return ESRCH;
27 
28 		return status;
29 	}
30 
31 	return 0;
32 }
33 
34 
35 int
36 sched_setaffinity(pid_t id, size_t cpusetsize, const cpuset_t* mask)
37 {
38 	status_t status = _kern_set_thread_affinity(id, mask, cpusetsize);
39 	if (status != B_OK) {
40 		if (status == B_BAD_THREAD_ID)
41 			return ESRCH;
42 
43 		return status;
44 	}
45 
46 	return 0;
47 }
48 
49 
50 int
51 sched_getaffinity(pid_t id, size_t cpusetsize, cpuset_t* mask)
52 {
53 	status_t status = _kern_get_thread_affinity(id, mask, cpusetsize);
54 	if (status != B_OK) {
55 		if (status == B_BAD_THREAD_ID)
56 			return ESRCH;
57 
58 		return status;
59 	}
60 
61 	return 0;
62 }
63