forked from Minki/linux
perf_counter: x86: Fix PMU resource leak
Dave noticed that we leak the PMU resource reservations when we fail the hardware counter init. Reported-by: David Miller <davem@davemloft.net> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Acked-by: David Miller <davem@davemloft.net> LKML-Reference: <1252483487.7746.164.camel@twins> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
611a546bec
commit
a1792cdaca
@ -924,6 +924,8 @@ static int __hw_perf_counter_init(struct perf_counter *counter)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
counter->destroy = hw_perf_counter_destroy;
|
||||
|
||||
/*
|
||||
* Generate PMC IRQs:
|
||||
* (keep 'enabled' bit clear for now)
|
||||
@ -953,8 +955,6 @@ static int __hw_perf_counter_init(struct perf_counter *counter)
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
counter->destroy = hw_perf_counter_destroy;
|
||||
|
||||
/*
|
||||
* Raw event type provide the config in the event structure
|
||||
*/
|
||||
@ -2107,8 +2107,11 @@ const struct pmu *hw_perf_counter_init(struct perf_counter *counter)
|
||||
int err;
|
||||
|
||||
err = __hw_perf_counter_init(counter);
|
||||
if (err)
|
||||
if (err) {
|
||||
if (counter->destroy)
|
||||
counter->destroy(counter);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
return &pmu;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user