On Mon, 2017-11-20 at 12:57 +0100, Peter Zijlstra wrote: > On Fri, Nov 17, 2017 at 05:54:05PM -0800, Megha Dey wrote: > > + mutex_lock(&bm_counter_mutex); > > + for (i = 0; i < BM_MAX_COUNTERS; i++) { > > + if (bm_counter_owner[i] == NULL) { > > + counter_to_use = i; > > + bm_counter_owner[i] = event; > > + break; > > + } > > + } > > + mutex_unlock(&bm_counter_mutex); > > + > > + if (counter_to_use == -1) > > + return -EBUSY; > > > +static struct pmu intel_bm_pmu = { > > + .task_ctx_nr = perf_sw_context, > > + .attr_groups = intel_bm_attr_groups, > > + .event_init = intel_bm_event_init, > > + .add = intel_bm_event_add, > > + .del = intel_bm_event_del, > > +}; > > Still horrid.. still no.
It seems like perf_invalid_context does not support per task monitoring: find_get_context(): ctxn = pmu->task_ctx_nr; if (ctxn < 0) goto errout; Also, perf_hw_context is to be used only for core PMU, correct? That leaves us with only perf_sw_context to be used. Not sure if a new context needs to be implemented.