aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukasz Odzioba <lukasz.odzioba@intel.com>2016-10-04 12:26:26 -0400
committerIngo Molnar <mingo@kernel.org>2016-10-19 09:52:16 -0400
commit889882bce2a5f69242c1f3acd840983f467499b9 (patch)
tree8dcd5a50bec5a943273ce27f005485af6c9b2d97
parent1a1891d762d6e64daf07b5be4817e3fbb29e3c59 (diff)
perf/x86/intel/cstate: Add C-state residency events for Knights Landing
Although KNL does support C1,C6,PC2,PC3,PC6 states, the patch only supports C6,PC2,PC3,PC6, because there is no counter for C1. C6 residency counter MSR on KNL has a different address than other platforms which is handled as a new quirk flag. Signed-off-by: Lukasz Odzioba <lukasz.odzioba@intel.com> Acked-by: Peter Zijlstra <peterz@infradead.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Cc: Stephane Eranian <eranian@google.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Vince Weaver <vincent.weaver@maine.edu> Cc: bp@suse.de Cc: dave.hansen@linux.intel.com Cc: kan.liang@intel.com Link: http://lkml.kernel.org/r/1475598386-19597-1-git-send-email-lukasz.odzioba@intel.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/x86/events/intel/cstate.c30
1 files changed, 26 insertions, 4 deletions
diff --git a/arch/x86/events/intel/cstate.c b/arch/x86/events/intel/cstate.c
index 3ca87b5a8677..4f5ac726335f 100644
--- a/arch/x86/events/intel/cstate.c
+++ b/arch/x86/events/intel/cstate.c
@@ -48,7 +48,8 @@
48 * Scope: Core 48 * Scope: Core
49 * MSR_CORE_C6_RESIDENCY: CORE C6 Residency Counter 49 * MSR_CORE_C6_RESIDENCY: CORE C6 Residency Counter
50 * perf code: 0x02 50 * perf code: 0x02
51 * Available model: SLM,AMT,NHM,WSM,SNB,IVB,HSW,BDW,SKL 51 * Available model: SLM,AMT,NHM,WSM,SNB,IVB,HSW,BDW
52 * SKL,KNL
52 * Scope: Core 53 * Scope: Core
53 * MSR_CORE_C7_RESIDENCY: CORE C7 Residency Counter 54 * MSR_CORE_C7_RESIDENCY: CORE C7 Residency Counter
54 * perf code: 0x03 55 * perf code: 0x03
@@ -56,15 +57,16 @@
56 * Scope: Core 57 * Scope: Core
57 * MSR_PKG_C2_RESIDENCY: Package C2 Residency Counter. 58 * MSR_PKG_C2_RESIDENCY: Package C2 Residency Counter.
58 * perf code: 0x00 59 * perf code: 0x00
59 * Available model: SNB,IVB,HSW,BDW,SKL 60 * Available model: SNB,IVB,HSW,BDW,SKL,KNL
60 * Scope: Package (physical package) 61 * Scope: Package (physical package)
61 * MSR_PKG_C3_RESIDENCY: Package C3 Residency Counter. 62 * MSR_PKG_C3_RESIDENCY: Package C3 Residency Counter.
62 * perf code: 0x01 63 * perf code: 0x01
63 * Available model: NHM,WSM,SNB,IVB,HSW,BDW,SKL 64 * Available model: NHM,WSM,SNB,IVB,HSW,BDW,SKL,KNL
64 * Scope: Package (physical package) 65 * Scope: Package (physical package)
65 * MSR_PKG_C6_RESIDENCY: Package C6 Residency Counter. 66 * MSR_PKG_C6_RESIDENCY: Package C6 Residency Counter.
66 * perf code: 0x02 67 * perf code: 0x02
67 * Available model: SLM,AMT,NHM,WSM,SNB,IVB,HSW,BDW,SKL 68 * Available model: SLM,AMT,NHM,WSM,SNB,IVB,HSW,BDW
69 * SKL,KNL
68 * Scope: Package (physical package) 70 * Scope: Package (physical package)
69 * MSR_PKG_C7_RESIDENCY: Package C7 Residency Counter. 71 * MSR_PKG_C7_RESIDENCY: Package C7 Residency Counter.
70 * perf code: 0x03 72 * perf code: 0x03
@@ -118,6 +120,7 @@ struct cstate_model {
118 120
119/* Quirk flags */ 121/* Quirk flags */
120#define SLM_PKG_C6_USE_C7_MSR (1UL << 0) 122#define SLM_PKG_C6_USE_C7_MSR (1UL << 0)
123#define KNL_CORE_C6_MSR (1UL << 1)
121 124
122struct perf_cstate_msr { 125struct perf_cstate_msr {
123 u64 msr; 126 u64 msr;
@@ -488,6 +491,18 @@ static const struct cstate_model slm_cstates __initconst = {
488 .quirks = SLM_PKG_C6_USE_C7_MSR, 491 .quirks = SLM_PKG_C6_USE_C7_MSR,
489}; 492};
490 493
494
495static const struct cstate_model knl_cstates __initconst = {
496 .core_events = BIT(PERF_CSTATE_CORE_C6_RES),
497
498 .pkg_events = BIT(PERF_CSTATE_PKG_C2_RES) |
499 BIT(PERF_CSTATE_PKG_C3_RES) |
500 BIT(PERF_CSTATE_PKG_C6_RES),
501 .quirks = KNL_CORE_C6_MSR,
502};
503
504
505
491#define X86_CSTATES_MODEL(model, states) \ 506#define X86_CSTATES_MODEL(model, states) \
492 { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long) &(states) } 507 { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long) &(states) }
493 508
@@ -523,6 +538,8 @@ static const struct x86_cpu_id intel_cstates_match[] __initconst = {
523 538
524 X86_CSTATES_MODEL(INTEL_FAM6_SKYLAKE_MOBILE, snb_cstates), 539 X86_CSTATES_MODEL(INTEL_FAM6_SKYLAKE_MOBILE, snb_cstates),
525 X86_CSTATES_MODEL(INTEL_FAM6_SKYLAKE_DESKTOP, snb_cstates), 540 X86_CSTATES_MODEL(INTEL_FAM6_SKYLAKE_DESKTOP, snb_cstates),
541
542 X86_CSTATES_MODEL(INTEL_FAM6_XEON_PHI_KNL, knl_cstates),
526 { }, 543 { },
527}; 544};
528MODULE_DEVICE_TABLE(x86cpu, intel_cstates_match); 545MODULE_DEVICE_TABLE(x86cpu, intel_cstates_match);
@@ -558,6 +575,11 @@ static int __init cstate_probe(const struct cstate_model *cm)
558 if (cm->quirks & SLM_PKG_C6_USE_C7_MSR) 575 if (cm->quirks & SLM_PKG_C6_USE_C7_MSR)
559 pkg_msr[PERF_CSTATE_PKG_C6_RES].msr = MSR_PKG_C7_RESIDENCY; 576 pkg_msr[PERF_CSTATE_PKG_C6_RES].msr = MSR_PKG_C7_RESIDENCY;
560 577
578 /* KNL has different MSR for CORE C6 */
579 if (cm->quirks & KNL_CORE_C6_MSR)
580 pkg_msr[PERF_CSTATE_CORE_C6_RES].msr = MSR_KNL_CORE_C6_RESIDENCY;
581
582
561 has_cstate_core = cstate_probe_msr(cm->core_events, 583 has_cstate_core = cstate_probe_msr(cm->core_events,
562 PERF_CSTATE_CORE_EVENT_MAX, 584 PERF_CSTATE_CORE_EVENT_MAX,
563 core_msr, core_events_attrs); 585 core_msr, core_events_attrs);