All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] perf/x86: check ucode before disabling PEBS on SandyBridge
@ 2012-06-07  7:15 Stephane Eranian
  2012-06-07 10:18 ` Peter Zijlstra
                   ` (2 more replies)
  0 siblings, 3 replies; 107+ messages in thread
From: Stephane Eranian @ 2012-06-07  7:15 UTC (permalink / raw)
  To: linux-kernel; +Cc: peterz, andi, mingo, ming.m.lin


This patch checks the microcode version before disabling
PEBS on SandyBridge model 42 (desktop, mobile), and 45 (SNB-EP).
PEBS was disabled for both models due to an erratum.

A workaround is implemented by micro-code 0x28. This patch checks
the microcode version and disables PEBS support if version < 0x28.
The check is done each time a PEBS event is created and NOT at boot
time because the micro-code update may only be done after the kernel
has booted.
    
Go to downloadcenter.intel.com to download microcode updates.
Need microcode update 6/6/2012 or later.
    
Signed-off-by: Stephane Eranian <eranian@google.com>

diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c
index 5ec146c..9c905bd 100644
--- a/arch/x86/kernel/cpu/perf_event_intel.c
+++ b/arch/x86/kernel/cpu/perf_event_intel.c
@@ -1394,6 +1394,27 @@ static void intel_pebs_aliases_snb(struct perf_event *event)
 	}
 }
 
