Patch "[PATCH 105/135] perf/x86/cqm: Fix CQM memory leak and notifier leak" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
[PATCH 105/135] perf/x86/cqm: Fix CQM memory leak and notifier leak
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
0105-perf-x86-cqm-Fix-CQM-memory-leak-and-notifier-leak.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
a134c91bceb0f44a23207876f9a1b580c3f894fbMon Sep 17 00:00:00 2001
From: Vikas Shivappa <[email protected]>
Date: Thu, 10 Mar 2016 15:32:08 -0800
Subject: [PATCH 105/135] perf/x86/cqm: Fix CQM memory leak and notifier leak
[ Upstream commit ada2f634cd50d050269b67b4e2966582387e7c27 ]
Fixes the hotcpu notifier leak and other global variable memory leaks during CQM (cache quality of service monitoring) initialization.
--- arch/x86/kernel/cpu/perf_event_intel_cqm.c | 43 +++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 11 deletions(-)
arch/x86/kernel/cpu/perf_event_intel_cqm.c +32 -11
@@ -211,6 +211,20 @@ static void __put_rmid(u32 rmid)list_add_tail (&entry->list, &cqm_rmid_limbo_lru); } +static void cqm_cleanup (void ) +{ +int i; + +if (!cqm_rmid_ptrs) +return ; + +for (i =0 ; i < cqm_max_rmid; i++) +kfree (cqm_rmid_ptrs[i]); + +kfree (cqm_rmid_ptrs); + cqm_rmid_ptrs =NULL ; +} +static int intel_cqm_setup_rmid_cache (void ) {struct cqm_rmid_entry *entry;
@@ -218,7 +232,7 @@ static int intel_cqm_setup_rmid_cache(voint r =0 ; nr_rmids = cqm_max_rmid +1 ; - cqm_rmid_ptrs =kmalloc (sizeof (struct cqm_rmid_entry *) * + cqm_rmid_ptrs =kzalloc (sizeof (struct cqm_rmid_entry *) * nr_rmids,GFP_KERNEL );if (!cqm_rmid_ptrs)return -ENOMEM ;
@@ -249,11 +263,9 @@ static int intel_cqm_setup_rmid_cache(vomutex_unlock (&cache_mutex);return 0 ; -fail: -while (r--) -kfree (cqm_rmid_ptrs[r]); -kfree (cqm_rmid_ptrs); +fail: +cqm_cleanup ();return -ENOMEM ; }
@@ -1322,7 +1334,7 @@ static const struct x86_cpu_id intel_cqmstatic 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 +1394,25 @@ 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 -pr_info ("Intel CQM monitoring enabled\n" ); + goto out; + } + +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); +cqm_cleanup (); + }return ret; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/0104-perf-x86-cqm-Fix-CQM-handling-of-grouping-events-int.patch queue-4.4/0105-perf-x86-cqm-Fix-CQM-memory-leak-and-notifier-leak.patch