altos: Block interrupts while waking tasks sleeping on timers.
[fw/altos] / src / stm / ao_arch_funcs.h
index 2c017c79f0191b5b5395f66f508a26748cb048db..33359857041f2c6f1f4dff4a0509f4d0b6b2cee6 100644 (file)
@@ -343,6 +343,14 @@ ao_arch_memory_barrier() {
        asm volatile("" ::: "memory");
 }
 
+static inline void
+ao_arch_irq_check(void) {
+       uint32_t        primask;
+       asm("mrs %0,primask" : "=&r" (primask));
+       if ((primask & 1) == 0)
+               ao_panic(AO_PANIC_IRQ);
+}
+
 #if HAS_TASK
 static inline void
 ao_arch_init_stack(struct ao_task *task, void *start)