• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdbool.h>
2 #include <stdint.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <errno.h>
6 
7 #include <sched.h>
8 
9 #include <cpuinfo.h>
10 #include <cpuinfo/internal-api.h>
11 #include <cpuinfo/log.h>
12 #include <linux/api.h>
13 
14 
15 const struct cpuinfo_processor** cpuinfo_linux_cpu_to_processor_map = NULL;
16 const struct cpuinfo_core** cpuinfo_linux_cpu_to_core_map = NULL;
17 
18 
cpuinfo_get_current_processor(void)19 const struct cpuinfo_processor* CPUINFO_ABI cpuinfo_get_current_processor(void) {
20 	if (!cpuinfo_is_initialized) {
21 		cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "current_processor");
22 	}
23 	const int cpu = sched_getcpu();
24 	if (cpu >= 0) {
25 		return cpuinfo_linux_cpu_to_processor_map[cpu];
26 	} else {
27 		return &cpuinfo_processors[0];
28 	}
29 }
30 
cpuinfo_get_current_core(void)31 const struct cpuinfo_core* CPUINFO_ABI cpuinfo_get_current_core(void) {
32 	if (!cpuinfo_is_initialized) {
33 		cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "current_core");
34 	}
35 	const int cpu = sched_getcpu();
36 	if (cpu >= 0) {
37 		return cpuinfo_linux_cpu_to_core_map[cpu];
38 	} else {
39 		return &cpuinfo_cores[0];
40 	}
41 }
42