Skip to content

Commit 1a5d8da

Browse files
committed
fix(core): remove unnecessary delays during event polling
[no changelog]
1 parent ee98614 commit 1a5d8da

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

core/embed/sys/task/sysevent.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -258,13 +258,16 @@ void sysevents_poll(const sysevents_t *awaited, sysevents_t *signalled,
258258

259259
uint32_t now = systick_ms();
260260

261+
bool events_processed = false;
262+
261263
// Choose the next task to run
262264
for (size_t prio = 0; prio < dispatcher->pollers_count; prio++) {
263265
sysevent_poller_t *poller = &dispatcher->pollers[prio];
264266
bool timed_out = ((int32_t)(poller->deadline - now)) <= 0;
265267
bool ready = (poller->signalled.read_ready != 0) ||
266268
(poller->signalled.write_ready != 0);
267269
if (ready || timed_out) {
270+
events_processed = true;
268271
systask_t *task = poller->task;
269272
#if defined(KERNEL) && !defined(TREZOR_EMULATOR)
270273
if (task->applet != NULL) {
@@ -283,13 +286,15 @@ void sysevents_poll(const sysevents_t *awaited, sysevents_t *signalled,
283286
}
284287
}
285288

289+
if (!events_processed) {
286290
#ifdef TREZOR_EMULATOR
287-
// Wait a bit to not consume 100% CPU
288-
systick_delay_ms(1);
291+
// Wait a bit to not consume 100% CPU
292+
systick_delay_ms(1);
289293
#else
290-
// Wait for the next event
291-
__WFI();
294+
// Wait for the next event
295+
__WFI();
292296
#endif
297+
}
293298
}
294299
}
295300

0 commit comments

Comments
 (0)