summaryrefslogtreecommitdiff
path: root/src/stm/ao_arch_funcs.h
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-10-25 13:40:54 -0700
committerKeith Packard <keithp@keithp.com>2012-10-26 14:07:04 -0700
commitccf0faa7d26d56deca7928b521d07be40504466a (patch)
treea7faa1cc9e2998e8e0754b3af939c030019405e4 /src/stm/ao_arch_funcs.h
parent9b978cd467f9128f3069765dd8fbf8abad3459a4 (diff)
altos: Leave interrupts disabled while checking for task to run
Otherwise, we run the risk of an interrupt waking a task after we've decided to idle the CPU. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/stm/ao_arch_funcs.h')
-rw-r--r--src/stm/ao_arch_funcs.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/stm/ao_arch_funcs.h b/src/stm/ao_arch_funcs.h
index ca451a53..d6ab1465 100644
--- a/src/stm/ao_arch_funcs.h
+++ b/src/stm/ao_arch_funcs.h
@@ -299,8 +299,10 @@ static inline void ao_arch_restore_stack(void) {
#define ao_arch_isr_stack()
-#define ao_arch_cpu_idle() do { \
+#define ao_arch_wait_interrupt() do { \
asm(".global ao_idle_loc\n\twfi\nao_idle_loc:"); \
+ ao_arch_release_interrupts(); \
+ ao_arch_block_interrupts(); \
} while (0)
#define ao_arch_critical(b) do { \