Commit 9c0e28a7 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 2507c856 3bf6215a
...@@ -455,7 +455,7 @@ int intel_bts_interrupt(void) ...@@ -455,7 +455,7 @@ int intel_bts_interrupt(void)
* The only surefire way of knowing if this NMI is ours is by checking * The only surefire way of knowing if this NMI is ours is by checking
* the write ptr against the PMI threshold. * the write ptr against the PMI threshold.
*/ */
if (ds->bts_index >= ds->bts_interrupt_threshold) if (ds && (ds->bts_index >= ds->bts_interrupt_threshold))
handled = 1; handled = 1;
/* /*
...@@ -584,7 +584,8 @@ static __init int bts_init(void) ...@@ -584,7 +584,8 @@ static __init int bts_init(void)
if (!boot_cpu_has(X86_FEATURE_DTES64) || !x86_pmu.bts) if (!boot_cpu_has(X86_FEATURE_DTES64) || !x86_pmu.bts)
return -ENODEV; return -ENODEV;
bts_pmu.capabilities = PERF_PMU_CAP_AUX_NO_SG | PERF_PMU_CAP_ITRACE; bts_pmu.capabilities = PERF_PMU_CAP_AUX_NO_SG | PERF_PMU_CAP_ITRACE |
PERF_PMU_CAP_EXCLUSIVE;
bts_pmu.task_ctx_nr = perf_sw_context; bts_pmu.task_ctx_nr = perf_sw_context;
bts_pmu.event_init = bts_event_init; bts_pmu.event_init = bts_event_init;
bts_pmu.add = bts_event_add; bts_pmu.add = bts_event_add;
......
...@@ -3929,7 +3929,7 @@ static void exclusive_event_destroy(struct perf_event *event) ...@@ -3929,7 +3929,7 @@ static void exclusive_event_destroy(struct perf_event *event)
static bool exclusive_event_match(struct perf_event *e1, struct perf_event *e2) static bool exclusive_event_match(struct perf_event *e1, struct perf_event *e2)
{ {
if ((e1->pmu->capabilities & PERF_PMU_CAP_EXCLUSIVE) && if ((e1->pmu == e2->pmu) &&
(e1->cpu == e2->cpu || (e1->cpu == e2->cpu ||
e1->cpu == -1 || e1->cpu == -1 ||
e2->cpu == -1)) e2->cpu == -1))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment