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

perf top/report: Fix infinite loop in the TUI for grouped events

For a while we need to have a dummy event for doing things like
receiving PERF_RECORD_COMM, PERF_RECORD_EXEC, etc for threads being
created and dying while we synthesize the pre-existing ones at tool
start.

This 'dummy' event is needed for keeping track of thread lifetime events
early in the session but are uninteresting otherwise, i.e. no need to
have it in a initial events menu for the non-grouped case, i.e. for:

# perf top -e cycles,instructions

or even for plain:

# perf top

When 'cycles' and that 'dummy' event are in place.

The code to remove that 'dummy' event ended up creating an endless loop
for the grouped case, i.e.:

# perf top -e '{cycles,instructions}'

Fix it.

Fixes: bee9ca1c8a237ca1 ("perf report TUI: Remove needless 'dummy' event from menu")
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+2 -1
+2 -1
tools/perf/ui/browsers/hists.c
··· 3629 3629 { 3630 3630 int nr_entries = evlist->core.nr_entries; 3631 3631 3632 - single_entry: 3633 3632 if (perf_evlist__single_entry(evlist)) { 3633 + single_entry: { 3634 3634 struct evsel *first = evlist__first(evlist); 3635 3635 3636 3636 return perf_evsel__hists_browse(first, nr_entries, help, 3637 3637 false, hbt, min_pcnt, 3638 3638 env, warn_lost_event, 3639 3639 annotation_opts); 3640 + } 3640 3641 } 3641 3642 3642 3643 if (symbol_conf.event_group) {