From ae97eae8c24f02a58866390040c8018de07c47a1 Mon Sep 17 00:00:00 2001 From: Mahesh Mahadevan Date: Fri, 16 Dec 2022 10:57:29 -0600 Subject: [PATCH] pm: Error with handling z_cpus_active count z_cpus_active count becomes incorrect when the state is PM_STATE_RUNTIME_IDLE and CONFIG_PM_DEVICE is enabled. Signed-off-by: Mahesh Mahadevan --- subsys/pm/pm.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/subsys/pm/pm.c b/subsys/pm/pm.c index c4239a61fd5..e5afc76ce32 100644 --- a/subsys/pm/pm.c +++ b/subsys/pm/pm.c @@ -242,15 +242,16 @@ bool pm_system_suspend(int32_t ticks) } #if defined(CONFIG_PM_DEVICE) && !defined(CONFIG_PM_DEVICE_RUNTIME_EXCLUSIVE) - if ((z_cpus_pm_state[id].state != PM_STATE_RUNTIME_IDLE) && - (atomic_sub(&z_cpus_active, 1) == 1)) { - if (pm_suspend_devices()) { - pm_resume_devices(); - z_cpus_pm_state[id].state = PM_STATE_ACTIVE; - (void)atomic_add(&z_cpus_active, 1); - SYS_PORT_TRACING_FUNC_EXIT(pm, system_suspend, ticks, - z_cpus_pm_state[id].state); - return false; + if (atomic_sub(&z_cpus_active, 1) == 1) { + if (z_cpus_pm_state[id].state != PM_STATE_RUNTIME_IDLE) { + if (pm_suspend_devices()) { + pm_resume_devices(); + z_cpus_pm_state[id].state = PM_STATE_ACTIVE; + (void)atomic_add(&z_cpus_active, 1); + SYS_PORT_TRACING_FUNC_EXIT(pm, system_suspend, ticks, + z_cpus_pm_state[id].state); + return false; + } } } #endif