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

perf tools: Use hpp_dimension__add_output to register hpp columns

The perf_hpp__init currently does not respect sorting dimensions and the
setup_sorting function could endup queueing same format twice. That
screwed up the perf_hpp__list and got stuck in loop within
perf_hpp__setup_output_field function.

$ perf report -F +overhead

0x00000000004c1355 in perf_hpp__is_sort_entry (format=format@entry=0x880440 <perf_hpp.format>) at util/sort.c:1506
1506 {

#0 0x00000000004c1355 in perf_hpp__is_sort_entry (format=format@entry=0x880440 <perf_hpp.format>) at util/sort.c:1506
#1 0x00000000004c139d in perf_hpp__same_sort_entry (a=a@entry=0x880440 <perf_hpp.format>, b=b@entry=0x2bb2fe0) at util/sort.c:1380
#2 0x00000000004f8d3c in perf_hpp__setup_output_field () at ui/hist.c:554
#3 0x00000000004c1d1e in setup_sorting () at util/sort.c:1984
#4 0x000000000042efbf in cmd_report (argc=0, argv=0x7ffea5a0e790, prefix=<optimized out>) at builtin-report.c:874
#5 0x0000000000476f13 in run_builtin (p=p@entry=0x875628 <commands+168>, argc=argc@entry=3, argv=argv@entry=0x7ffea5a0e790) at perf.c:385
#6 0x000000000047710b in handle_internal_command (argc=3, argv=0x7ffea5a0e790) at perf.c:445
#7 0x0000000000477176 in run_argv (argcp=argcp@entry=0x7ffea5a0e5fc, argv=argv@entry=0x7ffea5a0e5f0) at perf.c:489
#8 0x00000000004773e7 in main (argc=3, argv=0x7ffea5a0e790) at perf.c:606

Using hpp_dimension__add_output function to register the output column.
It will also mark the dimension as taken and omit above stuck.

Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1444134312-29136-4-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Jiri Olsa and committed by
Arnaldo Carvalho de Melo
1178bfd4 beeaaeb3

+8 -8
+8 -8
tools/perf/ui/hist.c
··· 463 463 return; 464 464 465 465 if (symbol_conf.cumulate_callchain) { 466 - perf_hpp__column_enable(PERF_HPP__OVERHEAD_ACC); 466 + hpp_dimension__add_output(PERF_HPP__OVERHEAD_ACC); 467 467 perf_hpp__format[PERF_HPP__OVERHEAD].name = "Self"; 468 468 } 469 469 470 - perf_hpp__column_enable(PERF_HPP__OVERHEAD); 470 + hpp_dimension__add_output(PERF_HPP__OVERHEAD); 471 471 472 472 if (symbol_conf.show_cpu_utilization) { 473 - perf_hpp__column_enable(PERF_HPP__OVERHEAD_SYS); 474 - perf_hpp__column_enable(PERF_HPP__OVERHEAD_US); 473 + hpp_dimension__add_output(PERF_HPP__OVERHEAD_SYS); 474 + hpp_dimension__add_output(PERF_HPP__OVERHEAD_US); 475 475 476 476 if (perf_guest) { 477 - perf_hpp__column_enable(PERF_HPP__OVERHEAD_GUEST_SYS); 478 - perf_hpp__column_enable(PERF_HPP__OVERHEAD_GUEST_US); 477 + hpp_dimension__add_output(PERF_HPP__OVERHEAD_GUEST_SYS); 478 + hpp_dimension__add_output(PERF_HPP__OVERHEAD_GUEST_US); 479 479 } 480 480 } 481 481 482 482 if (symbol_conf.show_nr_samples) 483 - perf_hpp__column_enable(PERF_HPP__SAMPLES); 483 + hpp_dimension__add_output(PERF_HPP__SAMPLES); 484 484 485 485 if (symbol_conf.show_total_period) 486 - perf_hpp__column_enable(PERF_HPP__PERIOD); 486 + hpp_dimension__add_output(PERF_HPP__PERIOD); 487 487 488 488 /* prepend overhead field for backward compatiblity. */ 489 489 list = &perf_hpp__format[PERF_HPP__OVERHEAD].sort_list;