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

Commit 98d943b0 authored by Robert Richter's avatar Robert Richter Committed by Ingo Molnar
Browse files

oprofile, ARM: Release resources on failure



This patch fixes a resource leak on failure, where the
oprofilefs and some counters may not released properly.

Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
Acked-by: default avatarWill Deacon <will.deacon@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: <stable@kernel.org> # .35.x
LKML-Reference: <20100929145225.GJ13563@erda.amd.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent c7a27aa4
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -102,6 +102,7 @@ static int op_create_counter(int cpu, int event)
	if (IS_ERR(pevent)) {
		ret = PTR_ERR(pevent);
	} else if (pevent->state != PERF_EVENT_STATE_ACTIVE) {
		perf_event_release_kernel(pevent);
		pr_warning("oprofile: failed to enable event %d "
				"on CPU %d\n", event, cpu);
		ret = -EBUSY;
@@ -365,6 +366,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
	ret = init_driverfs();
	if (ret) {
		kfree(counter_config);
		counter_config = NULL;
		return ret;
	}

@@ -402,7 +404,6 @@ void oprofile_arch_exit(void)
	struct perf_event *event;

	if (*perf_events) {
		exit_driverfs();
		for_each_possible_cpu(cpu) {
			for (id = 0; id < perf_num_counters; ++id) {
				event = perf_events[cpu][id];
@@ -413,8 +414,10 @@ void oprofile_arch_exit(void)
		}
	}

	if (counter_config)
	if (counter_config) {
		kfree(counter_config);
		exit_driverfs();
	}
}
#else
int __init oprofile_arch_init(struct oprofile_operations *ops)