mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
perf: Do the comm inheritance per thread in event__process_task
event__process_task() doesn't propagate the comm copy on clone, but only on process fork. So we loose all the tid:comm resolution for tasks that aren't a main process thread. Progragate the per thread granularity to event__process_task for pid resolution. This fixes various unresolved pids in perf sched, especially when we trace multithread processes. The problem is quickly reproducible with the messaging benchmark using the multithread mode "-t" : perf sched record perf bench sched messaging -t Signed-off-by: Frederic Weisbecker <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Arnaldo Carvalho de Melo <[email protected]> Cc: Paul Mackerras <[email protected]> Cc: Tom Zanussi <[email protected]> Cc: Stephane Eranian <[email protected]>
This commit is contained in:
parent
af64865ba6
commit
dd833d713c
1 changed files with 2 additions and 7 deletions
|
|
@ -532,16 +532,11 @@ out_problem:
|
|||
|
||||
int event__process_task(event_t *self, struct perf_session *session)
|
||||
{
|
||||
struct thread *thread = perf_session__findnew(session, self->fork.pid);
|
||||
struct thread *parent = perf_session__findnew(session, self->fork.ppid);
|
||||
struct thread *thread = perf_session__findnew(session, self->fork.tid);
|
||||
struct thread *parent = perf_session__findnew(session, self->fork.ptid);
|
||||
|
||||
dump_printf("(%d:%d):(%d:%d)\n", self->fork.pid, self->fork.tid,
|
||||
self->fork.ppid, self->fork.ptid);
|
||||
/*
|
||||
* A thread clone will have the same PID for both parent and child.
|
||||
*/
|
||||
if (thread == parent)
|
||||
return 0;
|
||||
|
||||
if (self->header.type == PERF_RECORD_EXIT)
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue