From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756098AbcAIQ0I (ORCPT ); Sat, 9 Jan 2016 11:26:08 -0500 Received: from terminus.zytor.com ([198.137.202.10]:41731 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754652AbcAIQ0G (ORCPT ); Sat, 9 Jan 2016 11:26:06 -0500 Date: Sat, 9 Jan 2016 08:25:29 -0800 From: tip-bot for Namhyung Kim Message-ID: Cc: linux-kernel@vger.kernel.org, wangnan0@huawei.com, andi@firstfloor.org, rostedt@goodmis.org, hpa@zytor.com, acme@redhat.com, jolsa@redhat.com, tglx@linutronix.de, fweisbec@gmail.com, peterz@infradead.org, mingo@kernel.org, namhyung@kernel.org, dsahern@gmail.com Reply-To: hpa@zytor.com, rostedt@goodmis.org, andi@firstfloor.org, wangnan0@huawei.com, acme@redhat.com, jolsa@redhat.com, fweisbec@gmail.com, tglx@linutronix.de, linux-kernel@vger.kernel.org, mingo@kernel.org, dsahern@gmail.com, namhyung@kernel.org, peterz@infradead.org In-Reply-To: <1450804030-29193-11-git-send-email-namhyung@kernel.org> References: <1450804030-29193-11-git-send-email-namhyung@kernel.org> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf tools: Support '.*' dynamic sort key Git-Commit-ID: 3b099bf5898ac1bf44d822f0bc15a7517e6fa117 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 3b099bf5898ac1bf44d822f0bc15a7517e6fa117 Gitweb: http://git.kernel.org/tip/3b099bf5898ac1bf44d822f0bc15a7517e6fa117 Author: Namhyung Kim AuthorDate: Wed, 23 Dec 2015 02:07:07 +0900 Committer: Arnaldo Carvalho de Melo CommitDate: Wed, 6 Jan 2016 20:11:12 -0300 perf tools: Support '.*' dynamic sort key Support '*' character for field name to add all (non-common) fields as sort keys easily. $ perf report -s 'switch.*' --stdio ... # Overhead prev_comm prev_pid prev_prio prev_state next_comm next_pid next_prio # ........ ........... ......... ......... .......... ............ ........ ......... # 3.82% swapper/0 0 120 0 netctl-auto 18711 120 3.75% netctl-auto 18711 120 1 swapper/0 0 120 2.24% swapper/1 0 120 0 netctl-auto 18709 120 2.24% netctl-auto 18709 120 1 swapper/1 0 120 1.80% swapper/2 0 120 0 rcu_preempt 7 120 1.80% swapper/2 0 120 0 netctl-auto 18711 120 1.80% rcu_preempt 7 120 1 swapper/2 0 120 1.80% netctl-auto 18711 120 1 swapper/2 0 120 ... Suggested-and-acked-by: Jiri Olsa Signed-off-by: Namhyung Kim Tested-by: Arnaldo Carvalho de Melo Cc: Andi Kleen Cc: David Ahern Cc: Frederic Weisbecker Cc: Peter Zijlstra Cc: Steven Rostedt Cc: Wang Nan Link: http://lkml.kernel.org/r/1450804030-29193-11-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/sort.c | 49 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c index f3a98c2..f6aef15 100644 --- a/tools/perf/util/sort.c +++ b/tools/perf/util/sort.c @@ -1908,12 +1908,27 @@ static struct perf_evsel *find_evsel(struct perf_evlist *evlist, char *event_nam return evsel; } +static int __dynamic_dimension__add(struct perf_evsel *evsel, + struct format_field *field, + bool raw_trace) +{ + struct hpp_dynamic_entry *hde; + + hde = __alloc_dynamic_entry(evsel, field); + if (hde == NULL) + return -ENOMEM; + + hde->raw_trace = raw_trace; + + perf_hpp__register_sort_field(&hde->hpp); + return 0; +} + static int add_dynamic_entry(struct perf_evlist *evlist, const char *tok) { char *str, *event_name, *field_name, *opt_name; struct perf_evsel *evsel; struct format_field *field; - struct hpp_dynamic_entry *hde; bool raw_trace = symbol_conf.raw_trace; int ret = 0; @@ -1951,22 +1966,26 @@ static int add_dynamic_entry(struct perf_evlist *evlist, const char *tok) goto out; } - field = pevent_find_any_field(evsel->tp_format, field_name); - if (field == NULL) { - pr_debug("Cannot find event field for %s.%s\n", - event_name, field_name); - ret = -ENOENT; - goto out; - } + if (!strcmp(field_name, "*")) { + field = evsel->tp_format->format.fields; - hde = __alloc_dynamic_entry(evsel, field); - if (hde == NULL) { - ret = -ENOMEM; - goto out; - } - hde->raw_trace = raw_trace; + while (field) { + ret = __dynamic_dimension__add(evsel, field, raw_trace); + if (ret < 0) + goto out; - perf_hpp__register_sort_field(&hde->hpp); + field = field->next; + } + } else { + field = pevent_find_any_field(evsel->tp_format, field_name); + if (field == NULL) { + pr_debug("Cannot find event field for %s.%s\n", + event_name, field_name); + return -ENOENT; + } + + ret = __dynamic_dimension__add(evsel, field, raw_trace); + } out: free(str);