diff options
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel.c | 4 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_ds.c | 59 |
2 files changed, 42 insertions, 21 deletions
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index ba8aad157b87..c3ce053ecb46 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c | |||
@@ -1137,6 +1137,7 @@ static __init int intel_pmu_init(void) | |||
1137 | intel_pmu_lbr_init_core(); | 1137 | intel_pmu_lbr_init_core(); |
1138 | 1138 | ||
1139 | x86_pmu.event_constraints = intel_core2_event_constraints; | 1139 | x86_pmu.event_constraints = intel_core2_event_constraints; |
1140 | x86_pmu.pebs_constraints = intel_core2_pebs_event_constraints; | ||
1140 | pr_cont("Core2 events, "); | 1141 | pr_cont("Core2 events, "); |
1141 | break; | 1142 | break; |
1142 | 1143 | ||
@@ -1149,6 +1150,7 @@ static __init int intel_pmu_init(void) | |||
1149 | intel_pmu_lbr_init_nhm(); | 1150 | intel_pmu_lbr_init_nhm(); |
1150 | 1151 | ||
1151 | x86_pmu.event_constraints = intel_nehalem_event_constraints; | 1152 | x86_pmu.event_constraints = intel_nehalem_event_constraints; |
1153 | x86_pmu.pebs_constraints = intel_nehalem_pebs_event_constraints; | ||
1152 | x86_pmu.enable_all = intel_pmu_nhm_enable_all; | 1154 | x86_pmu.enable_all = intel_pmu_nhm_enable_all; |
1153 | pr_cont("Nehalem events, "); | 1155 | pr_cont("Nehalem events, "); |
1154 | break; | 1156 | break; |
@@ -1160,6 +1162,7 @@ static __init int intel_pmu_init(void) | |||
1160 | intel_pmu_lbr_init_atom(); | 1162 | intel_pmu_lbr_init_atom(); |
1161 | 1163 | ||
1162 | x86_pmu.event_constraints = intel_gen_event_constraints; | 1164 | x86_pmu.event_constraints = intel_gen_event_constraints; |
1165 | x86_pmu.pebs_constraints = intel_atom_pebs_event_constraints; | ||
1163 | pr_cont("Atom events, "); | 1166 | pr_cont("Atom events, "); |
1164 | break; | 1167 | break; |
1165 | 1168 | ||
@@ -1172,6 +1175,7 @@ static __init int intel_pmu_init(void) | |||
1172 | 1175 | ||
1173 | x86_pmu.event_constraints = intel_westmere_event_constraints; | 1176 | x86_pmu.event_constraints = intel_westmere_event_constraints; |
1174 | x86_pmu.enable_all = intel_pmu_nhm_enable_all; | 1177 | x86_pmu.enable_all = intel_pmu_nhm_enable_all; |
1178 | x86_pmu.pebs_constraints = intel_westmere_pebs_event_constraints; | ||
1175 | pr_cont("Westmere events, "); | 1179 | pr_cont("Westmere events, "); |
1176 | break; | 1180 | break; |
1177 | 1181 | ||
diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c index 825199834885..b95c66ae4a2a 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_ds.c +++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c | |||
@@ -361,30 +361,50 @@ static int intel_pmu_drain_bts_buffer(void) | |||
361 | /* | 361 | /* |
362 | * PEBS | 362 | * PEBS |
363 | */ | 363 | */ |
364 | 364 | static struct event_constraint intel_core2_pebs_event_constraints[] = { | |
365 | static struct event_constraint intel_core_pebs_events[] = { | 365 | PEBS_EVENT_CONSTRAINT(0x00c0, 0x1), /* INST_RETIRED.ANY */ |
366 | PEBS_EVENT_CONSTRAINT(0x00c0, 0x1), /* INSTR_RETIRED.ANY */ | ||
367 | PEBS_EVENT_CONSTRAINT(0xfec1, 0x1), /* X87_OPS_RETIRED.ANY */ | 366 | PEBS_EVENT_CONSTRAINT(0xfec1, 0x1), /* X87_OPS_RETIRED.ANY */ |
368 | PEBS_EVENT_CONSTRAINT(0x00c5, 0x1), /* BR_INST_RETIRED.MISPRED */ | 367 | PEBS_EVENT_CONSTRAINT(0x00c5, 0x1), /* BR_INST_RETIRED.MISPRED */ |
369 | PEBS_EVENT_CONSTRAINT(0x1fc7, 0x1), /* SIMD_INST_RETURED.ANY */ | 368 | PEBS_EVENT_CONSTRAINT(0x1fc7, 0x1), /* SIMD_INST_RETURED.ANY */ |
370 | PEBS_EVENT_CONSTRAINT(0x01cb, 0x1), /* MEM_LOAD_RETIRED.L1D_MISS */ | 369 | INTEL_EVENT_CONSTRAINT(0xcb, 0x1), /* MEM_LOAD_RETIRED.* */ |
371 | PEBS_EVENT_CONSTRAINT(0x02cb, 0x1), /* MEM_LOAD_RETIRED.L1D_LINE_MISS */ | ||
372 | PEBS_EVENT_CONSTRAINT(0x04cb, 0x1), /* MEM_LOAD_RETIRED.L2_MISS */ | ||
373 | PEBS_EVENT_CONSTRAINT(0x08cb, 0x1), /* MEM_LOAD_RETIRED.L2_LINE_MISS */ | ||
374 | PEBS_EVENT_CONSTRAINT(0x10cb, 0x1), /* MEM_LOAD_RETIRED.DTLB_MISS */ | ||
375 | EVENT_CONSTRAINT_END | 370 | EVENT_CONSTRAINT_END |
376 | }; | 371 | }; |
377 | 372 | ||
378 | static struct event_constraint intel_nehalem_pebs_events[] = { | 373 | static struct event_constraint intel_atom_pebs_event_constraints[] = { |
379 | PEBS_EVENT_CONSTRAINT(0x00c0, 0xf), /* INSTR_RETIRED.ANY */ | 374 | PEBS_EVENT_CONSTRAINT(0x00c0, 0x1), /* INST_RETIRED.ANY */ |
380 | PEBS_EVENT_CONSTRAINT(0xfec1, 0xf), /* X87_OPS_RETIRED.ANY */ | 375 | PEBS_EVENT_CONSTRAINT(0x00c5, 0x1), /* MISPREDICTED_BRANCH_RETIRED */ |
381 | PEBS_EVENT_CONSTRAINT(0x00c5, 0xf), /* BR_INST_RETIRED.MISPRED */ | 376 | INTEL_EVENT_CONSTRAINT(0xcb, 0x1), /* MEM_LOAD_RETIRED.* */ |
382 | PEBS_EVENT_CONSTRAINT(0x1fc7, 0xf), /* SIMD_INST_RETURED.ANY */ | 377 | EVENT_CONSTRAINT_END |
383 | PEBS_EVENT_CONSTRAINT(0x01cb, 0xf), /* MEM_LOAD_RETIRED.L1D_MISS */ | 378 | }; |
384 | PEBS_EVENT_CONSTRAINT(0x02cb, 0xf), /* MEM_LOAD_RETIRED.L1D_LINE_MISS */ | 379 | |
385 | PEBS_EVENT_CONSTRAINT(0x04cb, 0xf), /* MEM_LOAD_RETIRED.L2_MISS */ | 380 | static struct event_constraint intel_nehalem_pebs_event_constraints[] = { |
386 | PEBS_EVENT_CONSTRAINT(0x08cb, 0xf), /* MEM_LOAD_RETIRED.L2_LINE_MISS */ | 381 | INTEL_EVENT_CONSTRAINT(0x0b, 0xf), /* MEM_INST_RETIRED.* */ |
387 | PEBS_EVENT_CONSTRAINT(0x10cb, 0xf), /* MEM_LOAD_RETIRED.DTLB_MISS */ | 382 | INTEL_EVENT_CONSTRAINT(0x0f, 0xf), /* MEM_UNCORE_RETIRED.* */ |
383 | PEBS_EVENT_CONSTRAINT(0x010c, 0xf), /* MEM_STORE_RETIRED.DTLB_MISS */ | ||
384 | INTEL_EVENT_CONSTRAINT(0xc0, 0xf), /* INST_RETIRED.ANY */ | ||
385 | INTEL_EVENT_CONSTRAINT(0xc2, 0xf), /* UOPS_RETIRED.* */ | ||
386 | INTEL_EVENT_CONSTRAINT(0xc4, 0xf), /* BR_INST_RETIRED.* */ | ||
387 | PEBS_EVENT_CONSTRAINT(0x02c5, 0xf), /* BR_MISP_RETIRED.NEAR_CALL */ | ||
388 | INTEL_EVENT_CONSTRAINT(0xc7, 0xf), /* SSEX_UOPS_RETIRED.* */ | ||
389 | PEBS_EVENT_CONSTRAINT(0x20c8, 0xf), /* ITLB_MISS_RETIRED */ | ||
390 | INTEL_EVENT_CONSTRAINT(0xcb, 0xf), /* MEM_LOAD_RETIRED.* */ | ||
391 | INTEL_EVENT_CONSTRAINT(0xf7, 0xf), /* FP_ASSIST.* */ | ||
392 | EVENT_CONSTRAINT_END | ||
393 | }; | ||
394 | |||
395 | static struct event_constraint intel_westmere_pebs_event_constraints[] = { | ||
396 | INTEL_EVENT_CONSTRAINT(0x0b, 0xf), /* MEM_INST_RETIRED.* */ | ||
397 | INTEL_EVENT_CONSTRAINT(0x0f, 0xf), /* MEM_UNCORE_RETIRED.* */ | ||
398 | PEBS_EVENT_CONSTRAINT(0x010c, 0xf), /* MEM_STORE_RETIRED.DTLB_MISS */ | ||
399 | INTEL_EVENT_CONSTRAINT(0xc0, 0xf), /* INSTR_RETIRED.* */ | ||
400 | INTEL_EVENT_CONSTRAINT(0xc2, 0xf), /* UOPS_RETIRED.* */ | ||
401 | |||
402 | INTEL_EVENT_CONSTRAINT(0xc4, 0xf), /* BR_INST_RETIRED.* */ | ||
403 | INTEL_EVENT_CONSTRAINT(0xc5, 0xf), /* BR_MISP_RETIRED.* */ | ||
404 | INTEL_EVENT_CONSTRAINT(0xc7, 0xf), /* SSEX_UOPS_RETIRED.* */ | ||
405 | PEBS_EVENT_CONSTRAINT(0x20c8, 0xf), /* ITLB_MISS_RETIRED */ | ||
406 | INTEL_EVENT_CONSTRAINT(0xcb, 0xf), /* MEM_LOAD_RETIRED.* */ | ||
407 | INTEL_EVENT_CONSTRAINT(0xf7, 0xf), /* FP_ASSIST.* */ | ||
388 | EVENT_CONSTRAINT_END | 408 | EVENT_CONSTRAINT_END |
389 | }; | 409 | }; |
390 | 410 | ||
@@ -733,20 +753,17 @@ static void intel_ds_init(void) | |||
733 | printk(KERN_CONT "PEBS fmt0%c, ", pebs_type); | 753 | printk(KERN_CONT "PEBS fmt0%c, ", pebs_type); |
734 | x86_pmu.pebs_record_size = sizeof(struct pebs_record_core); | 754 | x86_pmu.pebs_record_size = sizeof(struct pebs_record_core); |
735 | x86_pmu.drain_pebs = intel_pmu_drain_pebs_core; | 755 | x86_pmu.drain_pebs = intel_pmu_drain_pebs_core; |
736 | x86_pmu.pebs_constraints = intel_core_pebs_events; | ||
737 | break; | 756 | break; |
738 | 757 | ||
739 | case 1: | 758 | case 1: |
740 | printk(KERN_CONT "PEBS fmt1%c, ", pebs_type); | 759 | printk(KERN_CONT "PEBS fmt1%c, ", pebs_type); |
741 | x86_pmu.pebs_record_size = sizeof(struct pebs_record_nhm); | 760 | x86_pmu.pebs_record_size = sizeof(struct pebs_record_nhm); |
742 | x86_pmu.drain_pebs = intel_pmu_drain_pebs_nhm; | 761 | x86_pmu.drain_pebs = intel_pmu_drain_pebs_nhm; |
743 | x86_pmu.pebs_constraints = intel_nehalem_pebs_events; | ||
744 | break; | 762 | break; |
745 | 763 | ||
746 | default: | 764 | default: |
747 | printk(KERN_CONT "no PEBS fmt%d%c, ", format, pebs_type); | 765 | printk(KERN_CONT "no PEBS fmt%d%c, ", format, pebs_type); |
748 | x86_pmu.pebs = 0; | 766 | x86_pmu.pebs = 0; |
749 | break; | ||
750 | } | 767 | } |
751 | } | 768 | } |
752 | } | 769 | } |