1 // SPDX-License-Identifier: GPL-2.0-only 2 #include <string.h> 3 #include "api/fs/fs.h" 4 #include "cputopo.h" 5 #include "smt.h" 6 smt_on(void)7bool smt_on(void) 8 { 9 static bool cached; 10 static bool cached_result; 11 int fs_value; 12 13 if (cached) 14 return cached_result; 15 16 if (sysfs__read_int("devices/system/cpu/smt/active", &fs_value) >= 0) 17 cached_result = (fs_value == 1); 18 else 19 cached_result = cpu_topology__smt_on(online_topology()); 20 21 cached = true; 22 return cached_result; 23 } 24 core_wide(bool system_wide,const char * user_requested_cpu_list)25bool core_wide(bool system_wide, const char *user_requested_cpu_list) 26 { 27 /* If not everything running on a core is being recorded then we can't use core_wide. */ 28 if (!system_wide) 29 return false; 30 31 /* Cheap case that SMT is disabled and therefore we're inherently core_wide. */ 32 if (!smt_on()) 33 return true; 34 35 return cpu_topology__core_wide(online_topology(), user_requested_cpu_list); 36 } 37