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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C756BC41513 for ; Mon, 7 Aug 2023 09:53:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229998AbjHGJxE (ORCPT ); Mon, 7 Aug 2023 05:53:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39942 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229480AbjHGJxC (ORCPT ); Mon, 7 Aug 2023 05:53:02 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id D08E119AA; Mon, 7 Aug 2023 02:52:34 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 015E01FB; Mon, 7 Aug 2023 02:52:58 -0700 (PDT) Received: from FVFF77S0Q05N.cambridge.arm.com (FVFF77S0Q05N.cambridge.arm.com [10.1.32.139]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 013183F59C; Mon, 7 Aug 2023 02:52:11 -0700 (PDT) Date: Mon, 7 Aug 2023 10:52:09 +0100 From: Mark Rutland To: Douglas Anderson Cc: Catalin Marinas , Will Deacon , Sumit Garg , Daniel Thompson , Marc Zyngier , linux-perf-users@vger.kernel.org, ito-yuichi@fujitsu.com, Chen-Yu Tsai , Ard Biesheuvel , Stephen Boyd , Peter Zijlstra , Thomas Gleixner , linux-arm-kernel@lists.infradead.org, kgdb-bugreport@lists.sourceforge.net, Masayoshi Mizuma , "Rafael J . Wysocki" , Lecopzer Chen , Frederic Weisbecker , "Gautham R. Shenoy" , Ingo Molnar , linux-kernel@vger.kernel.org Subject: Re: [PATCH v9 2/7] arm64: idle: Tag the arm64 idle functions as __cpuidle Message-ID: References: <20230601213440.2488667-1-dianders@chromium.org> <20230601143109.v9.2.I4baba13e220bdd24d11400c67f137c35f07f82c7@changeid> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230601143109.v9.2.I4baba13e220bdd24d11400c67f137c35f07f82c7@changeid> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jun 01, 2023 at 02:31:46PM -0700, Douglas Anderson wrote: > As per the (somewhat recent) comment before the definition of > `__cpuidle`, the tag is like `noinstr` but also marks a function so it > can be identified by cpu_in_idle(). Let'a add this. > > After doing this then when we dump stack traces of all processors > using nmi_cpu_backtrace() then instead of getting useless backtraces > we get things like: > > NMI backtrace for cpu N skipped: idling at cpu_do_idle+0x94/0x98 > > NOTE: this patch won't make cpu_in_idle() work perfectly for arm64, > but it doesn't hurt and does catch some cases. Specifically an example > that wasn't caught in my testing looked like this: > > gic_cpu_sys_reg_init+0x1f8/0x314 > gic_cpu_pm_notifier+0x40/0x78 > raw_notifier_call_chain+0x5c/0x134 > cpu_pm_notify+0x38/0x64 > cpu_pm_exit+0x20/0x2c > psci_enter_idle_state+0x48/0x70 > cpuidle_enter_state+0xb8/0x260 > cpuidle_enter+0x44/0x5c > do_idle+0x188/0x30c > > Signed-off-by: Douglas Anderson I don't have strong feelings either way for this, so: Acked-by: Mark Rutland Thanks, Mark. > --- > > Changes in v9: > - Added to commit message that this doesn't catch all cases. > > Changes in v8: > - "Tag the arm64 idle functions as __cpuidle" new for v8 > > arch/arm64/kernel/idle.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/kernel/idle.c b/arch/arm64/kernel/idle.c > index c1125753fe9b..05cfb347ec26 100644 > --- a/arch/arm64/kernel/idle.c > +++ b/arch/arm64/kernel/idle.c > @@ -20,7 +20,7 @@ > * ensure that interrupts are not masked at the PMR (because the core will > * not wake up if we block the wake up signal in the interrupt controller). > */ > -void noinstr cpu_do_idle(void) > +void __cpuidle cpu_do_idle(void) > { > struct arm_cpuidle_irq_context context; > > @@ -35,7 +35,7 @@ void noinstr cpu_do_idle(void) > /* > * This is our default idle handler. > */ > -void noinstr arch_cpu_idle(void) > +void __cpuidle arch_cpu_idle(void) > { > /* > * This should do all the clock switching and wait for interrupt > -- > 2.41.0.rc2.161.g9c6817b8e7-goog >