diff --git a/drivers/power/pm/pm.h b/drivers/power/pm/pm.h index 36998f2f71d..6cff511cabf 100644 --- a/drivers/power/pm/pm.h +++ b/drivers/power/pm/pm.h @@ -87,11 +87,11 @@ struct pm_domain_s struct pm_global_s { - /* This mutex manages mutually exclusive access to the power management + /* This rmutex manages mutually exclusive access to the power management * registry. It must be initialized to the value 1. */ - mutex_t reglock; + rmutex_t reglock; /* registry is a doubly-linked list of registered power management * callback structures. To ensure mutually exclusive access, this list diff --git a/drivers/power/pm/pm_initialize.c b/drivers/power/pm/pm_initialize.c index c8c5f87f2cc..2149de1ba40 100644 --- a/drivers/power/pm/pm_initialize.c +++ b/drivers/power/pm/pm_initialize.c @@ -46,7 +46,7 @@ struct pm_global_s g_pmglobals = { - NXMUTEX_INITIALIZER + NXRMUTEX_INITIALIZER }; /**************************************************************************** diff --git a/drivers/power/pm/pm_register.c b/drivers/power/pm/pm_register.c index 6e7d80157ad..6a0b8e9dcb5 100644 --- a/drivers/power/pm/pm_register.c +++ b/drivers/power/pm/pm_register.c @@ -56,13 +56,15 @@ int pm_register(FAR struct pm_callback_s *callbacks) { + irqstate_t flags; + DEBUGASSERT(callbacks); /* Add the new entry to the end of the list of registered callbacks */ - nxmutex_lock(&g_pmglobals.reglock); + flags = pm_lock(&g_pmglobals.reglock); dq_addlast(&callbacks->entry, &g_pmglobals.registry); - nxmutex_unlock(&g_pmglobals.reglock); + pm_unlock(&g_pmglobals.reglock, flags); return 0; } diff --git a/drivers/power/pm/pm_unregister.c b/drivers/power/pm/pm_unregister.c index efd9a8117bb..f591f1391b6 100644 --- a/drivers/power/pm/pm_unregister.c +++ b/drivers/power/pm/pm_unregister.c @@ -55,13 +55,15 @@ int pm_unregister(FAR struct pm_callback_s *callbacks) { + irqstate_t flags; + DEBUGASSERT(callbacks); /* Remove entry from the list of registered callbacks. */ - nxmutex_lock(&g_pmglobals.reglock); + flags = pm_lock(&g_pmglobals.reglock); dq_rem(&callbacks->entry, &g_pmglobals.registry); - nxmutex_unlock(&g_pmglobals.reglock); + pm_unlock(&g_pmglobals.reglock, flags); return 0; }