From: tip-bot for Davidlohr Bueso <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: acme@redhat.com, linux-kernel@vger.kernel.org, hpa@zytor.com,
mingo@kernel.org, peterz@infradead.org,
mitake@dcl.info.waseda.ac.jp, fweisbec@gmail.com,
tglx@linutronix.de, davidlohr@hp.com, aswin@hp.com
Subject: [tip:perf/core] perf lock: Redo __cmd_report
Date: Mon, 14 Oct 2013 22:24:29 -0700 [thread overview]
Message-ID: <tip-375eb2be5584b8182a917124ca217b74e43d2dc4@git.kernel.org> (raw)
In-Reply-To: <1378693159-8747-5-git-send-email-davidlohr@hp.com>
Commit-ID: 375eb2be5584b8182a917124ca217b74e43d2dc4
Gitweb: http://git.kernel.org/tip/375eb2be5584b8182a917124ca217b74e43d2dc4
Author: Davidlohr Bueso <davidlohr@hp.com>
AuthorDate: Sun, 8 Sep 2013 19:19:16 -0700
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 9 Oct 2013 11:23:48 -0300
perf lock: Redo __cmd_report
This function should be straightforward, and we can remove some trivial
logic by moving the functionality of read_events() into __cmd_report() -
thus allowing a new session to be properly deleted.
Since the 'info' subcommand also needs to process the recorded events,
add a 'display_info' flag to differentiate between report and info
commands.
Furthermore, this patch also calls perf_session__has_traces(), making
sure that we don't compare apples and oranges, fixing a segfault when
using an perf.data file generated by a different subcommand. ie:
./perf mem record sleep 1
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.017 MB perf.data (~724 samples) ]
./perf lock report
Segmentation fault (core dumped)
Signed-off-by: Davidlohr Bueso <davidlohr@hp.com>
Cc: Aswin Chandramouleeswaran <aswin@hp.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1378693159-8747-5-git-send-email-davidlohr@hp.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/builtin-lock.c | 68 +++++++++++++++++++++++++----------------------
1 file changed, 36 insertions(+), 32 deletions(-)
diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c
index 7784347..780484f 100644
--- a/tools/perf/builtin-lock.c
+++ b/tools/perf/builtin-lock.c
@@ -818,6 +818,18 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused,
return 0;
}
+static void sort_result(void)
+{
+ unsigned int i;
+ struct lock_stat *st;
+
+ for (i = 0; i < LOCKHASH_SIZE; i++) {
+ list_for_each_entry(st, &lockhash_table[i], hash_entry) {
+ insert_to_result(st, compare);
+ }
+ }
+}
+
static const struct perf_evsel_str_handler lock_tracepoints[] = {
{ "lock:lock_acquire", perf_evsel__process_lock_acquire, }, /* CONFIG_LOCKDEP */
{ "lock:lock_acquired", perf_evsel__process_lock_acquired, }, /* CONFIG_LOCKDEP, CONFIG_LOCK_STAT */
@@ -825,51 +837,47 @@ static const struct perf_evsel_str_handler lock_tracepoints[] = {
{ "lock:lock_release", perf_evsel__process_lock_release, }, /* CONFIG_LOCKDEP */
};
-static int read_events(void)
+static int __cmd_report(bool display_info)
{
+ int err = -EINVAL;
struct perf_tool eops = {
.sample = process_sample_event,
.comm = perf_event__process_comm,
.ordered_samples = true,
};
+
session = perf_session__new(input_name, O_RDONLY, 0, false, &eops);
if (!session) {
pr_err("Initializing perf session failed\n");
- return -1;
+ return -ENOMEM;
}
+ if (!perf_session__has_traces(session, "lock record"))
+ goto out_delete;
+
if (perf_session__set_tracepoints_handlers(session, lock_tracepoints)) {
pr_err("Initializing perf session tracepoint handlers failed\n");
- return -1;
+ goto out_delete;
}
- return perf_session__process_events(session, &eops);
-}
+ if (select_key())
+ goto out_delete;
-static void sort_result(void)
-{
- unsigned int i;
- struct lock_stat *st;
-
- for (i = 0; i < LOCKHASH_SIZE; i++) {
- list_for_each_entry(st, &lockhash_table[i], hash_entry) {
- insert_to_result(st, compare);
- }
- }
-}
+ err = perf_session__process_events(session, &eops);
+ if (err)
+ goto out_delete;
-static int __cmd_report(void)
-{
setup_pager();
+ if (display_info) /* used for info subcommand */
+ err = dump_info();
+ else {
+ sort_result();
+ print_result();
+ }
- if ((select_key() != 0) ||
- (read_events() != 0))
- return -1;
-
- sort_result();
- print_result();
-
- return 0;
+out_delete:
+ perf_session__delete(session);
+ return err;
}
static int __cmd_record(int argc, const char **argv)
@@ -970,7 +978,7 @@ int cmd_lock(int argc, const char **argv, const char *prefix __maybe_unused)
if (argc)
usage_with_options(report_usage, report_options);
}
- __cmd_report();
+ rc = __cmd_report(false);
} else if (!strcmp(argv[0], "script")) {
/* Aliased to 'perf script' */
return cmd_script(argc, argv, prefix);
@@ -983,11 +991,7 @@ int cmd_lock(int argc, const char **argv, const char *prefix __maybe_unused)
}
/* recycling report_lock_ops */
trace_handler = &report_lock_ops;
- setup_pager();
- if (read_events() != 0)
- rc = -1;
- else
- rc = dump_info();
+ rc = __cmd_report(true);
} else {
usage_with_options(lock_usage, lock_options);
}
next prev parent reply other threads:[~2013-10-15 5:45 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-09 2:19 [PATCH 0/7] perf lock: misc fixes and enhancements Davidlohr Bueso
2013-09-09 2:19 ` [PATCH 1/7] perf lock: remove dead code Davidlohr Bueso
2013-10-15 5:24 ` [tip:perf/core] perf lock: Remove " tip-bot for Davidlohr Bueso
2013-09-09 2:19 ` [PATCH 2/7] perf lock: return proper code in report_lock_*_event Davidlohr Bueso
2013-10-15 5:24 ` [tip:perf/core] perf lock: Return " tip-bot for Davidlohr Bueso
2013-09-09 2:19 ` [PATCH 3/7] perf lock: plug some memleaks Davidlohr Bueso
2013-09-09 3:01 ` Ramkumar Ramachandra
2013-09-18 17:39 ` Hitoshi Mitake
2013-10-15 5:24 ` [tip:perf/core] perf lock: Plug " tip-bot for Davidlohr Bueso
2013-09-09 2:19 ` [PATCH 4/7] perf lock: redo __cmd_report Davidlohr Bueso
2013-10-15 5:24 ` tip-bot for Davidlohr Bueso [this message]
2013-09-09 2:19 ` [PATCH 5/7] perf lock: do not cut lock name Davidlohr Bueso
2013-09-18 17:38 ` Hitoshi Mitake
2013-09-09 2:19 ` [PATCH 6/7] perf lock: limit bad rate precision Davidlohr Bueso
2013-10-15 5:24 ` [tip:perf/core] perf lock: Limit " tip-bot for Davidlohr Bueso
2013-09-09 2:19 ` [PATCH 7/7] perf lock: account for lock average wait time Davidlohr Bueso
2013-10-15 5:24 ` [tip:perf/core] perf lock: Account " tip-bot for Davidlohr Bueso
2013-09-19 19:00 ` [PATCH 0/7] perf lock: misc fixes and enhancements Arnaldo Carvalho de Melo
2013-09-20 3:24 ` Davidlohr Bueso
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-375eb2be5584b8182a917124ca217b74e43d2dc4@git.kernel.org \
--to=tipbot@zytor.com \
--cc=acme@redhat.com \
--cc=aswin@hp.com \
--cc=davidlohr@hp.com \
--cc=fweisbec@gmail.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=mitake@dcl.info.waseda.ac.jp \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.