diff options
author | Yan, Zheng <zheng.z.yan@intel.com> | 2013-07-18 05:02:23 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2013-09-02 02:42:47 -0400 |
commit | 53ad0447208d3f5897f673ca0b16c776583eedba (patch) | |
tree | 6966be991efc98edce985854defe71b62ff4f116 | |
parent | ea79ca0de05198159bcb8a45479122a75e4a5861 (diff) |
perf/x86: use INTEL_UEVENT_EXTRA_REG to define MSR_OFFCORE_RSP_X
Silvermont (22nm Atom) has two offcore response configuration MSRs,
unlike other Intel CPU, its event code for MSR_OFFCORE_RSP_1 is 0x02b7.
To avoid complicating intel_fixup_er(), use INTEL_UEVENT_EXTRA_REG to
define MSR_OFFCORE_RSP_X. So intel_fixup_er() can find the event code
for OFFCORE_RSP_N by x86_pmu.extra_regs[N].event.
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1374138144-17278-1-git-send-email-zheng.z.yan@intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index a45d8d4ace10..0d59a42847c4 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c | |||
@@ -81,7 +81,8 @@ static struct event_constraint intel_nehalem_event_constraints[] __read_mostly = | |||
81 | 81 | ||
82 | static struct extra_reg intel_nehalem_extra_regs[] __read_mostly = | 82 | static struct extra_reg intel_nehalem_extra_regs[] __read_mostly = |
83 | { | 83 | { |
84 | INTEL_EVENT_EXTRA_REG(0xb7, MSR_OFFCORE_RSP_0, 0xffff, RSP_0), | 84 | /* must define OFFCORE_RSP_X first, see intel_fixup_er() */ |
85 | INTEL_UEVENT_EXTRA_REG(0x01b7, MSR_OFFCORE_RSP_0, 0xffff, RSP_0), | ||
85 | INTEL_UEVENT_PEBS_LDLAT_EXTRA_REG(0x100b), | 86 | INTEL_UEVENT_PEBS_LDLAT_EXTRA_REG(0x100b), |
86 | EVENT_EXTRA_END | 87 | EVENT_EXTRA_END |
87 | }; | 88 | }; |
@@ -143,8 +144,9 @@ static struct event_constraint intel_ivb_event_constraints[] __read_mostly = | |||
143 | 144 | ||
144 | static struct extra_reg intel_westmere_extra_regs[] __read_mostly = | 145 | static struct extra_reg intel_westmere_extra_regs[] __read_mostly = |
145 | { | 146 | { |
146 | INTEL_EVENT_EXTRA_REG(0xb7, MSR_OFFCORE_RSP_0, 0xffff, RSP_0), | 147 | /* must define OFFCORE_RSP_X first, see intel_fixup_er() */ |
147 | INTEL_EVENT_EXTRA_REG(0xbb, MSR_OFFCORE_RSP_1, 0xffff, RSP_1), | 148 | INTEL_UEVENT_EXTRA_REG(0x01b7, MSR_OFFCORE_RSP_0, 0xffff, RSP_0), |
149 | INTEL_UEVENT_EXTRA_REG(0x01bb, MSR_OFFCORE_RSP_1, 0xffff, RSP_1), | ||
148 | INTEL_UEVENT_PEBS_LDLAT_EXTRA_REG(0x100b), | 150 | INTEL_UEVENT_PEBS_LDLAT_EXTRA_REG(0x100b), |
149 | EVENT_EXTRA_END | 151 | EVENT_EXTRA_END |
150 | }; | 152 | }; |
@@ -163,15 +165,17 @@ static struct event_constraint intel_gen_event_constraints[] __read_mostly = | |||
163 | }; | 165 | }; |
164 | 166 | ||
165 | static struct extra_reg intel_snb_extra_regs[] __read_mostly = { | 167 | static struct extra_reg intel_snb_extra_regs[] __read_mostly = { |
166 | INTEL_EVENT_EXTRA_REG(0xb7, MSR_OFFCORE_RSP_0, 0x3f807f8fffull, RSP_0), | 168 | /* must define OFFCORE_RSP_X first, see intel_fixup_er() */ |
167 | INTEL_EVENT_EXTRA_REG(0xbb, MSR_OFFCORE_RSP_1, 0x3f807f8fffull, RSP_1), | 169 | INTEL_UEVENT_EXTRA_REG(0x01b7, MSR_OFFCORE_RSP_0, 0x3f807f8fffull, RSP_0), |
170 | INTEL_UEVENT_EXTRA_REG(0x01bb, MSR_OFFCORE_RSP_1, 0x3f807f8fffull, RSP_1), | ||
168 | INTEL_UEVENT_PEBS_LDLAT_EXTRA_REG(0x01cd), | 171 | INTEL_UEVENT_PEBS_LDLAT_EXTRA_REG(0x01cd), |
169 | EVENT_EXTRA_END | 172 | EVENT_EXTRA_END |
170 | }; | 173 | }; |
171 | 174 | ||
172 | static struct extra_reg intel_snbep_extra_regs[] __read_mostly = { | 175 | static struct extra_reg intel_snbep_extra_regs[] __read_mostly = { |
173 | INTEL_EVENT_EXTRA_REG(0xb7, MSR_OFFCORE_RSP_0, 0x3fffff8fffull, RSP_0), | 176 | /* must define OFFCORE_RSP_X first, see intel_fixup_er() */ |
174 | INTEL_EVENT_EXTRA_REG(0xbb, MSR_OFFCORE_RSP_1, 0x3fffff8fffull, RSP_1), | 177 | INTEL_UEVENT_EXTRA_REG(0x01b7, MSR_OFFCORE_RSP_0, 0x3fffff8fffull, RSP_0), |
178 | INTEL_UEVENT_EXTRA_REG(0x01bb, MSR_OFFCORE_RSP_1, 0x3fffff8fffull, RSP_1), | ||
175 | INTEL_UEVENT_PEBS_LDLAT_EXTRA_REG(0x01cd), | 179 | INTEL_UEVENT_PEBS_LDLAT_EXTRA_REG(0x01cd), |
176 | EVENT_EXTRA_END | 180 | EVENT_EXTRA_END |
177 | }; | 181 | }; |
@@ -1301,11 +1305,11 @@ static void intel_fixup_er(struct perf_event *event, int idx) | |||
1301 | 1305 | ||
1302 | if (idx == EXTRA_REG_RSP_0) { | 1306 | if (idx == EXTRA_REG_RSP_0) { |
1303 | event->hw.config &= ~INTEL_ARCH_EVENT_MASK; | 1307 | event->hw.config &= ~INTEL_ARCH_EVENT_MASK; |
1304 | event->hw.config |= 0x01b7; | 1308 | event->hw.config |= x86_pmu.extra_regs[EXTRA_REG_RSP_0].event; |
1305 | event->hw.extra_reg.reg = MSR_OFFCORE_RSP_0; | 1309 | event->hw.extra_reg.reg = MSR_OFFCORE_RSP_0; |
1306 | } else if (idx == EXTRA_REG_RSP_1) { | 1310 | } else if (idx == EXTRA_REG_RSP_1) { |
1307 | event->hw.config &= ~INTEL_ARCH_EVENT_MASK; | 1311 | event->hw.config &= ~INTEL_ARCH_EVENT_MASK; |
1308 | event->hw.config |= 0x01bb; | 1312 | event->hw.config |= x86_pmu.extra_regs[EXTRA_REG_RSP_1].event; |
1309 | event->hw.extra_reg.reg = MSR_OFFCORE_RSP_1; | 1313 | event->hw.extra_reg.reg = MSR_OFFCORE_RSP_1; |
1310 | } | 1314 | } |
1311 | } | 1315 | } |