From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751893AbcBXKYO (ORCPT ); Wed, 24 Feb 2016 05:24:14 -0500 Received: from www.linutronix.de ([62.245.132.108]:46729 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752279AbcBXKYI (ORCPT ); Wed, 24 Feb 2016 05:24:08 -0500 Date: Wed, 24 Feb 2016 11:22:47 +0100 (CET) From: Thomas Gleixner To: Vikas Shivappa cc: vikas.shivappa@intel.com, x86@kernel.org, linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@kernel.org, peterz@infradead.org, ravi.v.shankar@intel.com, tony.luck@intel.com, fenghua.yu@intel.com, kanaka.d.juvva@intel.com, h.peter.anvin@intel.com Subject: Re: [PATCH 2/5] x86/mbm: Intel Memory B/W Monitoring enumeration and init In-Reply-To: <1455152873-30467-3-git-send-email-vikas.shivappa@linux.intel.com> Message-ID: References: <1455152873-30467-1-git-send-email-vikas.shivappa@linux.intel.com> <1455152873-30467-3-git-send-email-vikas.shivappa@linux.intel.com> User-Agent: Alpine 2.11 (DEB 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 10 Feb 2016, Vikas Shivappa wrote:ar > +static int intel_mbm_init(void) > +{ > + int ret = 0, array_size, maxid = cqm_max_rmid + 1; > + > + mbm_socket_max = cpumask_weight(&cqm_cpumask); This should use the new topology_max_packages() function, so you can alloc your array correctly even if not all sockets are online/plugged yet. > + array_size = sizeof(struct sample) * maxid * mbm_socket_max; > + mbm_local = kmalloc(array_size, GFP_KERNEL); > + if (!mbm_local) { > + ret = -ENOMEM; return -ENOMEM is sufficient here. > + goto out; > + } > + > + mbm_total = kmalloc(array_size, GFP_KERNEL); > + if (!mbm_total) { > + kfree(mbm_local); > + ret = -ENOMEM; > + } > +out: > + > + return ret; > +} > + > cqm_l3_scale = boot_cpu_data.x86_cache_occ_scale; > @@ -1384,14 +1520,34 @@ static int __init intel_cqm_init(void) > > __perf_cpu_notifier(intel_cqm_cpu_notifier); You really should register the notifier _AFTER_ registering the pmu. That needs to be fixed anyway, because the existing code leaks the notifier AND memory in case perf_pmu_register fails. Thanks, tglx