Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754163AbbHHHe2 (ORCPT ); Sat, 8 Aug 2015 03:34:28 -0400 Received: from mga09.intel.com ([134.134.136.24]:50622 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752274AbbHHHe1 (ORCPT ); Sat, 8 Aug 2015 03:34:27 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,633,1432623600"; d="scan'208";a="621619656" From: Kanaka Juvva To: kanaka.d.juvva@intel.com, glenn.p.williamson@intel.com, matt.fleming@intel.com, will.auld@intel.com, andi@firstfloor.org, linux-kernel@vger.kernel.org, tony.luck@intel.com, peterz@infradead.org, tglx@linutronix.de, tj@kernel.org, x86@kernel.org, mingo@redhat.com, hpa@zytor.com, vikas.shivappa@intel.com Subject: [PATCH v3 2/2] perf,x86: skip intel_cqm_stable if CMT is not present in a CPU model Date: Sat, 8 Aug 2015 00:36:19 -0700 Message-Id: <1439019379-10025-1-git-send-email-kanaka.d.juvva@linux.intel.com> X-Mailer: git-send-email 2.1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2068 Lines: 62 CMT and MBM are complementary technologies. One technology doesn't imply the other technology. If CMT is not present in your CPU model intel_cqm_stable() won't be called when computing a free RMID. This is because, LLC_OCCUPANCY reading in this case doesn't apply and shouldn't be used a criteria for freeing or picking an RMID. Signed-off-by: Kanaka Juvva --- arch/x86/kernel/cpu/perf_event_intel_cqm.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/cpu/perf_event_intel_cqm.c b/arch/x86/kernel/cpu/perf_event_intel_cqm.c index 63eb68b..7aa3bc0 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_cqm.c +++ b/arch/x86/kernel/cpu/perf_event_intel_cqm.c @@ -125,6 +125,7 @@ struct cqm_rmid_entry { enum rmid_recycle_state state; struct list_head list; unsigned long queue_time; + bool config; }; /* @@ -232,6 +233,7 @@ static int intel_cqm_setup_rmid_cache(void) INIT_LIST_HEAD(&entry->list); entry->rmid = r; + entry->config = false; cqm_rmid_ptrs[r] = entry; list_add_tail(&entry->list, &cqm_rmid_free_lru); @@ -568,7 +570,8 @@ static bool intel_cqm_rmid_stabilize(unsigned int *available) /* * Test whether an RMID is free for each package. */ - on_each_cpu_mask(&cqm_cpumask, intel_cqm_stable, NULL, true); + if (entry->config) + on_each_cpu_mask(&cqm_cpumask, intel_cqm_stable, NULL, true); list_for_each_entry_safe(entry, tmp, &cqm_rmid_limbo_lru, list) { /* @@ -1003,6 +1006,12 @@ static void intel_cqm_event_start(struct perf_event *event, int mode) } state->rmid = rmid; + if (event->attr.config & QOS_L3_OCCUP_EVENT_ID) { + struct cqm_rmid_entry *entry; + + entry = __rmid_entry(rmid); + entry->config = true; + } wrmsr(MSR_IA32_PQR_ASSOC, rmid, state->closid); } -- 2.1.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/