+static int check_pebs_quirks(void)
+{
+	int uversion = cpu_data(smp_processor_id()).microcode;
+	int model = cpu_data(smp_processor_id()).x86_model;
+
+	/* do not have PEBS to begin with */
+	if (!x86_pmu.pebs)
+		return 0;
+
+	/*
+	 * check ucode version for SNB, SNB-EP
+	 */
+	if ((model == 42 || model == 45) && uversion < 0x28) {
+		pr_warn("SandyBridge PEBS unavailable due to CPU erratum, "
+			" update microcode (was 0x%x, needs at least 0x28).\n",
+			uversion);
+		return -ENOTSUPP;
+	}
+	return 0;
+}
+
 static int intel_pmu_hw_config(struct perf_event *event)
 {
 	int ret = x86_pmu_hw_config(event);
@@ -1401,8 +1422,14 @@ static int intel_pmu_hw_config(struct perf_event *event)
 	if (ret)
 		return ret;
 
-	if (event->attr.precise_ip && x86_pmu.pebs_aliases)
-		x86_pmu.pebs_aliases(event);
+	if (event->attr.precise_ip) {
+
+		if (check_pebs_quirks())
+			return -ENOTSUPP;
+
+		if (x86_pmu.pebs_aliases)
+			x86_pmu.pebs_aliases(event);
+	}
 
 	if (intel_pmu_needs_lbr_smpl(event)) {
 		ret = intel_pmu_setup_lbr_filter(event);
@@ -1714,13 +1741,6 @@ static __init void intel_clovertown_quirk(void)
 	x86_pmu.pebs_constraints = NULL;
 }
 
-static __init void intel_sandybridge_quirk(void)
-{
-	pr_warn("PEBS disabled due to CPU errata\n");
-	x86_pmu.pebs = 0;
-	x86_pmu.pebs_constraints = NULL;
-}
-
 static const struct { int id; char *name; } intel_arch_events_map[] __initconst = {
 	{ PERF_COUNT_HW_CPU_CYCLES, "cpu cycles" },
 	{ PERF_COUNT_HW_INSTRUCTIONS, "instructions" },
@@ -1914,7 +1934,6 @@ __init int intel_pmu_init(void)
 
 	case 42: /* SandyBridge */
 	case 45: /* SandyBridge, "Romely-EP" */
-		x86_add_quirk(intel_sandybridge_quirk);
 	case 58: /* IvyBridge */
 		memcpy(hw_cache_event_ids, snb_hw_cache_event_ids,
 		       sizeof(hw_cache_event_ids));

^ permalink raw reply related	[flat|nested] 107+ messages in thread

end of thread, other threads:[~2012-06-21  2:33 UTC | newest]

Thread overview: 107+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-07  7:15 [PATCH] perf/x86: check ucode before disabling PEBS on SandyBridge Stephane Eranian
2012-06-07 10:18 ` Peter Zijlstra
2012-06-07 10:35   ` Stephane Eranian
2012-06-07 10:45     ` Peter Zijlstra
2012-06-07 10:48       ` Stephane Eranian
2012-06-07 11:15         ` Peter Zijlstra
2012-06-08  9:35           ` Ingo Molnar
2012-06-08 10:00             ` Peter Zijlstra
2012-06-08 10:03               ` Stephane Eranian
2012-06-08 13:26               ` Peter Zijlstra
2012-06-08 13:51                 ` Borislav Petkov
2012-06-08 13:54                   ` Peter Zijlstra
2012-06-08 14:15                     ` Borislav Petkov
2012-06-08 14:20                       ` Peter Zijlstra
2012-06-08 14:36                         ` Borislav Petkov
2012-06-08 14:45                           ` Peter Zijlstra
2012-06-08 15:09                             ` Borislav Petkov
2012-06-08 13:56                   ` Peter Zijlstra
2012-06-08 14:03                     ` Borislav Petkov
2012-06-08 13:59                   ` Peter Zijlstra
2012-06-08 14:03                     ` Stephane Eranian
2012-06-08 14:17                       ` Borislav Petkov
2012-06-08 16:02                         ` H. Peter Anvin
2012-06-08 21:02                   ` Henrique de Moraes Holschuh
2012-06-08 21:16                     ` Borislav Petkov
2012-06-08 14:07                 ` Stephane Eranian
2012-06-08 14:13                   ` Peter Zijlstra
2012-06-08 14:19                   ` Borislav Petkov
2012-06-08 14:23                   ` Peter Zijlstra
2012-06-08 14:26                     ` Stephane Eranian
2012-06-08 14:25                   ` Peter Zijlstra
2012-06-08 14:26                     ` Stephane Eranian
2012-06-12  8:14                     ` Stephane Eranian
2012-06-08 16:28                 ` Stephane Eranian
2012-06-08 18:49                   ` Peter Zijlstra
2012-06-08 16:50                 ` Andi Kleen
2012-06-08 18:05                 ` Borislav Petkov
2012-06-08 18:52                   ` Peter Zijlstra
2012-06-08 20:38                     ` Borislav Petkov
2012-06-12 17:07                 ` Robert Richter
2012-06-12 17:09                   ` Stephane Eranian
2012-06-12 17:13                     ` Peter Zijlstra
2012-06-12 17:17                       ` Borislav Petkov
2012-06-12 17:18                         ` Peter Zijlstra
2012-06-12 17:23                           ` Borislav Petkov
2012-06-12 17:26                             ` Peter Zijlstra
2012-06-12 17:35                               ` Borislav Petkov
2012-06-12 17:40                                 ` Peter Zijlstra
2012-06-12 18:04                                   ` Andi Kleen
2012-06-12 20:10                                   ` Borislav Petkov
2012-06-13  1:04                                 ` Henrique de Moraes Holschuh
2012-06-13  6:51                                   ` Borislav Petkov
2012-06-13 12:36                                     ` Henrique de Moraes Holschuh
2012-06-13 16:11                                       ` Borislav Petkov
2012-06-13 21:41                                         ` Henrique de Moraes Holschuh
2012-06-15 12:37                                         ` Borislav Petkov
2012-06-15 12:42                                           ` Peter Zijlstra
2012-06-15 12:52                                             ` Borislav Petkov
2012-06-15 16:52                                               ` [PATCH] x86, microcode: Make reload interface per system Borislav Petkov
2012-06-15 17:16                                                 ` Peter Zijlstra
2012-06-15 17:49                                                   ` Borislav Petkov
2012-06-19  2:46                                                 ` Henrique de Moraes Holschuh
2012-06-19  3:31                                                   ` H. Peter Anvin
2012-06-19  5:11                                                     ` Borislav Petkov
2012-06-19  8:17                                                       ` Peter Zijlstra
2012-06-19 10:22                                                         ` Borislav Petkov
2012-06-19 10:26                                                           ` Peter Zijlstra
2012-06-19 15:06                                                             ` Borislav Petkov
2012-06-19 15:57                                                               ` H. Peter Anvin
2012-06-19 18:22                                                             ` Henrique de Moraes Holschuh
2012-06-19 20:22                                                               ` H. Peter Anvin
2012-06-20 23:46                                                                 ` Henrique de Moraes Holschuh
2012-06-20 23:49                                                                   ` H. Peter Anvin
2012-06-21  0:06                                                                     ` Henrique de Moraes Holschuh
2012-06-21  0:18                                                                       ` H. Peter Anvin
2012-06-21  2:33                                                                         ` Henrique de Moraes Holschuh
2012-06-19  5:03                                                   ` Borislav Petkov
2012-06-19 18:57                                                     ` Henrique de Moraes Holschuh
2012-06-19 22:19                                                       ` Borislav Petkov
2012-06-19  2:42                                           ` [PATCH] perf/x86: check ucode before disabling PEBS on SandyBridge Henrique de Moraes Holschuh
2012-06-12 17:23                       ` Robert Richter
2012-06-12 17:15                     ` Borislav Petkov
2012-06-07 13:28   ` Andi Kleen
2012-06-07 13:27 ` Andi Kleen
2012-06-12 18:35 ` H. Peter Anvin
2012-06-12 19:07   ` Borislav Petkov
2012-06-12 19:33     ` Peter Zijlstra
2012-06-12 19:35       ` Andi Kleen
2012-06-12 19:49       ` Borislav Petkov
2012-06-12 20:28         ` H. Peter Anvin
2012-06-12 20:37           ` Borislav Petkov
2012-06-12 20:42             ` H. Peter Anvin
2012-06-12 20:56               ` Borislav Petkov
2012-06-12 20:58                 ` H. Peter Anvin
2012-06-12 21:04                   ` Borislav Petkov
2012-06-13  8:38                   ` Peter Zijlstra
2012-06-13 14:00                     ` H. Peter Anvin
2012-06-13 15:37                       ` Peter Zijlstra
2012-06-13 15:46                         ` H. Peter Anvin
2012-06-13 12:39               ` Peter Zijlstra
2012-06-13 13:22                 ` H. Peter Anvin
2012-06-13 14:01                 ` Henrique de Moraes Holschuh
2012-06-13  8:32         ` Peter Zijlstra
2012-06-13 13:59           ` H. Peter Anvin
2012-06-13 15:32             ` Peter Zijlstra
2012-06-13 15:38               ` H. Peter Anvin
2012-06-12 20:27       ` H. Peter Anvin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.