• Thomas Richter's avatar
    perf cputopo: Fix CPU topology reading on s/390 · a6e62743
    Thomas Richter authored
    Commit fdf1e29b ("perf expr: Add metric literals for topology.")
    fails on s390:
    
     # ./perf test -Fv 7
       ...
     # FAILED tests/expr.c:173 #num_dies >= #num_packages
       ---- end ----
       Simple expression parser: FAILED!
     #
    
    Investigating this issue leads to these functions:
     build_cpu_topology()
       +--> has_die_topology(void)
            {
               struct utsname uts;
    
               if (uname(&uts) < 0)
                      return false;
               if (strncmp(uts.machine, "x86_64", 6))
                      return false;
               ....
            }
    
    which always returns false on s390. The caller build_cpu_topology()
    checks has_die_topology() return value. On false the
    the struct cpu_topology::die_cpu_list is not contructed and has zero
    entries. This leads to the failing comparison: #num_dies >= #num_packages.
    s390 of course has a positive number of packages.
    
    Fix this by adding s390 architecture to support CPU die list.
    
    Output after:
     # ./perf test -Fv 7
      7: Simple expression parser                                        :
      --- start ---
      division by zero
      syntax error
      ---- end ----
      Simple expression parser: Ok
     #
    
    Fixes: fdf1e29b ("perf expr: Add metric literals for topology.")
    Reviewed-by: default avatarIan Rogers <irogers@google.com>
    Signed-off-by: default avatarThomas Richter <tmricht@linux.ibm.com>
    Cc: Heiko Carstens <hca@linux.ibm.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
    Cc: Sven Schnelle <svens@linux.ibm.com>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Link: https://lore.kernel.org/r/20211124090343.9436-1-tmricht@linux.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    a6e62743
cputopo.c 7.78 KB