On Tue, 1 Mar 2016, Vikas Shivappa wrote:

> Fixes the hotcpu notifier leak and a memory leak during cqm(cache
> quality of service monitoring) initialization.
> 
> Reviewed-by: Tony Luck <[email protected]>
> Signed-off-by: Vikas Shivappa <[email protected]>
> ---
>  arch/x86/kernel/cpu/perf_event_intel_cqm.c | 17 ++++++++++++-----
>  1 file changed, 12 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/x86/kernel/cpu/perf_event_intel_cqm.c 
> b/arch/x86/kernel/cpu/perf_event_intel_cqm.c
> index e6be335..5666171 100644
> --- a/arch/x86/kernel/cpu/perf_event_intel_cqm.c
> +++ b/arch/x86/kernel/cpu/perf_event_intel_cqm.c
> @@ -1322,7 +1322,7 @@ static const struct x86_cpu_id intel_cqm_match[] = {
>  
>  static int __init intel_cqm_init(void)
>  {
> -     char *str, scale[20];
> +     char *str = NULL, scale[20];
>       int i, cpu, ret;
>  
>       if (!x86_match_cpu(intel_cqm_match))
> @@ -1382,16 +1382,23 @@ static int __init intel_cqm_init(void)
>               cqm_pick_event_reader(i);
>       }
>  
> -     __perf_cpu_notifier(intel_cqm_cpu_notifier);
> -
>       ret = perf_pmu_register(&intel_cqm_pmu, "intel_cqm", -1);
> -     if (ret)
> +     if (ret) {
>               pr_err("Intel CQM perf registration failed: %d\n", ret);
> -     else
> +             goto out;
> +     } else {
>               pr_info("Intel CQM monitoring enabled\n");
> +     }
>  
> +     /*
> +      * Register the hot cpu notifier once we are sure cqm
> +      * is enabled to avoid notifier leak.
> +      */
> +     __perf_cpu_notifier(intel_cqm_cpu_notifier);
>  out:
>       cpu_notifier_register_done();
> +     if (ret)
> +             kfree(str);

This still leaks cqm_rmid_ptrs ....

Reply via email to