projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
4b4969b
)
perf: Avoid race between cpu hotplug and installing event
author
Yan, Zheng
<
[email protected]
>
Fri, 15 Jun 2012 06:31:31 +0000
(14:31 +0800)
committer
Ingo Molnar
<
[email protected]
>
Mon, 18 Jun 2012 10:13:20 +0000
(12:13 +0200)
perf_event_open() requires the cpu on which to install event is online,
but the cpu can go offline after perf_event_open checks that. Add a
get_online_cpus()/put_online_cpus() pair to avoid the race.
Signed-off-by: Zheng Yan <
[email protected]
>
Signed-off-by: Peter Zijlstra <
[email protected]
>
Link:
http://lkml.kernel.org/r/
[email protected]
Signed-off-by: Ingo Molnar <
[email protected]
>
kernel/events/core.c
patch
|
blob
|
history
diff --git
a/kernel/events/core.c
b/kernel/events/core.c
index d7d71d6ec97278cf60fa5b13e79a80bff27b6af2..31d182e0154983d1e6b167fe481c5dd76467d646 100644
(file)
--- a/
kernel/events/core.c
+++ b/
kernel/events/core.c
@@
-6252,6
+6252,8
@@
SYSCALL_DEFINE5(perf_event_open,
}
}
+ get_online_cpus();
+
event = perf_event_alloc(&attr, cpu, task, group_leader, NULL,
NULL, NULL);
if (IS_ERR(event)) {
@@
-6391,6
+6393,8
@@
SYSCALL_DEFINE5(perf_event_open,
perf_unpin_context(ctx);
mutex_unlock(&ctx->mutex);
+ put_online_cpus();
+
event->owner = current;
mutex_lock(¤t->perf_event_mutex);
@@
-6419,6
+6423,7
@@
err_context:
err_alloc:
free_event(event);
err_task:
+ put_online_cpus();
if (task)
put_task_struct(task);
err_group_fd: