On Thu, Jan 05, 2017 at 07:07:05AM -0800, tip-bot for David Carrillo-Cisneros wrote: > --- a/arch/x86/events/intel/cstate.c > +++ b/arch/x86/events/intel/cstate.c > @@ -434,6 +434,7 @@ static struct pmu cstate_core_pmu = { > .stop = cstate_pmu_event_stop, > .read = cstate_pmu_event_update, > .capabilities = PERF_PMU_CAP_NO_INTERRUPT, > + .module = THIS_MODULE, > }; > > static struct pmu cstate_pkg_pmu = { > @@ -447,6 +448,7 @@ static struct pmu cstate_pkg_pmu = { > .stop = cstate_pmu_event_stop, > .read = cstate_pmu_event_update, > .capabilities = PERF_PMU_CAP_NO_INTERRUPT, > + .module = THIS_MODULE, > }; > > static const struct cstate_model nhm_cstates __initconst = { > diff --git a/arch/x86/events/intel/rapl.c b/arch/x86/events/intel/rapl.c > index bd34124..17c3564 100644 > --- a/arch/x86/events/intel/rapl.c > +++ b/arch/x86/events/intel/rapl.c > @@ -697,6 +697,7 @@ static int __init init_rapl_pmus(void) > rapl_pmus->pmu.start = rapl_pmu_event_start; > rapl_pmus->pmu.stop = rapl_pmu_event_stop; > rapl_pmus->pmu.read = rapl_pmu_event_read; > + rapl_pmus->pmu.module = THIS_MODULE; > return 0; > } > > diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c > index 97c246f..8c4ccdc 100644 > --- a/arch/x86/events/intel/uncore.c > +++ b/arch/x86/events/intel/uncore.c > @@ -733,6 +733,7 @@ static int uncore_pmu_register(struct intel_uncore_pmu *pmu) > .start = uncore_pmu_event_start, > .stop = uncore_pmu_event_stop, > .read = uncore_pmu_event_read, > + .module = THIS_MODULE, > }; > } else { > pmu->pmu = *pmu->type->pmu; Ah, forgot about this, thanks for picking it up. The first time I saw this I thought about doing something like the below, but never got around to testing if that works and subsequently forgot about things again. Does this make sense and or work? --- diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 4741ecdb9817..70f8a5a2e224 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -852,7 +852,14 @@ extern int perf_aux_output_skip(struct perf_output_handle *handle, unsigned long size); extern void *perf_get_aux(struct perf_output_handle *handle); -extern int perf_pmu_register(struct pmu *pmu, const char *name, int type); +extern int __perf_pmu_register(struct pmu *pmu, const char *name, int type); + +#define perf_pmu_register(_pmu, _name, _type) \ +({ \ + (_pmu)->module = THIS_MODULE; \ + __perf_pmu_register((_pmu), (_name), (_type)); \ +}) + extern void perf_pmu_unregister(struct pmu *pmu); extern int perf_num_counters(void); diff --git a/kernel/events/core.c b/kernel/events/core.c index faf073d0287f..cde2004d932d 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -8752,7 +8767,7 @@ static int pmu_dev_alloc(struct pmu *pmu) static struct lock_class_key cpuctx_mutex; static struct lock_class_key cpuctx_lock; -int perf_pmu_register(struct pmu *pmu, const char *name, int type) +int __perf_pmu_register(struct pmu *pmu, const char *name, int type) { int cpu, ret; -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html