mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-27 10:14:57 +00:00
cortex-m0: disallow rescheduling if task_start() has not yet run
Do not allow rescheduling tasks if task_start() has not been called. This fixes a bug in which if console input occurs between uart_init() and task_start(), the MCU crashes because uart_init() enables uart interrupts which attempts to wake up the console task when RX data is received, which then tries to task switch before we initialized task scheduling. BUG=chrome-os-partner:32561 BRANCH=samus TEST=add while(1) loop to adc_init() to simulate stalled ADC initialization. When stalled, send console character and observe that without this CL MCU crashes, and with this CL the MCU does not crash. Change-Id: I34418e88ebe0063acf1cc55ab5a57b5fddcd9d23 Signed-off-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/221599 Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
This commit is contained in:
committed by
chrome-internal-fetch
parent
f0dc012cf7
commit
e541eeb294
@@ -358,7 +358,8 @@ uint32_t task_set_event(task_id_t tskid, uint32_t event, int wait)
|
||||
/* The receiver might run again */
|
||||
atomic_or(&tasks_ready, 1 << tskid);
|
||||
#ifndef CONFIG_TASK_PROFILING
|
||||
need_resched_or_profiling = 1;
|
||||
if (start_called)
|
||||
need_resched_or_profiling = 1;
|
||||
#endif
|
||||
} else {
|
||||
if (wait) {
|
||||
|
||||
Reference in New Issue
Block a user