~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/perf/util/smt.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /tools/perf/util/smt.c (Version linux-6.12-rc7) and /tools/perf/util/smt.c (Version linux-5.19.17)


  1 // SPDX-License-Identifier: GPL-2.0-only       !!   1 #include <stdio.h>
  2 #include <string.h>                            !!   2 #include <stdlib.h>
                                                   >>   3 #include <unistd.h>
                                                   >>   4 #include <linux/bitops.h>
  3 #include "api/fs/fs.h"                              5 #include "api/fs/fs.h"
  4 #include "cputopo.h"                           << 
  5 #include "smt.h"                                    6 #include "smt.h"
  6                                                     7 
  7 bool smt_on(void)                              !!   8 /**
                                                   >>   9  * hweight_str - Returns the number of bits set in str. Stops at first non-hex
                                                   >>  10  *             or ',' character.
                                                   >>  11  */
                                                   >>  12 static int hweight_str(char *str)
                                                   >>  13 {
                                                   >>  14         int result = 0;
                                                   >>  15 
                                                   >>  16         while (*str) {
                                                   >>  17                 switch (*str++) {
                                                   >>  18                 case '':
                                                   >>  19                 case ',':
                                                   >>  20                         break;
                                                   >>  21                 case '1':
                                                   >>  22                 case '2':
                                                   >>  23                 case '4':
                                                   >>  24                 case '8':
                                                   >>  25                         result++;
                                                   >>  26                         break;
                                                   >>  27                 case '3':
                                                   >>  28                 case '5':
                                                   >>  29                 case '6':
                                                   >>  30                 case '9':
                                                   >>  31                 case 'a':
                                                   >>  32                 case 'A':
                                                   >>  33                 case 'c':
                                                   >>  34                 case 'C':
                                                   >>  35                         result += 2;
                                                   >>  36                         break;
                                                   >>  37                 case '7':
                                                   >>  38                 case 'b':
                                                   >>  39                 case 'B':
                                                   >>  40                 case 'd':
                                                   >>  41                 case 'D':
                                                   >>  42                 case 'e':
                                                   >>  43                 case 'E':
                                                   >>  44                         result += 3;
                                                   >>  45                         break;
                                                   >>  46                 case 'f':
                                                   >>  47                 case 'F':
                                                   >>  48                         result += 4;
                                                   >>  49                         break;
                                                   >>  50                 default:
                                                   >>  51                         goto done;
                                                   >>  52                 }
                                                   >>  53         }
                                                   >>  54 done:
                                                   >>  55         return result;
                                                   >>  56 }
                                                   >>  57 
                                                   >>  58 int smt_on(void)
  8 {                                                  59 {
  9         static bool cached;                        60         static bool cached;
 10         static bool cached_result;             !!  61         static int cached_result;
 11         int fs_value;                          !!  62         int cpu;
                                                   >>  63         int ncpu;
 12                                                    64 
 13         if (cached)                                65         if (cached)
 14                 return cached_result;              66                 return cached_result;
 15                                                    67 
 16         if (sysfs__read_int("devices/system/cp !!  68         if (sysfs__read_int("devices/system/cpu/smt/active", &cached_result) >= 0) {
 17                 cached_result = (fs_value == 1 !!  69                 cached = true;
 18         else                                   !!  70                 return cached_result;
 19                 cached_result = cpu_topology__ !!  71         }
 20                                                    72 
                                                   >>  73         cached_result = 0;
                                                   >>  74         ncpu = sysconf(_SC_NPROCESSORS_CONF);
                                                   >>  75         for (cpu = 0; cpu < ncpu; cpu++) {
                                                   >>  76                 unsigned long long siblings;
                                                   >>  77                 char *str;
                                                   >>  78                 size_t strlen;
                                                   >>  79                 char fn[256];
                                                   >>  80 
                                                   >>  81                 snprintf(fn, sizeof fn,
                                                   >>  82                         "devices/system/cpu/cpu%d/topology/thread_siblings", cpu);
                                                   >>  83                 if (sysfs__read_str(fn, &str, &strlen) < 0) {
                                                   >>  84                         snprintf(fn, sizeof fn,
                                                   >>  85                                 "devices/system/cpu/cpu%d/topology/core_cpus", cpu);
                                                   >>  86                         if (sysfs__read_str(fn, &str, &strlen) < 0)
                                                   >>  87                                 continue;
                                                   >>  88                 }
                                                   >>  89                 /* Entry is hex, but does not have 0x, so need custom parser */
                                                   >>  90                 siblings = hweight_str(str);
                                                   >>  91                 free(str);
                                                   >>  92                 if (siblings > 1) {
                                                   >>  93                         cached_result = 1;
                                                   >>  94                         break;
                                                   >>  95                 }
                                                   >>  96         }
 21         cached = true;                             97         cached = true;
 22         return cached_result;                      98         return cached_result;
 23 }                                              << 
 24                                                << 
 25 bool core_wide(bool system_wide, const char *u << 
 26 {                                              << 
 27         /* If not everything running on a core << 
 28         if (!system_wide)                      << 
 29                 return false;                  << 
 30                                                << 
 31         /* Cheap case that SMT is disabled and << 
 32         if (!smt_on())                         << 
 33                 return true;                   << 
 34                                                << 
 35         return cpu_topology__core_wide(online_ << 
 36 }                                                  99 }
 37                                                   100 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php