aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCyrill Gorcunov <gorcunov@gmail.com>2011-07-21 12:06:25 -0400
committerIngo Molnar <mingo@elte.hu>2011-07-21 14:41:54 -0400
commitf53173e47dee5f7514d264796bec58d43ed0f67f (patch)
tree43ff4034a1abffc334927ce9ed7893900a3b3328
parentbaf040a0d1ac6319725c0fe400503683ac016580 (diff)
x86, perf: P4 PMU - Fix typos in comments and style cleanup
This patch: - fixes typos in comments and clarifies the text - renames obscure p4_event_alias::original and ::alter members to ::original and ::alternative as appropriate - drops parenthesis from the return of p4_get_alias_event() No functional changes. Reported-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> Link: http://lkml.kernel.org/r/20110721160625.GX7492@sun Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--arch/x86/include/asm/perf_event_p4.h2
-rw-r--r--arch/x86/kernel/cpu/perf_event_p4.c66
2 files changed, 31 insertions, 37 deletions
diff --git a/arch/x86/include/asm/perf_event_p4.h b/arch/x86/include/asm/perf_event_p4.h
index 4d86c86178f2..4f7e67e2345e 100644
--- a/arch/x86/include/asm/perf_event_p4.h
+++ b/arch/x86/include/asm/perf_event_p4.h
@@ -133,7 +133,7 @@
133 133
134/* 134/*
135 * In case of event aliasing we need to preserve some 135 * In case of event aliasing we need to preserve some
136 * caller bits otherwise the mapping won't be complete. 136 * caller bits, otherwise the mapping won't be complete.
137 */ 137 */
138#define P4_CONFIG_EVENT_ALIAS_MASK \ 138#define P4_CONFIG_EVENT_ALIAS_MASK \
139 (p4_config_pack_escr(P4_CONFIG_MASK_ESCR) | \ 139 (p4_config_pack_escr(P4_CONFIG_MASK_ESCR) | \
diff --git a/arch/x86/kernel/cpu/perf_event_p4.c b/arch/x86/kernel/cpu/perf_event_p4.c
index 8b7a0c306784..7809d2bcb209 100644
--- a/arch/x86/kernel/cpu/perf_event_p4.c
+++ b/arch/x86/kernel/cpu/perf_event_p4.c
@@ -571,35 +571,34 @@ static __initconst const u64 p4_hw_cache_event_ids
571}; 571};
572 572
573/* 573/*
574 * Because of Netburst being quite restricted in now 574 * Because of Netburst being quite restricted in how many
575 * many same events can run simultaneously, we use 575 * identical events may run simultaneously, we introduce event aliases,
576 * event aliases, ie different events which have the 576 * ie the different events which have the same functionality but
577 * same functionallity but use non-intersected resources 577 * utilize non-intersected resources (ESCR/CCCR/counter registers).
578 * (ESCR/CCCR/couter registers). This allow us to run
579 * two or more semi-same events together. It is done
580 * transparently to a user space.
581 * 578 *
582 * Never set any cusom internal bits such as P4_CONFIG_HT, 579 * This allow us to relax restrictions a bit and run two or more
583 * P4_CONFIG_ALIASABLE or bits for P4_PEBS_METRIC, they are 580 * identical events together.
584 * either up-to-dated automatically either not appliable
585 * at all.
586 * 581 *
587 * And be really carefull choosing aliases! 582 * Never set any custom internal bits such as P4_CONFIG_HT,
583 * P4_CONFIG_ALIASABLE or bits for P4_PEBS_METRIC, they are
584 * either up to date automatically or not applicable at all.
588 */ 585 */
589struct p4_event_alias { 586struct p4_event_alias {
590 u64 orig; 587 u64 original;
591 u64 alter; 588 u64 alternative;
592} p4_event_aliases[] = { 589} p4_event_aliases[] = {
593 { 590 {
594 /* 591 /*
595 * Non-halted cycles can be substituted with 592 * Non-halted cycles can be substituted with non-sleeping cycles (see
596 * non-sleeping cycles (see Intel SDM Vol3b for 593 * Intel SDM Vol3b for details). We need this alias to be able
597 * details). 594 * to run nmi-watchdog and 'perf top' (or any other user space tool
595 * which is interested in running PERF_COUNT_HW_CPU_CYCLES)
596 * simultaneously.
598 */ 597 */
599 .orig = 598 .original =
600 p4_config_pack_escr(P4_ESCR_EVENT(P4_EVENT_GLOBAL_POWER_EVENTS) | 599 p4_config_pack_escr(P4_ESCR_EVENT(P4_EVENT_GLOBAL_POWER_EVENTS) |
601 P4_ESCR_EMASK_BIT(P4_EVENT_GLOBAL_POWER_EVENTS, RUNNING)), 600 P4_ESCR_EMASK_BIT(P4_EVENT_GLOBAL_POWER_EVENTS, RUNNING)),
602 .alter = 601 .alternative =
603 p4_config_pack_escr(P4_ESCR_EVENT(P4_EVENT_EXECUTION_EVENT) | 602 p4_config_pack_escr(P4_ESCR_EVENT(P4_EVENT_EXECUTION_EVENT) |
604 P4_ESCR_EMASK_BIT(P4_EVENT_EXECUTION_EVENT, NBOGUS0)| 603 P4_ESCR_EMASK_BIT(P4_EVENT_EXECUTION_EVENT, NBOGUS0)|
605 P4_ESCR_EMASK_BIT(P4_EVENT_EXECUTION_EVENT, NBOGUS1)| 604 P4_ESCR_EMASK_BIT(P4_EVENT_EXECUTION_EVENT, NBOGUS1)|
@@ -620,25 +619,21 @@ static u64 p4_get_alias_event(u64 config)
620 int i; 619 int i;
621 620
622 /* 621 /*
623 * Probably we're lucky and don't have to do 622 * Only event with special mark is allowed,
624 * matching over all config bits. 623 * we're to be sure it didn't come as malformed
624 * RAW event.
625 */ 625 */
626 if (!(config & P4_CONFIG_ALIASABLE)) 626 if (!(config & P4_CONFIG_ALIASABLE))
627 return 0; 627 return 0;
628 628
629 config_match = config & P4_CONFIG_EVENT_ALIAS_MASK; 629 config_match = config & P4_CONFIG_EVENT_ALIAS_MASK;
630 630
631 /*
632 * If an event was previously swapped to the alter config
633 * we should swap it back otherwise contnention on registers
634 * will return back.
635 */
636 for (i = 0; i < ARRAY_SIZE(p4_event_aliases); i++) { 631 for (i = 0; i < ARRAY_SIZE(p4_event_aliases); i++) {
637 if (config_match == p4_event_aliases[i].orig) { 632 if (config_match == p4_event_aliases[i].original) {
638 config_match = p4_event_aliases[i].alter; 633 config_match = p4_event_aliases[i].alternative;
639 break; 634 break;
640 } else if (config_match == p4_event_aliases[i].alter) { 635 } else if (config_match == p4_event_aliases[i].alternative) {
641 config_match = p4_event_aliases[i].orig; 636 config_match = p4_event_aliases[i].original;
642 break; 637 break;
643 } 638 }
644 } 639 }
@@ -646,8 +641,7 @@ static u64 p4_get_alias_event(u64 config)
646 if (i >= ARRAY_SIZE(p4_event_aliases)) 641 if (i >= ARRAY_SIZE(p4_event_aliases))
647 return 0; 642 return 0;
648 643
649 return config_match | 644 return config_match | (config & P4_CONFIG_EVENT_ALIAS_IMMUTABLE_BITS);
650 (config & P4_CONFIG_EVENT_ALIAS_IMMUTABLE_BITS);
651} 645}
652 646
653static u64 p4_general_events[PERF_COUNT_HW_MAX] = { 647static u64 p4_general_events[PERF_COUNT_HW_MAX] = {
@@ -1229,9 +1223,9 @@ static int p4_pmu_schedule_events(struct cpu_hw_events *cpuc, int n, int *assign
1229 1223
1230again: 1224again:
1231 /* 1225 /*
1232 * Aliases are swappable so we may hit circular 1226 * It's possible to hit a circular lock
1233 * lock if both original config and alias need 1227 * between original and alternative events
1234 * resources (MSR registers) which already busy. 1228 * if both are scheduled already.
1235 */ 1229 */
1236 if (pass > 2) 1230 if (pass > 2)
1237 goto done; 1231 goto done;
@@ -1251,7 +1245,7 @@ again:
1251 cntr_idx = p4_next_cntr(thread, used_mask, bind); 1245 cntr_idx = p4_next_cntr(thread, used_mask, bind);
1252 if (cntr_idx == -1 || test_bit(escr_idx, escr_mask)) { 1246 if (cntr_idx == -1 || test_bit(escr_idx, escr_mask)) {
1253 /* 1247 /*
1254 * Probably an event alias is still available. 1248 * Check whether an event alias is still available.
1255 */ 1249 */
1256 config_alias = p4_get_alias_event(hwc->config); 1250 config_alias = p4_get_alias_event(hwc->config);
1257 if (!config_alias) 1251 if (!config_alias)