root/tools/perf/util/smt.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. smt_on

   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 
   8 int 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/core_cpus", cpu);
  27                 if (access(fn, F_OK) == -1) {
  28                         snprintf(fn, sizeof fn,
  29                                 "devices/system/cpu/cpu%d/topology/thread_siblings",
  30                                 cpu);
  31                 }
  32                 if (sysfs__read_str(fn, &str, &strlen) < 0)
  33                         continue;
  34                 /* Entry is hex, but does not have 0x, so need custom parser */
  35                 siblings = strtoull(str, NULL, 16);
  36                 free(str);
  37                 if (hweight64(siblings) > 1) {
  38                         cached_result = 1;
  39                         cached = true;
  40                         break;
  41                 }
  42         }
  43         if (!cached) {
  44                 cached_result = 0;
  45                 cached = true;
  46         }
  47         return cached_result;
  48 }

/* [<][>][^][v][top][bottom][index][help] */