diff options
author | Matt Helsley <matthltc@us.ibm.com> | 2010-09-13 16:01:20 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2010-09-15 04:44:00 -0400 |
commit | 38a81da2205f94e8a2a834b51a6b99c91fc7c2e8 (patch) | |
tree | 5227c665f37d1c472608a44aaad0a04be68befb2 /include/linux/perf_event.h | |
parent | 2ebd4ffb6d0cb877787b1e42be8485820158857e (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.h | 2 |
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); | |||
902 | extern struct perf_event * | 902 | extern struct perf_event * |
903 | perf_event_create_kernel_counter(struct perf_event_attr *attr, | 903 | perf_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); |
907 | extern u64 perf_event_read_value(struct perf_event *event, | 907 | extern u64 perf_event_read_value(struct perf_event *event, |
908 | u64 *enabled, u64 *running); | 908 | u64 *enabled, u64 *running); |