Skip to content

Commit f6ed7ce

Browse files
committed
Optimize tickless interrupt latency
Remove unnecessary critical sections from the SysTimer code since the access should already be serialized.
1 parent d43ca21 commit f6ed7ce

File tree

1 file changed

+8
-10
lines changed

1 file changed

+8
-10
lines changed

rtos/TARGET_CORTEX/SysTimer.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,13 @@ void SysTimer::setup_irq()
8787

8888
void SysTimer::suspend(uint32_t ticks)
8989
{
90-
core_util_critical_section_enter();
91-
90+
// Remove ensures serialized access to SysTimer by stopping timer interrupt
9291
remove();
93-
schedule_tick(ticks);
92+
9493
_suspend_time_passed = false;
9594
_suspended = true;
9695

97-
core_util_critical_section_exit();
96+
schedule_tick(ticks);
9897
}
9998

10099
bool SysTimer::suspend_time_passed()
@@ -104,11 +103,11 @@ bool SysTimer::suspend_time_passed()
104103

105104
uint32_t SysTimer::resume()
106105
{
107-
core_util_critical_section_enter();
106+
// Remove ensures serialized access to SysTimer by stopping timer interrupt
107+
remove();
108108

109109
_suspended = false;
110110
_suspend_time_passed = true;
111-
remove();
112111

113112
uint64_t elapsed_ticks = (ticker_read_us(_ticker_data) - _time_us) / US_IN_TICK;
114113
if (elapsed_ticks > 0) {
@@ -121,7 +120,6 @@ uint32_t SysTimer::resume()
121120
_time_us += elapsed_ticks * US_IN_TICK;
122121
_tick += elapsed_ticks;
123122

124-
core_util_critical_section_exit();
125123
return elapsed_ticks;
126124
}
127125

@@ -136,11 +134,9 @@ void SysTimer::schedule_tick(uint32_t delta)
136134

137135
void SysTimer::cancel_tick()
138136
{
139-
core_util_critical_section_enter();
137+
// Underlying call is interrupt safe
140138

141139
remove();
142-
143-
core_util_critical_section_exit();
144140
}
145141

146142
uint32_t SysTimer::get_tick()
@@ -150,6 +146,8 @@ uint32_t SysTimer::get_tick()
150146

151147
us_timestamp_t SysTimer::get_time()
152148
{
149+
// Underlying call is interrupt safe
150+
153151
return ticker_read_us(_ticker_data);
154152
}
155153

0 commit comments

Comments
 (0)