From: tip-bot for Adrian Hunter <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: acme@redhat.com, linux-kernel@vger.kernel.org,
eranian@google.com, paulus@samba.org, hpa@zytor.com,
mingo@kernel.org, peterz@infradead.org, namhyung@gmail.com,
jolsa@redhat.com, fweisbec@gmail.com, adrian.hunter@intel.com,
dsahern@gmail.com, tglx@linutronix.de
Subject: [tip:perf/core] perf machine: Fix the value used for unknown pids
Date: Thu, 17 Jul 2014 21:23:15 -0700 [thread overview]
Message-ID: <tip-1fcb8768636d38cb6fdfeef83a5ee596c4bd9c56@git.kernel.org> (raw)
In-Reply-To: <1405332185-4050-2-git-send-email-adrian.hunter@intel.com>
Commit-ID: 1fcb8768636d38cb6fdfeef83a5ee596c4bd9c56
Gitweb: http://git.kernel.org/tip/1fcb8768636d38cb6fdfeef83a5ee596c4bd9c56
Author: Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Mon, 14 Jul 2014 13:02:25 +0300
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 16 Jul 2014 17:57:33 -0300
perf machine: Fix the value used for unknown pids
The value used for unknown pids cannot be zero because that is used by
the "idle" task.
Use -1 instead. Also handle the unknown pid case when creating map
groups.
Note that, threads with an unknown pid should not occur because fork (or
synthesized) events precede the thread's existence.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1405332185-4050-2-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/builtin-sched.c | 12 ++++++------
tools/perf/util/machine.c | 6 +++---
tools/perf/util/session.c | 5 +++--
tools/perf/util/thread.c | 2 +-
4 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
index c38d06c..b7f555a 100644
--- a/tools/perf/builtin-sched.c
+++ b/tools/perf/builtin-sched.c
@@ -935,8 +935,8 @@ static int latency_switch_event(struct perf_sched *sched,
return -1;
}
- sched_out = machine__findnew_thread(machine, 0, prev_pid);
- sched_in = machine__findnew_thread(machine, 0, next_pid);
+ sched_out = machine__findnew_thread(machine, -1, prev_pid);
+ sched_in = machine__findnew_thread(machine, -1, next_pid);
out_events = thread_atoms_search(&sched->atom_root, sched_out, &sched->cmp_pid);
if (!out_events) {
@@ -979,7 +979,7 @@ static int latency_runtime_event(struct perf_sched *sched,
{
const u32 pid = perf_evsel__intval(evsel, sample, "pid");
const u64 runtime = perf_evsel__intval(evsel, sample, "runtime");
- struct thread *thread = machine__findnew_thread(machine, 0, pid);
+ struct thread *thread = machine__findnew_thread(machine, -1, pid);
struct work_atoms *atoms = thread_atoms_search(&sched->atom_root, thread, &sched->cmp_pid);
u64 timestamp = sample->time;
int cpu = sample->cpu;
@@ -1012,7 +1012,7 @@ static int latency_wakeup_event(struct perf_sched *sched,
struct thread *wakee;
u64 timestamp = sample->time;
- wakee = machine__findnew_thread(machine, 0, pid);
+ wakee = machine__findnew_thread(machine, -1, pid);
atoms = thread_atoms_search(&sched->atom_root, wakee, &sched->cmp_pid);
if (!atoms) {
if (thread_atoms_insert(sched, wakee))
@@ -1072,7 +1072,7 @@ static int latency_migrate_task_event(struct perf_sched *sched,
if (sched->profile_cpu == -1)
return 0;
- migrant = machine__findnew_thread(machine, 0, pid);
+ migrant = machine__findnew_thread(machine, -1, pid);
atoms = thread_atoms_search(&sched->atom_root, migrant, &sched->cmp_pid);
if (!atoms) {
if (thread_atoms_insert(sched, migrant))
@@ -1290,7 +1290,7 @@ static int map_switch_event(struct perf_sched *sched, struct perf_evsel *evsel,
return -1;
}
- sched_in = machine__findnew_thread(machine, 0, next_pid);
+ sched_in = machine__findnew_thread(machine, -1, next_pid);
sched->curr_thread[this_cpu] = sched_in;
diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index e9b943a..5b80877 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -34,7 +34,7 @@ int machine__init(struct machine *machine, const char *root_dir, pid_t pid)
return -ENOMEM;
if (pid != HOST_KERNEL_ID) {
- struct thread *thread = machine__findnew_thread(machine, 0,
+ struct thread *thread = machine__findnew_thread(machine, -1,
pid);
char comm[64];
@@ -286,7 +286,7 @@ static struct thread *__machine__findnew_thread(struct machine *machine,
* the full rbtree:
*/
if (machine->last_match && machine->last_match->tid == tid) {
- if (pid && pid != machine->last_match->pid_)
+ if (pid != -1 && pid != machine->last_match->pid_)
machine->last_match->pid_ = pid;
return machine->last_match;
}
@@ -297,7 +297,7 @@ static struct thread *__machine__findnew_thread(struct machine *machine,
if (th->tid == tid) {
machine->last_match = th;
- if (pid && pid != th->pid_)
+ if (pid != -1 && pid != th->pid_)
th->pid_ = pid;
return th;
}
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 64a186e..c2f4ca9 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -1083,13 +1083,14 @@ void perf_event_header__bswap(struct perf_event_header *hdr)
struct thread *perf_session__findnew(struct perf_session *session, pid_t pid)
{
- return machine__findnew_thread(&session->machines.host, 0, pid);
+ return machine__findnew_thread(&session->machines.host, -1, pid);
}
static struct thread *perf_session__register_idle_thread(struct perf_session *session)
{
- struct thread *thread = perf_session__findnew(session, 0);
+ struct thread *thread;
+ thread = machine__findnew_thread(&session->machines.host, 0, 0);
if (thread == NULL || thread__set_comm(thread, "swapper", 0)) {
pr_err("problem inserting idle task.\n");
thread = NULL;
diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c
index 2fde0d5..7a32f44 100644
--- a/tools/perf/util/thread.c
+++ b/tools/perf/util/thread.c
@@ -13,7 +13,7 @@ int thread__init_map_groups(struct thread *thread, struct machine *machine)
struct thread *leader;
pid_t pid = thread->pid_;
- if (pid == thread->tid) {
+ if (pid == thread->tid || pid == -1) {
thread->mg = map_groups__new();
} else {
leader = machine__findnew_thread(machine, pid, pid);
next prev parent reply other threads:[~2014-07-18 4:24 UTC|newest]
Thread overview: 122+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-14 10:02 [PATCH 00/41] perf tools: Preparation for call graph from Intel BTS Adrian Hunter
2014-07-14 10:02 ` [PATCH 01/41] perf tools: Fix the value used for unknown pids Adrian Hunter
2014-07-18 4:23 ` tip-bot for Adrian Hunter [this message]
2014-07-14 10:02 ` [PATCH 02/41] perf tools: Fix map groups of threads with " Adrian Hunter
2014-07-14 20:18 ` Arnaldo Carvalho de Melo
2014-07-15 11:33 ` Adrian Hunter
2014-07-15 19:33 ` Arnaldo Carvalho de Melo
2014-07-16 8:07 ` [PATCH V2 " Adrian Hunter
2014-07-18 4:26 ` [tip:perf/core] perf machine: " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 03/41] perf script: Display PERF_RECORD_MISC_COMM_EXEC flag Adrian Hunter
2014-07-18 4:23 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 04/41] perf record: Select comm_exec flag if supported Adrian Hunter
2014-07-18 4:23 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 05/41] perf tools: Identify which comms are from exec Adrian Hunter
2014-07-14 20:32 ` Arnaldo Carvalho de Melo
2014-07-15 11:43 ` Adrian Hunter
2014-07-23 14:07 ` Arnaldo Carvalho de Melo
2014-07-23 14:09 ` Arnaldo Carvalho de Melo
2014-07-23 16:46 ` Adrian Hunter
2014-07-23 16:53 ` Arnaldo Carvalho de Melo
2014-07-14 10:02 ` [PATCH 06/41] perf tools: Add machine__thread_exec_comm() Adrian Hunter
2014-07-14 10:02 ` [PATCH 07/41] perf tools: Fix missing kernel map load Adrian Hunter
2014-07-18 4:23 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 08/41] perf tools: Fix missing label symbols Adrian Hunter
2014-07-14 20:38 ` Arnaldo Carvalho de Melo
2014-07-15 12:11 ` Adrian Hunter
2014-07-14 10:02 ` [PATCH 09/41] perf tools: Fix missing GNU IFUNC symbols Adrian Hunter
2014-07-18 4:24 ` [tip:perf/core] perf symbols: " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 10/41] perf inject: Fix build id injection Adrian Hunter
2014-07-18 4:24 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 11/41] perf tools: Fix appending a callchain from a previous sample Adrian Hunter
2014-07-18 4:24 ` [tip:perf/core] perf callchain: " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 12/41] perf tools: Fix leak of 'struct thread' on error path Adrian Hunter
2014-07-14 20:43 ` Arnaldo Carvalho de Melo
2014-07-16 7:19 ` [PATCH V2 0/2] perf tools: Allow deletion of a thread with no map groups Adrian Hunter
2014-07-16 7:19 ` [PATCH 1/2] " Adrian Hunter
2014-07-18 4:27 ` [tip:perf/core] perf thread: " tip-bot for Adrian Hunter
2014-07-16 7:19 ` [PATCH V2 2/2] perf tools: Fix leak of 'struct thread' on error path Adrian Hunter
2014-07-18 4:27 ` [tip:perf/core] perf machine: " tip-bot for Adrian Hunter
2014-07-16 14:02 ` [PATCH 12/41] perf tools: " Jiri Olsa
2014-07-16 14:26 ` Adrian Hunter
2014-07-14 10:02 ` [PATCH 13/41] perf tools: Add machine__kernel_ip() Adrian Hunter
2014-07-16 14:15 ` Jiri Olsa
2014-07-16 14:22 ` Adrian Hunter
2014-08-11 12:23 ` Jiri Olsa
2014-08-11 12:36 ` Adrian Hunter
2014-08-11 12:43 ` Jiri Olsa
2014-08-11 12:46 ` Adrian Hunter
2014-08-11 12:55 ` Jiri Olsa
2014-07-14 10:02 ` [PATCH 14/41] perf buildid-cache: Apply force option to copying kcore Adrian Hunter
2014-07-18 4:24 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 15/41] perf script: Improve srcline display for BTS Adrian Hunter
2014-07-15 14:16 ` Arnaldo Carvalho de Melo
2014-07-15 17:51 ` Adrian Hunter
2014-07-16 2:08 ` David Ahern
2014-07-14 10:02 ` [PATCH 16/41] perf script: Do not print dangling '=>' " Adrian Hunter
2014-07-14 10:02 ` [PATCH 17/41] perf tools: Record whether a dso is 64-bit Adrian Hunter
2014-07-18 4:24 ` [tip:perf/core] perf symbols: " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 18/41] perf tools: Record whether a dso has data Adrian Hunter
2014-07-16 14:20 ` Jiri Olsa
2014-07-17 8:43 ` [PATCH 0/2] perf tools: Fix incorrect fd error comparison Adrian Hunter
2014-07-17 8:43 ` [PATCH 1/2] " Adrian Hunter
2014-07-22 7:51 ` Jiri Olsa
2014-07-28 8:21 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-17 8:43 ` [PATCH V2 2/2] perf tools: Record whether a dso has data Adrian Hunter
2014-07-17 8:58 ` [PATCH V3] " Adrian Hunter
2014-07-22 7:55 ` Jiri Olsa
2014-07-22 13:24 ` Adrian Hunter
2014-07-14 10:02 ` [PATCH 19/41] perf tools: Do not attempt to read data from kallsyms Adrian Hunter
2014-07-18 4:25 ` [tip:perf/core] perf symbols: " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 20/41] perf tools: Let a user specify a PMU event without any config terms Adrian Hunter
2014-07-16 14:25 ` Jiri Olsa
2014-07-16 15:04 ` Adrian Hunter
2014-07-16 18:22 ` Jiri Olsa
2014-08-29 18:48 ` Adrian Hunter
2014-08-30 8:53 ` Jiri Olsa
2014-09-01 6:27 ` Adrian Hunter
2014-09-01 19:11 ` Jiri Olsa
2014-09-02 5:39 ` Adrian Hunter
2014-09-02 9:17 ` Jiri Olsa
2014-09-01 15:51 ` Arnaldo Carvalho de Melo
2014-09-01 19:15 ` Jiri Olsa
2014-07-14 10:02 ` [PATCH 21/41] perf tools: Let default config be defined for a PMU Adrian Hunter
2014-07-14 10:02 ` [PATCH 22/41] perf tools: Add perf_pmu__scan_file() Adrian Hunter
2014-07-14 10:02 ` [PATCH 23/41] perf tools: Add dsos__hit_all() Adrian Hunter
2014-07-14 10:02 ` [PATCH 24/41] perf tools: Add cpu to struct thread Adrian Hunter
2014-07-15 14:24 ` Arnaldo Carvalho de Melo
2014-07-15 17:58 ` Adrian Hunter
2014-07-14 10:02 ` [PATCH 25/41] perf tools: Add ability to record the current tid for each cpu Adrian Hunter
2014-07-14 10:02 ` [PATCH 26/41] perf tools: Add ability to iterate over a dso's symbols Adrian Hunter
2014-07-18 4:25 ` [tip:perf/core] perf symbols: Add ability to iterate over a dso' s symbols tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 27/41] perf session: Flag if the event stream is entirely in memory Adrian Hunter
2014-07-18 4:25 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 28/41] perf evlist: Pass mmap parameters in a struct Adrian Hunter
2014-07-18 4:25 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 29/41] perf tools: Add feature test for __sync_val_compare_and_swap Adrian Hunter
2014-07-18 4:26 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 30/41] perf tools: Add option macro OPT_CALLBACK_OPTARG Adrian Hunter
2014-07-18 4:26 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 31/41] perf evlist: Add perf_evlist__set_tracking_event() Adrian Hunter
2014-07-14 10:02 ` [PATCH 32/41] perf evsel: Add 'no_aux_samples' option Adrian Hunter
2014-07-18 4:26 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 33/41] perf evsel: Add 'immediate' option Adrian Hunter
2014-07-18 4:26 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 34/41] perf evlist: Add 'system_wide' option Adrian Hunter
2014-07-15 15:03 ` Arnaldo Carvalho de Melo
2014-07-15 18:05 ` Adrian Hunter
2014-08-11 13:12 ` Jiri Olsa
2014-08-12 5:52 ` Adrian Hunter
2014-07-14 10:02 ` [PATCH 35/41] perf tools: Add id index Adrian Hunter
2014-07-14 10:03 ` [PATCH 36/41] perf pmu: Let pmu's with no events show up on perf list Adrian Hunter
2014-07-14 10:03 ` [PATCH 37/41] perf session: Add ability to skip 4GiB or more Adrian Hunter
2014-07-14 10:03 ` [PATCH 38/41] perf session: Add perf_session__deliver_synth_event() Adrian Hunter
2014-07-15 15:17 ` Arnaldo Carvalho de Melo
2014-07-15 18:32 ` Adrian Hunter
2014-07-14 10:03 ` [PATCH 39/41] perf tools: Allow TSC conversion on any arch Adrian Hunter
2014-07-15 15:20 ` Arnaldo Carvalho de Melo
2014-07-15 16:17 ` Peter Zijlstra
2014-07-15 17:48 ` Adrian Hunter
2014-07-18 4:28 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:03 ` [PATCH 40/41] perf tools: Move rdtsc() function Adrian Hunter
2014-07-14 10:03 ` [PATCH 41/41] perf evlist: Add perf_evlist__enable_event_idx() Adrian Hunter
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-1fcb8768636d38cb6fdfeef83a5ee596c4bd9c56@git.kernel.org \
--to=tipbot@zytor.com \
--cc=acme@redhat.com \
--cc=adrian.hunter@intel.com \
--cc=dsahern@gmail.com \
--cc=eranian@google.com \
--cc=fweisbec@gmail.com \
--cc=hpa@zytor.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@gmail.com \
--cc=paulus@samba.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).