d421a7ad936aa37fbcbf2b56055b0fb029039c0b
[akaros.git] / tools / dev-util / perf / akaros.h
1 /* Copyright (c) 2015 Google Inc
2  * Davide Libenzi <dlibenzi@google.com>
3  * See LICENSE for details.
4  */
5
6 #pragma once
7
8 #include <ros/arch/arch.h>
9 #include <ros/common.h>
10 #include <sys/types.h>
11 #include <stdint.h>
12 #include <stdio.h>
13 #include <limits.h>
14 #include <parlib/parlib.h>
15 #include <parlib/bitmask.h>
16
17 #define CORE_SET_SIZE BYTES_FOR_BITMASK(MAX_NUM_CORES)
18
19 /* Not using sched.h CPU set because that file has definitions for a large
20  * number of APIs Akaros does not support.
21  * Making Akaros core_set.h visible in userslace might be a cleaner approach.
22  */
23 struct core_set {
24         DECL_BITMASK(core_set, MAX_NUM_CORES);
25 };
26
27 void ros_get_low_latency_core_set(struct core_set *cores);
28 size_t ros_get_low_latency_core_count(void);
29 size_t ros_total_cores(void);
30 void ros_parse_cores(const char *str, struct core_set *cores);
31 void ros_get_all_cores_set(struct core_set *cores);
32 void ros_get_no_cores_set(struct core_set *cores);
33 void ros_not_core_set(struct core_set *dcs);
34 void ros_and_core_sets(struct core_set *dcs, const struct core_set *scs);
35 void ros_or_core_sets(struct core_set *dcs, const struct core_set *scs);
36
37 static inline void ros_set_bit(void *addr, size_t nbit)
38 {
39         SET_BITMASK_BIT(addr, nbit);
40 }
41
42 static inline void ros_clear_bit(void *addr, size_t nbit)
43 {
44         CLR_BITMASK_BIT(addr, nbit);
45 }
46
47 static inline bool ros_get_bit(const void *addr, size_t nbit)
48 {
49         return GET_BITMASK_BIT(addr, nbit);
50 }