diff options
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/cpu/perf_event.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/perf_event.h | 8 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel.c | 6 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_ds.c | 4 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_uncore.c | 2 |
5 files changed, 15 insertions, 7 deletions
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c index 6e8ab0427041..8ba51518f689 100644 --- a/arch/x86/kernel/cpu/perf_event.c +++ b/arch/x86/kernel/cpu/perf_event.c | |||
@@ -1489,7 +1489,7 @@ static int __init init_hw_perf_events(void) | |||
1489 | 1489 | ||
1490 | unconstrained = (struct event_constraint) | 1490 | unconstrained = (struct event_constraint) |
1491 | __EVENT_CONSTRAINT(0, (1ULL << x86_pmu.num_counters) - 1, | 1491 | __EVENT_CONSTRAINT(0, (1ULL << x86_pmu.num_counters) - 1, |
1492 | 0, x86_pmu.num_counters, 0); | 1492 | 0, x86_pmu.num_counters, 0, 0); |
1493 | 1493 | ||
1494 | x86_pmu.attr_rdpmc = 1; /* enable userspace RDPMC usage by default */ | 1494 | x86_pmu.attr_rdpmc = 1; /* enable userspace RDPMC usage by default */ |
1495 | x86_pmu_format_group.attrs = x86_pmu.format_attrs; | 1495 | x86_pmu_format_group.attrs = x86_pmu.format_attrs; |
diff --git a/arch/x86/kernel/cpu/perf_event.h b/arch/x86/kernel/cpu/perf_event.h index b1518eed5f99..9686d38eb458 100644 --- a/arch/x86/kernel/cpu/perf_event.h +++ b/arch/x86/kernel/cpu/perf_event.h | |||
@@ -59,6 +59,7 @@ struct event_constraint { | |||
59 | u64 cmask; | 59 | u64 cmask; |
60 | int weight; | 60 | int weight; |
61 | int overlap; | 61 | int overlap; |
62 | int flags; | ||
62 | }; | 63 | }; |
63 | 64 | ||
64 | struct amd_nb { | 65 | struct amd_nb { |
@@ -170,16 +171,17 @@ struct cpu_hw_events { | |||
170 | void *kfree_on_online; | 171 | void *kfree_on_online; |
171 | }; | 172 | }; |
172 | 173 | ||
173 | #define __EVENT_CONSTRAINT(c, n, m, w, o) {\ | 174 | #define __EVENT_CONSTRAINT(c, n, m, w, o, f) {\ |
174 | { .idxmsk64 = (n) }, \ | 175 | { .idxmsk64 = (n) }, \ |
175 | .code = (c), \ | 176 | .code = (c), \ |
176 | .cmask = (m), \ | 177 | .cmask = (m), \ |
177 | .weight = (w), \ | 178 | .weight = (w), \ |
178 | .overlap = (o), \ | 179 | .overlap = (o), \ |
180 | .flags = f, \ | ||
179 | } | 181 | } |
180 | 182 | ||
181 | #define EVENT_CONSTRAINT(c, n, m) \ | 183 | #define EVENT_CONSTRAINT(c, n, m) \ |
182 | __EVENT_CONSTRAINT(c, n, m, HWEIGHT(n), 0) | 184 | __EVENT_CONSTRAINT(c, n, m, HWEIGHT(n), 0, 0) |
183 | 185 | ||
184 | /* | 186 | /* |
185 | * The overlap flag marks event constraints with overlapping counter | 187 | * The overlap flag marks event constraints with overlapping counter |
@@ -203,7 +205,7 @@ struct cpu_hw_events { | |||
203 | * and its counter masks must be kept at a minimum. | 205 | * and its counter masks must be kept at a minimum. |
204 | */ | 206 | */ |
205 | #define EVENT_CONSTRAINT_OVERLAP(c, n, m) \ | 207 | #define EVENT_CONSTRAINT_OVERLAP(c, n, m) \ |
206 | __EVENT_CONSTRAINT(c, n, m, HWEIGHT(n), 1) | 208 | __EVENT_CONSTRAINT(c, n, m, HWEIGHT(n), 1, 0) |
207 | 209 | ||
208 | /* | 210 | /* |
209 | * Constraint on the Event code. | 211 | * Constraint on the Event code. |
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index dab7580c47ae..df3beaac3397 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c | |||
@@ -1392,8 +1392,11 @@ x86_get_event_constraints(struct cpu_hw_events *cpuc, struct perf_event *event) | |||
1392 | 1392 | ||
1393 | if (x86_pmu.event_constraints) { | 1393 | if (x86_pmu.event_constraints) { |
1394 | for_each_event_constraint(c, x86_pmu.event_constraints) { | 1394 | for_each_event_constraint(c, x86_pmu.event_constraints) { |
1395 | if ((event->hw.config & c->cmask) == c->code) | 1395 | if ((event->hw.config & c->cmask) == c->code) { |
1396 | /* hw.flags zeroed at initialization */ | ||
1397 | event->hw.flags |= c->flags; | ||
1396 | return c; | 1398 | return c; |
1399 | } | ||
1397 | } | 1400 | } |
1398 | } | 1401 | } |
1399 | 1402 | ||
@@ -1438,6 +1441,7 @@ intel_put_shared_regs_event_constraints(struct cpu_hw_events *cpuc, | |||
1438 | static void intel_put_event_constraints(struct cpu_hw_events *cpuc, | 1441 | static void intel_put_event_constraints(struct cpu_hw_events *cpuc, |
1439 | struct perf_event *event) | 1442 | struct perf_event *event) |
1440 | { | 1443 | { |
1444 | event->hw.flags = 0; | ||
1441 | intel_put_shared_regs_event_constraints(cpuc, event); | 1445 | intel_put_shared_regs_event_constraints(cpuc, event); |
1442 | } | 1446 | } |
1443 | 1447 | ||
diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c index 826054a4f2ee..f30d85bcbda9 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_ds.c +++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c | |||
@@ -430,8 +430,10 @@ struct event_constraint *intel_pebs_constraints(struct perf_event *event) | |||
430 | 430 | ||
431 | if (x86_pmu.pebs_constraints) { | 431 | if (x86_pmu.pebs_constraints) { |
432 | for_each_event_constraint(c, x86_pmu.pebs_constraints) { | 432 | for_each_event_constraint(c, x86_pmu.pebs_constraints) { |
433 | if ((event->hw.config & c->cmask) == c->code) | 433 | if ((event->hw.config & c->cmask) == c->code) { |
434 | event->hw.flags |= c->flags; | ||
434 | return c; | 435 | return c; |
436 | } | ||
435 | } | 437 | } |
436 | } | 438 | } |
437 | 439 | ||
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c index b43200dbfe7e..75da9e18b128 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c | |||
@@ -2438,7 +2438,7 @@ static int __init uncore_type_init(struct intel_uncore_type *type) | |||
2438 | 2438 | ||
2439 | type->unconstrainted = (struct event_constraint) | 2439 | type->unconstrainted = (struct event_constraint) |
2440 | __EVENT_CONSTRAINT(0, (1ULL << type->num_counters) - 1, | 2440 | __EVENT_CONSTRAINT(0, (1ULL << type->num_counters) - 1, |
2441 | 0, type->num_counters, 0); | 2441 | 0, type->num_counters, 0, 0); |
2442 | 2442 | ||
2443 | for (i = 0; i < type->num_boxes; i++) { | 2443 | for (i = 0; i < type->num_boxes; i++) { |
2444 | pmus[i].func_id = -1; | 2444 | pmus[i].func_id = -1; |