--- x/kernel/events/core.c +++ y/kernel/events/core.c @@ -4816,6 +4816,7 @@ find_get_pmu_context(struct pmu *pmu, st raw_spin_lock_irq(&ctx->lock); list_add(&epc->pmu_ctx_entry, &ctx->pmu_ctx_list); epc->ctx = ctx; + get_ctx(ctx); raw_spin_unlock_irq(&ctx->lock); } else { WARN_ON_ONCE(epc->ctx != ctx); @@ -4914,6 +4915,7 @@ static void put_pmu_ctx(struct perf_even list_del_init(&epc->pmu_ctx_entry); epc->ctx = NULL; raw_spin_unlock_irqrestore(&ctx->lock, flags); + put_ctx(ctx); } WARN_ON_ONCE(!list_empty(&epc->pinned_active));