From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934220AbeAXPdE (ORCPT ); Wed, 24 Jan 2018 10:33:04 -0500 Received: from mail-wr0-f193.google.com ([209.85.128.193]:44078 "EHLO mail-wr0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933936AbeAXPdB (ORCPT ); Wed, 24 Jan 2018 10:33:01 -0500 X-Google-Smtp-Source: AH8x226U2+l0aGF0lfbBJCdKqqIy+xCzy3+6y5ea6a64sZ4T1Rx20ap3Zqq8LLlDM3Q8G0aD7w+djQ== Date: Wed, 24 Jan 2018 16:32:57 +0100 From: Ingo Molnar To: Peter Zijlstra Cc: hpa@zytor.com, tglx@linutronix.de, linux-kernel@vger.kernel.org, rostedt@goodmis.org, torvalds@linux-foundation.org, linux-tip-commits@vger.kernel.org Subject: Re: [tip:perf/urgent] perf/core: Fix lock inversion between perf,trace,cpuhp Message-ID: <20180124153257.kzekv6cjxgk7djkh@gmail.com> References: <20180124113629.GS2228@hirez.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180124113629.GS2228@hirez.programming.kicks-ass.net> User-Agent: NeoMutt/20170609 (1.8.3) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org * Peter Zijlstra wrote: > On Wed, Jan 24, 2018 at 02:39:16AM -0800, tip-bot for Peter Zijlstra wrote: > > Commit-ID: 25695067c32e34047b5490436a90af507fda1c2e > > Gitweb: https://git.kernel.org/tip/25695067c32e34047b5490436a90af507fda1c2e > > Author: Peter Zijlstra > > AuthorDate: Tue, 9 Jan 2018 13:10:30 +0100 > > Committer: Ingo Molnar > > CommitDate: Wed, 24 Jan 2018 10:07:23 +0100 > > > > perf/core: Fix lock inversion between perf,trace,cpuhp > > > > Lockdep gifted us with noticing the following race: > > > > perf_trace_init() > > perf_trace_event_init() > > perf_trace_event_reg() > > tp_event->class->reg() := tracepoint_probe_register > > trace_point_add_func() > > > > perf_event_init_cpu() > > > > perf_event_task_disable() > > mutex_lock(¤t->perf_event_mutex) > > > > do_exit() > > task_work_run() > > __fput() > > perf_release() > > perf_event_release_kernel() > > free_event() > > _free_event() > > event->destroy() := perf_trace_destroy > > > > You seem to have lost part of the Changelog, mine looks like: > > perf_trace_init() > #0 mutex_lock(&event_mutex) > perf_trace_event_init() > perf_trace_event_reg() > tp_event->class->reg() := tracepoint_probe_register > #1 mutex_lock(&tracepoints_mutex) > trace_point_add_func() > #2 static_key_enable() > > > #2 do_cpu_up() > perf_event_init_cpu() > #3 mutex_lock(&pmus_lock) > #4 mutex_lock(&ctx->mutex) > > > perf_event_task_disable() > mutex_lock(¤t->perf_event_mutex) > #4 ctx = perf_event_ctx_lock() > #5 perf_event_for_each_child() > > > do_exit() > task_work_run() > __fput() > perf_release() > perf_event_release_kernel() > #4 mutex_lock(&ctx->mutex) > #5 mutex_lock(&event->child_mutex) > free_event() > _free_event() > event->destroy() := perf_trace_destroy > #0 mutex_lock(&event_mutex); > > > > Which shows an actual deadlock. Oh, the '#' was probably interpreted as a comment when I applied it ... Thanks, Ingo