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