aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/perf_event.h
diff options
context:
space:
mode:
authorMatt Helsley <matthltc@us.ibm.com>2010-09-13 16:01:20 -0400
committerIngo Molnar <mingo@elte.hu>2010-09-15 04:44:00 -0400
commit38a81da2205f94e8a2a834b51a6b99c91fc7c2e8 (patch)
tree5227c665f37d1c472608a44aaad0a04be68befb2 /include/linux/perf_event.h
parent2ebd4ffb6d0cb877787b1e42be8485820158857e (diff)
perf events: Clean up pid passing
The kernel perf event creation path shouldn't use find_task_by_vpid() because a vpid exists in a specific namespace. find_task_by_vpid() uses current's pid namespace which isn't always the correct namespace to use for the vpid in all the places perf_event_create_kernel_counter() (and thus find_get_context()) is called. The goal is to clean up pid namespace handling and prevent bugs like: https://bugzilla.kernel.org/show_bug.cgi?id=17281 Instead of using pids switch find_get_context() to use task struct pointers directly. The syscall is responsible for resolving the pid to a task struct. This moves the pid namespace resolution into the syscall much like every other syscall that takes pid parameters. Signed-off-by: Matt Helsley <matthltc@us.ibm.com> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Robin Green <greenrd@greenrd.org> Cc: Prasad <prasad@linux.vnet.ibm.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Will Deacon <will.deacon@arm.com> Cc: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com> LKML-Reference: <a134e5e392ab0204961fd1a62c84a222bf5874a9.1284407763.git.matthltc@us.ibm.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux/perf_event.h')
-rw-r--r--include/linux/perf_event.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 93bf53aa50e5..39d8860b2684 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -902,7 +902,7 @@ extern int perf_event_release_kernel(struct perf_event *event);
902extern struct perf_event * 902extern struct perf_event *
903perf_event_create_kernel_counter(struct perf_event_attr *attr, 903perf_event_create_kernel_counter(struct perf_event_attr *attr,
904 int cpu, 904 int cpu,
905 pid_t pid, 905 struct task_struct *task,
906 perf_overflow_handler_t callback); 906 perf_overflow_handler_t callback);
907extern u64 perf_event_read_value(struct perf_event *event, 907extern u64 perf_event_read_value(struct perf_event *event,
908 u64 *enabled, u64 *running); 908 u64 *enabled, u64 *running);