Messages in this thread Patch in this message | | | From | "Yan, Zheng" <> | Subject | [PATCH 02/10] perf: Avoid race between cpu hotplug and installing event | Date | Wed, 16 May 2012 12:59:55 +0800 |
| |
From: "Yan, Zheng" <zheng.z.yan@intel.com>
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 get_online_cpus()/put_online_cpus() pair to avoid the race.
Signed-off-by: Zheng Yan <zheng.z.yan@intel.com> --- kernel/events/core.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/kernel/events/core.c b/kernel/events/core.c index 91a4459..9fdf394 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -6255,6 +6255,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)) { @@ -6394,6 +6396,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); @@ -6422,6 +6426,7 @@ SYSCALL_DEFINE5(perf_event_open, err_alloc: free_event(event); err_task: + put_online_cpus(); if (task) put_task_struct(task); err_group_fd: -- 1.7.7.6
| |