diff options
Diffstat (limited to 'arch/x86/kernel/cpu')
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_lbr.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/perf_event_intel_lbr.c b/arch/x86/kernel/cpu/perf_event_intel_lbr.c index e54a063b2863..07f0ff88e443 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_lbr.c +++ b/arch/x86/kernel/cpu/perf_event_intel_lbr.c | |||
@@ -315,6 +315,16 @@ void intel_pmu_lbr_init_snb(void) | |||
315 | /* atom */ | 315 | /* atom */ |
316 | void intel_pmu_lbr_init_atom(void) | 316 | void intel_pmu_lbr_init_atom(void) |
317 | { | 317 | { |
318 | /* | ||
319 | * only models starting at stepping 10 seems | ||
320 | * to have an operational LBR which can freeze | ||
321 | * on PMU interrupt | ||
322 | */ | ||
323 | if (boot_cpu_data.x86_mask < 10) { | ||
324 | pr_cont("LBR disabled due to erratum"); | ||
325 | return; | ||
326 | } | ||
327 | |||
318 | x86_pmu.lbr_nr = 8; | 328 | x86_pmu.lbr_nr = 8; |
319 | x86_pmu.lbr_tos = MSR_LBR_TOS; | 329 | x86_pmu.lbr_tos = MSR_LBR_TOS; |
320 | x86_pmu.lbr_from = MSR_LBR_CORE_FROM; | 330 | x86_pmu.lbr_from = MSR_LBR_CORE_FROM; |