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

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

perf_counter: Push inherit into perf_counter_alloc()



Teach perf_counter_alloc() about inheritance so that we can
optimize the inherit path in the next patch.

Remove the child_counter->atrr.inherit = 1 line because the
only way to get there is if parent_counter->attr.inherit == 1
and we copy the attrs.

Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
LKML-Reference: <new-submission>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent f29ac756
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -3568,6 +3568,7 @@ perf_counter_alloc(struct perf_counter_attr *attr,
		   int cpu,
		   struct perf_counter_context *ctx,
		   struct perf_counter *group_leader,
		   struct perf_counter *parent_counter,
		   gfp_t gfpflags)
{
	const struct pmu *pmu;
@@ -3603,6 +3604,8 @@ perf_counter_alloc(struct perf_counter_attr *attr,
	counter->ctx		= ctx;
	counter->oncpu		= -1;

	counter->parent		= parent_counter;

	counter->ns		= get_pid_ns(current->nsproxy->pid_ns);
	counter->id		= atomic64_inc_return(&perf_counter_id);

@@ -3827,7 +3830,7 @@ SYSCALL_DEFINE5(perf_counter_open,
	}

	counter = perf_counter_alloc(&attr, cpu, ctx, group_leader,
				     GFP_KERNEL);
				     NULL, GFP_KERNEL);
	ret = PTR_ERR(counter);
	if (IS_ERR(counter))
		goto err_put_context;
@@ -3893,7 +3896,8 @@ inherit_counter(struct perf_counter *parent_counter,

	child_counter = perf_counter_alloc(&parent_counter->attr,
					   parent_counter->cpu, child_ctx,
					   group_leader, GFP_KERNEL);
					   group_leader, parent_counter,
					   GFP_KERNEL);
	if (IS_ERR(child_counter))
		return child_counter;
	get_ctx(child_ctx);
@@ -3916,12 +3920,6 @@ inherit_counter(struct perf_counter *parent_counter,
	 */
	add_counter_to_ctx(child_counter, child_ctx);

	child_counter->parent = parent_counter;
	/*
	 * inherit into child's child as well:
	 */
	child_counter->attr.inherit = 1;

	/*
	 * Get a reference to the parent filp - we will fput it
	 * when the child counter exits. This is safe to do because