Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c6be5a5c authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar
Browse files

perf: Find task before event alloc



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: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <20101014203625.340789919@chello.nl>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent e7d0bc04
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -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;
	}

	/*
@@ -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;
	}

	/*
@@ -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;