perf_event_pid: don't report zero pids for exiting tasks
PATCH 1/1 perf_event_pid: don't report zero pids for exiting tasks
The exiting/dead task has no pids and in this case perf_event_pid/tid return zero, change them to return -1 to distinguish this case from idle threads.
Signed-off-by Oleg Nesterov <[email protected]>
--- kernel/events/core.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-)
kernel/events/core.c +14 -9
@@ -1249,26 +1249,31 @@ unclone_ctx(struct perf_event_context *ctx)return parent_ctx; } -static u32 perf_event_pid (struct perf_event *event,struct task_struct *p) +static u32 perf_event_pid_type (struct perf_event *event,struct task_struct *p, +enum pid_type type) { +u32 nr;/* * only top level events have the pid namespace they were created in */ if (event->parent) event = event->parent; -return task_tgid_nr_ns (p, event->ns); + nr =__task_pid_nr_ns (p, type, event->ns); +/* avoid -1 if it is idle thread or runs in another ns */ +if (!nr && !pid_alive (p)) + nr =-1 ; +return nr; } -static u32 perf_event_tid (struct perf_event *event,struct task_struct *p) +static u32 perf_event_pid (struct perf_event *event,struct task_struct *p) { -/* -* only top level events have the pid namespace they were created in -*/ -if (event->parent) - event = event->parent; +return perf_event_pid_type (event, p, __PIDTYPE_TGID); +} -return task_pid_nr_ns (p, event->ns); +static u32 perf_event_tid (struct perf_event *event,struct task_struct *p) +{ +return perf_event_pid_type (event, p,PIDTYPE_PID ); }/*
Signature · 1 line
2.5.0
tip-bot for Oleg Nesterov
merge bot[tip:perf/core] perf/core: Don't report zero PIDs for exiting tasks
perf/core: Don't report zero PIDs for exiting tasks
Commit-ID: 1d953111b648e48923171c3c9cf17be2250544fa Gitweb: http://git.kernel.org/tip/1d953111b648e48923171c3c9cf17be2250544fa Author: Oleg Nesterov <[email protected]> AuthorDate: Tue, 22 Aug 2017 17:59:28 +0200 Committer: Ingo Molnar <[email protected]> CommitDate: Fri, 25 Aug 2017 11:04:17 +0200
perf/core: Don't report zero PIDs for exiting tasks
The exiting/dead task has no PIDs and in this case perf_event_pid/tid() return zero, change them to return -1 to distinguish this case from idle threads.
Signed-off-by Oleg Nesterov <[email protected]>
Signed-off-by Peter Zijlstra (Intel) <[email protected]>
Cc Arnaldo Carvalho <[email protected]>
Cc Linus Torvalds <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc Thomas Gleixner <[email protected]>
Signed-off-by Ingo Molnar <[email protected]>
--- kernel/events/core.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-)
kernel/events/core.c +14 -9
@@ -1249,26 +1249,31 @@ unclone_ctx(struct perf_event_context *ctx)return parent_ctx; } -static u32 perf_event_pid (struct perf_event *event,struct task_struct *p) +static u32 perf_event_pid_type (struct perf_event *event,struct task_struct *p, +enum pid_type type) { +u32 nr;/* * only top level events have the pid namespace they were created in */ if (event->parent) event = event->parent; -return task_tgid_nr_ns (p, event->ns); + nr =__task_pid_nr_ns (p, type, event->ns); +/* avoid -1 if it is idle thread or runs in another ns */ +if (!nr && !pid_alive (p)) + nr =-1 ; +return nr; } -static u32 perf_event_tid (struct perf_event *event,struct task_struct *p) +static u32 perf_event_pid (struct perf_event *event,struct task_struct *p) { -/* -* only top level events have the pid namespace they were created in -*/ -if (event->parent) - event = event->parent; +return perf_event_pid_type (event, p, __PIDTYPE_TGID); +} -return task_pid_nr_ns (p, event->ns); +static u32 perf_event_tid (struct perf_event *event,struct task_struct *p) +{ +return perf_event_pid_type (event, p,PIDTYPE_PID ); }/*