summaryrefslogtreecommitdiff
path: root/tools/perf/util/db-export.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2015-05-09 08:10:36 +0200
committerIngo Molnar <mingo@kernel.org>2015-05-09 08:10:36 +0200
commit32b0ed3ae66cd6114f8510161f833f05518c0395 (patch)
treef251ef653105de7fa02f0212c30a40e967fa339f /tools/perf/util/db-export.c
parentcb307113746b4d184155d2c412e8069aeaa60d42 (diff)
parent76d408498b08447e0f61dfdd611aeb6e8e61ce80 (diff)
downloadlinux-32b0ed3ae66cd6114f8510161f833f05518c0395.tar.gz
linux-32b0ed3ae66cd6114f8510161f833f05518c0395.tar.bz2
linux-32b0ed3ae66cd6114f8510161f833f05518c0395.zip
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo: User visible changes: - 'perf probe' improvements: (Masami Hiramatsu) - Support glob wildcards for function name - Support $params special probe argument: Collect all function arguments - Make --line checks validate C-style function name. - Add --no-inlines option to avoid searching inline functions - Introduce new 'perf bench futex' benchmark: 'wake-parallel', to measure parallel waker threads generating contention for kernel locks (hb->lock). (Davidlohr Bueso) Bug fixes: - Improve 'perf top' to survive much longer on high core count machines, more work needed to refcount more data structures besides 'struct thread' and fix more races. (Arnaldo Carvalho de Melo) Infrastructure changes: - Move barrier.h mb/rmb/wmb API from tools/perf/ to kernel like tools/arch/ hierarchy. (Arnaldo Carvalho de Melo) - Borrow atomic.h from the kernel, initially the x86 implementations with a fallback to gcc intrinsics for the other arches, all the kernel like framework in place for doing arch specific implementations, preferrably cloning what is in the kernel to the greater extent possible. (Arnaldo Carvalho de Melo) - Protect the 'struct thread' lifetime with a reference counter, and protect data structures that contains its instances with a mutex. (Arnaldo Carvalho de Melo - Disable libdw DWARF unwind when built with NO_DWARF (Naveen N. Rao) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/util/db-export.c')
-rw-r--r--tools/perf/util/db-export.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/tools/perf/util/db-export.c b/tools/perf/util/db-export.c
index bb39a3ffc70b..eb7a2acb973b 100644
--- a/tools/perf/util/db-export.c
+++ b/tools/perf/util/db-export.c
@@ -122,6 +122,7 @@ int db_export__machine(struct db_export *dbe, struct machine *machine)
int db_export__thread(struct db_export *dbe, struct thread *thread,
struct machine *machine, struct comm *comm)
{
+ struct thread *main_thread;
u64 main_thread_db_id = 0;
int err;
@@ -131,8 +132,6 @@ int db_export__thread(struct db_export *dbe, struct thread *thread,
thread->db_id = ++dbe->thread_last_db_id;
if (thread->pid_ != -1) {
- struct thread *main_thread;
-
if (thread->pid_ == thread->tid) {
main_thread = thread;
} else {
@@ -144,14 +143,16 @@ int db_export__thread(struct db_export *dbe, struct thread *thread,
err = db_export__thread(dbe, main_thread, machine,
comm);
if (err)
- return err;
+ goto out_put;
if (comm) {
err = db_export__comm_thread(dbe, comm, thread);
if (err)
- return err;
+ goto out_put;
}
}
main_thread_db_id = main_thread->db_id;
+ if (main_thread != thread)
+ thread__put(main_thread);
}
if (dbe->export_thread)
@@ -159,6 +160,10 @@ int db_export__thread(struct db_export *dbe, struct thread *thread,
machine);
return 0;
+
+out_put:
+ thread__put(main_thread);
+ return err;
}
int db_export__comm(struct db_export *dbe, struct comm *comm,
@@ -303,6 +308,7 @@ int db_export__sample(struct db_export *dbe, union perf_event *event,
if (err)
return err;
+ /* FIXME: check refcounting for get_main_thread, that calls machine__find_thread... */
main_thread = get_main_thread(al->machine, thread);
if (main_thread)
comm = machine__thread_exec_comm(al->machine, main_thread);