diff options
| -rw-r--r-- | kernel/events/core.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c index 2b02c9fda790..1cd5eef1fcdd 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -1562,8 +1562,10 @@ static void perf_remove_from_context(struct perf_event *event, bool detach_group  	if (!task) {  		/* -		 * Per cpu events are removed via an smp call and -		 * the removal is always successful. +		 * Per cpu events are removed via an smp call. The removal can +		 * fail if the CPU is currently offline, but in that case we +		 * already called __perf_remove_from_context from +		 * perf_event_exit_cpu.  		 */  		cpu_function_call(event->cpu, __perf_remove_from_context, &re);  		return; @@ -8117,7 +8119,7 @@ static void perf_pmu_rotate_stop(struct pmu *pmu)  static void __perf_event_exit_context(void *__info)  { -	struct remove_event re = { .detach_group = false }; +	struct remove_event re = { .detach_group = true };  	struct perf_event_context *ctx = __info;  	perf_pmu_rotate_stop(ctx->pmu);  | 
