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)19const 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)31const 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