Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.0-rc7 44 lines 845 B view raw
1#include <stdio.h> 2#include <stdlib.h> 3#include <unistd.h> 4#include <linux/bitops.h> 5#include "api/fs/fs.h" 6#include "smt.h" 7 8int smt_on(void) 9{ 10 static bool cached; 11 static int cached_result; 12 int cpu; 13 int ncpu; 14 15 if (cached) 16 return cached_result; 17 18 ncpu = sysconf(_SC_NPROCESSORS_CONF); 19 for (cpu = 0; cpu < ncpu; cpu++) { 20 unsigned long long siblings; 21 char *str; 22 size_t strlen; 23 char fn[256]; 24 25 snprintf(fn, sizeof fn, 26 "devices/system/cpu/cpu%d/topology/thread_siblings", 27 cpu); 28 if (sysfs__read_str(fn, &str, &strlen) < 0) 29 continue; 30 /* Entry is hex, but does not have 0x, so need custom parser */ 31 siblings = strtoull(str, NULL, 16); 32 free(str); 33 if (hweight64(siblings) > 1) { 34 cached_result = 1; 35 cached = true; 36 break; 37 } 38 } 39 if (!cached) { 40 cached_result = 0; 41 cached = true; 42 } 43 return cached_result; 44}