Skip to content
  • Arnaldo Carvalho de Melo's avatar
    perf symbols: Accept zero as the kernel base address · 4b1303d0
    Arnaldo Carvalho de Melo authored
    
    
    Which is the case in S/390, where symbols were not being resolved
    because machine__get_kernel_start was only setting machine->kernel_start
    when the just successfully loaded kernel symtab had its map->start set
    to !0, when it was left at (1ULL << 63) assuming a partitioning of the
    address space for user/kernel, which is not the case in S/390 nor in
    Sparc.
    
    So just check if map__load() was successfull and set
    machine->kernel_start to zero, fixing kernel symbol resolution on S/390.
    
    Test performed by Thomas:
    
     ----
    
      I like this patch. I have done a new build and removed all my debug output to start
      from scratch. Without your patch I get this:
    
      # Samples: 4  of event 'cpu-clock'
      # Event count (approx.): 1000000
      #
      # Children      Self  Command  Shared Object     Symbol
      # ........  ........  .......  ................  ........................
          75.00%     0.00%  true     [unknown]         [k] 0x00000000004bedda
                  |
                  ---0x4bedda
                     |
                     |--50.00%--0x42693a
                     |          |
                     |           --25.00%--0x2a72e0
                     |                     0x2af0ca
                     |                     0x3d1003fe4c0
                     |
                      --25.00%--0x4272bc
                                0x26fa84
    
      and with your patch (I just rebuilt the perf tool, nothing else and used the same
      perf.data file as input):
    
      # Samples: 4  of event 'cpu-clock'
      # Event count (approx.): 1000000
      #
      # Children      Self  Command  Shared Object               Symbol
      # ........  ........  .......  ..........................  ..................................
          75.00%     0.00%  true     [kernel.vmlinux]            [k] pgm_check_handler
                  |
                  ---pgm_check_handler
                     do_dat_exception
                     handle_mm_fault
                     __handle_mm_fault
                     filemap_map_pages
                     |
                     |--25.00%--rcu_read_lock_held
                     |          rcu_lockdep_current_cpu_online
                     |          0x3d1003ff4c0
                     |
                      --25.00%--lock_release
    
      Looks good to me....
     ----
    
    Reported-and-Tested-by: default avatarThomas-Mich Richter <tmricht@linux.vnet.ibm.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Cc: Zvonko Kosic <zvonko.kosic@de.ibm.com>
    Link: http://lkml.kernel.org/n/tip-dk0n1uzmbe0tbthrpfqlx6bz@git.kernel.org
    
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    4b1303d0