From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 39642C433E0 for ; Sun, 17 May 2020 08:49:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1E3CF206D5 for ; Sun, 17 May 2020 08:49:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727768AbgEQItP (ORCPT ); Sun, 17 May 2020 04:49:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35548 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727046AbgEQItO (ORCPT ); Sun, 17 May 2020 04:49:14 -0400 Received: from Galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8F65DC061A0C for ; Sun, 17 May 2020 01:49:14 -0700 (PDT) Received: from p5de0bf0b.dip0.t-ipconnect.de ([93.224.191.11] helo=nanos.tec.linutronix.de) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1jaExr-0001Dt-QL; Sun, 17 May 2020 10:48:07 +0200 Received: by nanos.tec.linutronix.de (Postfix, from userid 1000) id A406D100F19; Sun, 17 May 2020 10:48:06 +0200 (CEST) From: Thomas Gleixner To: Andy Lutomirski Cc: LKML , X86 ML , "Paul E. McKenney" , Andy Lutomirski , Alexandre Chartre , Frederic Weisbecker , Paolo Bonzini , Sean Christopherson , Masami Hiramatsu , Petr Mladek , Steven Rostedt , Joel Fernandes , Boris Ostrovsky , Juergen Gross , Brian Gerst , Mathieu Desnoyers , Josh Poimboeuf , Will Deacon , Tom Lendacky , Wei Liu , Michael Kelley , Jason Chen CJ , Zhao Yakui , "Peter Zijlstra \(Intel\)" Subject: Re: [patch V6 04/37] x86: Make hardware latency tracing explicit In-Reply-To: References: <20200515234547.710474468@linutronix.de> <20200515235124.783722942@linutronix.de> Date: Sun, 17 May 2020 10:48:06 +0200 Message-ID: <87zha7c5h5.fsf@nanos.tec.linutronix.de> MIME-Version: 1.0 Content-Type: text/plain X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Andy Lutomirski writes: > On Fri, May 15, 2020 at 5:10 PM Thomas Gleixner wrote: >> >> >> The hardware latency tracer calls into trace_sched_clock and ends up in >> various instrumentable functions which is problemeatic vs. the kprobe >> handling especially the text poke machinery. It's invoked from >> nmi_enter/exit(), i.e. non-instrumentable code. >> >> Use nmi_enter/exit_notrace() instead. These variants do not invoke the >> hardware latency tracer which avoids chasing down complex callchains to >> make them non-instrumentable. >> >> The real interesting measurement is the actual NMI handler. Add an explicit >> invocation for the hardware latency tracer to it. >> >> #DB and #BP are uninteresting as they really should not be in use when >> analzying hardware induced latencies. >> > >> @@ -849,7 +851,7 @@ static void noinstr handle_debug(struct >> static __always_inline void exc_debug_kernel(struct pt_regs *regs, >> unsigned long dr6) >> { >> - nmi_enter(); >> + nmi_enter_notrace(); > > Why can't exc_debug_kernel() handle instrumentation? We shouldn't > recurse into #DB since we've already cleared DR7, right? It can later on. The point is that the trace stuff calls into the world and some more before the entry handling is complete. Remember this is about ensuring that all the state is properly established before any of this instrumentation muck can happen. DR7 handling is specific to #DB and done even before nmi_enter to prevent recursion. Thanks, tglx