aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-09-24 15:44:28 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-09-24 15:44:28 -0400
commit9c0e28a7be656d737fb18998e2dcb0b8ce595643 (patch)
tree10f54f40da96c519ba2d781cae9398dfc73a3a2c
parent2507c856620cc7474e6101b0a05f82ac0ae5bf69 (diff)
parent3bf6215a1b30db7df6083c708caab3fe1a8e8abe (diff)
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Thomas Gleixner: "Three fixlets for perf: - add a missing NULL pointer check in the intel BTS driver - make BTS an exclusive PMU because BTS can only handle one event at a time - ensure that exclusive events are limited to one PMU so that several exclusive events can be scheduled on different PMU instances" * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: perf/core: Limit matching exclusive events to one PMU perf/x86/intel/bts: Make it an exclusive PMU perf/x86/intel/bts: Make sure debug store is valid
-rw-r--r--arch/x86/events/intel/bts.c5
-rw-r--r--kernel/events/core.c2
2 files changed, 4 insertions, 3 deletions
diff --git a/arch/x86/events/intel/bts.c b/arch/x86/events/intel/bts.c
index bdcd6510992c..982c9e31daca 100644
--- a/arch/x86/events/intel/bts.c
+++ b/arch/x86/events/intel/bts.c
@@ -455,7 +455,7 @@ int intel_bts_interrupt(void)
455 * The only surefire way of knowing if this NMI is ours is by checking 455 * The only surefire way of knowing if this NMI is ours is by checking
456 * the write ptr against the PMI threshold. 456 * the write ptr against the PMI threshold.
457 */ 457 */
458 if (ds->bts_index >= ds->bts_interrupt_threshold) 458 if (ds && (ds->bts_index >= ds->bts_interrupt_threshold))
459 handled = 1; 459 handled = 1;
460 460
461 /* 461 /*
@@ -584,7 +584,8 @@ static __init int bts_init(void)
584 if (!boot_cpu_has(X86_FEATURE_DTES64) || !x86_pmu.bts) 584 if (!boot_cpu_has(X86_FEATURE_DTES64) || !x86_pmu.bts)
585 return -ENODEV; 585 return -ENODEV;
586 586
587 bts_pmu.capabilities = PERF_PMU_CAP_AUX_NO_SG | PERF_PMU_CAP_ITRACE; 587 bts_pmu.capabilities = PERF_PMU_CAP_AUX_NO_SG | PERF_PMU_CAP_ITRACE |
588 PERF_PMU_CAP_EXCLUSIVE;
588 bts_pmu.task_ctx_nr = perf_sw_context; 589 bts_pmu.task_ctx_nr = perf_sw_context;
589 bts_pmu.event_init = bts_event_init; 590 bts_pmu.event_init = bts_event_init;
590 bts_pmu.add = bts_event_add; 591 bts_pmu.add = bts_event_add;
diff --git a/kernel/events/core.c b/kernel/events/core.c
index a54f2c2cdb20..fc9bb2225291 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -3929,7 +3929,7 @@ static void exclusive_event_destroy(struct perf_event *event)
3929 3929
3930static bool exclusive_event_match(struct perf_event *e1, struct perf_event *e2) 3930static bool exclusive_event_match(struct perf_event *e1, struct perf_event *e2)
3931{ 3931{
3932 if ((e1->pmu->capabilities & PERF_PMU_CAP_EXCLUSIVE) && 3932 if ((e1->pmu == e2->pmu) &&
3933 (e1->cpu == e2->cpu || 3933 (e1->cpu == e2->cpu ||
3934 e1->cpu == -1 || 3934 e1->cpu == -1 ||
3935 e2->cpu == -1)) 3935 e2->cpu == -1))