Skip to content

Commit 8614382

Browse files
author
Cruz Monrreal
authored
Merge pull request #10151 from kjbracey-arm/sleepmgr_optimise
Sleep manager: optimise counter
2 parents ab22ab8 + b81cefb commit 8614382

File tree

1 file changed

+4
-13
lines changed

1 file changed

+4
-13
lines changed

platform/mbed_sleep_manager.c

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
#include "hal/us_ticker_api.h"
2626
#include "hal/lp_ticker_api.h"
2727

28-
#include <limits.h>
2928
#include <stdio.h>
3029

3130
#if DEVICE_SLEEP
@@ -173,29 +172,21 @@ void sleep_tracker_unlock(const char *const filename, int line)
173172

174173
void sleep_manager_lock_deep_sleep_internal(void)
175174
{
176-
core_util_critical_section_enter();
177-
if (deep_sleep_lock == USHRT_MAX) {
178-
core_util_critical_section_exit();
179-
MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_HAL, MBED_ERROR_CODE_OVERFLOW), "DeepSleepLock overflow (> USHRT_MAX)", deep_sleep_lock);
175+
if (core_util_atomic_incr_u16(&deep_sleep_lock, 1) == 0) {
176+
MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_HAL, MBED_ERROR_CODE_OVERFLOW), "DeepSleepLock overflow (> 0xFFFF)", deep_sleep_lock);
180177
}
181-
core_util_atomic_incr_u16(&deep_sleep_lock, 1);
182-
core_util_critical_section_exit();
183178
}
184179

185180
void sleep_manager_unlock_deep_sleep_internal(void)
186181
{
187-
core_util_critical_section_enter();
188-
if (deep_sleep_lock == 0) {
189-
core_util_critical_section_exit();
182+
if (core_util_atomic_decr_u16(&deep_sleep_lock, 1) == 0xFFFF) {
190183
MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_HAL, MBED_ERROR_CODE_UNDERFLOW), "DeepSleepLock underflow (< 0)", deep_sleep_lock);
191184
}
192-
core_util_atomic_decr_u16(&deep_sleep_lock, 1);
193-
core_util_critical_section_exit();
194185
}
195186

196187
bool sleep_manager_can_deep_sleep(void)
197188
{
198-
return deep_sleep_lock == 0 ? true : false;
189+
return core_util_atomic_load_u16(&deep_sleep_lock) == 0;
199190
}
200191

201192
bool sleep_manager_can_deep_sleep_test_check()

0 commit comments

Comments
 (0)