Skip to content

Commit

Permalink
perf: Find task before event alloc
Browse files Browse the repository at this point in the history
So that we can pass the task pointer to the event allocation, so that
we can use task associated data during event initialization.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <20101014203625.340789919@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Peter Zijlstra authored and Ingo Molnar committed Oct 18, 2010
1 parent e7d0bc0 commit c6be5a5
Showing 1 changed file with 12 additions and 11 deletions.
23 changes: 12 additions & 11 deletions kernel/perf_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -5551,10 +5551,18 @@ SYSCALL_DEFINE5(perf_event_open,
group_leader = NULL;
}

if (pid != -1) {
task = find_lively_task_by_vpid(pid);
if (IS_ERR(task)) {
err = PTR_ERR(task);
goto err_group_fd;
}
}

event = perf_event_alloc(&attr, cpu, group_leader, NULL, NULL);
if (IS_ERR(event)) {
err = PTR_ERR(event);
goto err_fd;
goto err_task;
}

/*
Expand Down Expand Up @@ -5586,21 +5594,13 @@ SYSCALL_DEFINE5(perf_event_open,
}
}

if (pid != -1) {
task = find_lively_task_by_vpid(pid);
if (IS_ERR(task)) {
err = PTR_ERR(task);
goto err_group_fd;
}
}

/*
* Get the target context (task or percpu):
*/
ctx = find_get_context(pmu, task, cpu);
if (IS_ERR(ctx)) {
err = PTR_ERR(ctx);
goto err_task;
goto err_alloc;
}

/*
Expand Down Expand Up @@ -5696,12 +5696,13 @@ SYSCALL_DEFINE5(perf_event_open,

err_context:
put_ctx(ctx);
err_alloc:
free_event(event);
err_task:
if (task)
put_task_struct(task);
err_group_fd:
fput_light(group_file, fput_needed);
free_event(event);
err_fd:
put_unused_fd(event_fd);
return err;
Expand Down

0 comments on commit c6be5a5

Please sign in to comment.