History

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

Linus Torvalds committed 10 years ago

Commit 9c0e28a2 parents 2507c85 3bf62152 files · +4 −3Browse files

Unified · Split

2 files
  1. arch/x86/events/intel/bts.c +3 −2
  2. kernel/events/core.c +1 −1
arch/x86/events/intel/bts.c+3−2
@@ -455,7 +455,7 @@ int intel_bts_interrupt(void) · 454 unmodified lines
455455 * The only surefire way of knowing if this NMI is ours is by checking
456456 * the write ptr against the PMI threshold.
457457 */
458− if (ds->bts_index >= ds->bts_interrupt_threshold)
458+ if (ds && (ds->bts_index >= ds->bts_interrupt_threshold))
459459 handled = 1;
460460
461461 /*
@@ -584,7 +584,8 @@ static __init int bts_init(void) · 122 unmodified lines
584584 if (!boot_cpu_has(X86_FEATURE_DTES64) || !x86_pmu.bts)
585585 return -ENODEV;
586586
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;
588589 bts_pmu.task_ctx_nr = perf_sw_context;
589590 bts_pmu.event_init = bts_event_init;
590591 bts_pmu.add = bts_event_add;
kernel/events/core.c+1−1
@@ -3929,7 +3929,7 @@ static void exclusive_event_destroy(struct perf_event *event) · 3928 unmodified lines
39293929
39303930 static bool exclusive_event_match(struct perf_event *e1, struct perf_event *e2)
39313931 {
3932− if ((e1->pmu->capabilities & PERF_PMU_CAP_EXCLUSIVE) &&
3932+ if ((e1->pmu == e2->pmu) &&
39333933 (e1->cpu == e2->cpu ||
39343934 e1->cpu == -1 ||
39353935 e2->cpu == -1))