[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1461224712-6421-2-git-send-email-kan.liang@intel.com>
Date: Thu, 21 Apr 2016 00:45:12 -0700
From: kan.liang@...el.com
To: peterz@...radead.org, tglx@...utronix.de,
linux-kernel@...r.kernel.org
Cc: ak@...ux.intel.com, eranian@...gle.com,
Kan Liang <kan.liang@...el.com>
Subject: [PATCH V2 2/2] perf/x86/intel/uncore: add enable_box for client msr uncore
From: Kan Liang <kan.liang@...el.com>
PERF_GLOBAL_CTL could be cleared after Package C7. This patch tries to
workaround this issue by re-enable PERF_GLOBAL_CTL in enable_box.
The workaround does not cover all cases. It helps for new events after
returning from C7.
There is no drawback in letting the thing enabled, so it does not need
disable_box here.
Signed-off-by: Kan Liang <kan.liang@...el.com>
---
Changes since V1:
- New patch for enable_box
- Similar support for SNB
arch/x86/events/intel/uncore_snb.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/arch/x86/events/intel/uncore_snb.c b/arch/x86/events/intel/uncore_snb.c
index 97a69db..9d35ec0 100644
--- a/arch/x86/events/intel/uncore_snb.c
+++ b/arch/x86/events/intel/uncore_snb.c
@@ -100,6 +100,12 @@ static void snb_uncore_msr_init_box(struct intel_uncore_box *box)
}
}
+static void snb_uncore_msr_enable_box(struct intel_uncore_box *box)
+{
+ wrmsrl(SNB_UNC_PERF_GLOBAL_CTL,
+ SNB_UNC_GLOBAL_CTL_EN | SNB_UNC_GLOBAL_CTL_CORE_ALL);
+}
+
static void snb_uncore_msr_exit_box(struct intel_uncore_box *box)
{
if (box->pmu->pmu_idx == 0)
@@ -127,6 +133,7 @@ static struct attribute_group snb_uncore_format_group = {
static struct intel_uncore_ops snb_uncore_msr_ops = {
.init_box = snb_uncore_msr_init_box,
+ .enable_box = snb_uncore_msr_enable_box,
.exit_box = snb_uncore_msr_exit_box,
.disable_event = snb_uncore_msr_disable_event,
.enable_event = snb_uncore_msr_enable_event,
@@ -192,6 +199,12 @@ static void skl_uncore_msr_init_box(struct intel_uncore_box *box)
}
}
+static void skl_uncore_msr_enable_box(struct intel_uncore_box *box)
+{
+ wrmsrl(SKL_UNC_PERF_GLOBAL_CTL,
+ SNB_UNC_GLOBAL_CTL_EN | SKL_UNC_GLOBAL_CTL_CORE_ALL);
+}
+
static void skl_uncore_msr_exit_box(struct intel_uncore_box *box)
{
if (box->pmu->pmu_idx == 0)
@@ -200,6 +213,7 @@ static void skl_uncore_msr_exit_box(struct intel_uncore_box *box)
static struct intel_uncore_ops skl_uncore_msr_ops = {
.init_box = skl_uncore_msr_init_box,
+ .enable_box = skl_uncore_msr_enable_box,
.exit_box = skl_uncore_msr_exit_box,
.disable_event = snb_uncore_msr_disable_event,
.enable_event = snb_uncore_msr_enable_event,
--
2.4.0
Powered by blists - more mailing lists