Skip to content

Commit d0c14a7

Browse files
diandersctmarinas
authored andcommitted
arm64: idle: Tag the arm64 idle functions as __cpuidle
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's add these markings to arm64 cpuidle functions With this change we get useful backtraces like: NMI backtrace for cpu N skipped: idling at cpu_do_idle+0x94/0x98 instead of useless backtraces when dumping all processors using nmi_cpu_backtrace(). 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 Acked-by: Mark Rutland <[email protected]> Reviewed-by: Stephen Boyd <[email protected]> Acked-by: Sumit Garg <[email protected]> Tested-by: Chen-Yu Tsai <[email protected]> Signed-off-by: Douglas Anderson <[email protected]> Link: https://lore.kernel.org/r/20230906090246.v13.2.I4baba13e220bdd24d11400c67f137c35f07f82c7@changeid Signed-off-by: Catalin Marinas <[email protected]>
1 parent a02026b commit d0c14a7

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

arch/arm64/kernel/idle.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
* ensure that interrupts are not masked at the PMR (because the core will
2121
* not wake up if we block the wake up signal in the interrupt controller).
2222
*/
23-
void noinstr cpu_do_idle(void)
23+
void __cpuidle cpu_do_idle(void)
2424
{
2525
struct arm_cpuidle_irq_context context;
2626

@@ -35,7 +35,7 @@ void noinstr cpu_do_idle(void)
3535
/*
3636
* This is our default idle handler.
3737
*/
38-
void noinstr arch_cpu_idle(void)
38+
void __cpuidle arch_cpu_idle(void)
3939
{
4040
/*
4141
* This should do all the clock switching and wait for interrupt

0 commit comments

Comments
 (0)