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

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

perf: Clean up 'ctx' reference counting



Small cleanup to how we refcount in find_get_context(), this also
allows us to use put_ctx() to free things instead of using kfree().

Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20110409192141.719340481@chello.nl


Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 075e0b00
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -2835,16 +2835,12 @@ find_get_context(struct pmu *pmu, struct task_struct *task, int cpu)
		unclone_ctx(ctx);
		++ctx->pin_count;
		raw_spin_unlock_irqrestore(&ctx->lock, flags);
	}

	if (!ctx) {
	} else {
		ctx = alloc_perf_context(pmu, task);
		err = -ENOMEM;
		if (!ctx)
			goto errout;

		get_ctx(ctx);

		err = 0;
		mutex_lock(&task->perf_event_mutex);
		/*
@@ -2856,14 +2852,14 @@ find_get_context(struct pmu *pmu, struct task_struct *task, int cpu)
		else if (task->perf_event_ctxp[ctxn])
			err = -EAGAIN;
		else {
			get_ctx(ctx);
			++ctx->pin_count;
			rcu_assign_pointer(task->perf_event_ctxp[ctxn], ctx);
		}
		mutex_unlock(&task->perf_event_mutex);

		if (unlikely(err)) {
			put_task_struct(task);
			kfree(ctx);
			put_ctx(ctx);

			if (err == -EAGAIN)
				goto retry;