diff options
Diffstat (limited to 'libhw')
-rw-r--r-- | libhw/host_alarmclock.c | 8 | ||||
-rw-r--r-- | libhw/rp2040_hwtimer.c | 17 | ||||
-rw-r--r-- | libhw/w5500.c | 4 |
3 files changed, 15 insertions, 14 deletions
diff --git a/libhw/host_alarmclock.c b/libhw/host_alarmclock.c index 4f43fc7..1d26f1a 100644 --- a/libhw/host_alarmclock.c +++ b/libhw/host_alarmclock.c @@ -110,7 +110,7 @@ static bool hostclock_add_trigger(implements_alarmclock *_alarmclock, trigger->cb = cb; trigger->cb_arg = cb_arg; - cr_disable_interrupts(); + bool saved = cr_save_and_disable_interrupts(); struct alarmclock_trigger **dst = &alarmclock->queue; while (*dst && fire_at_ns >= (*dst)->fire_at_ns) dst = &(*dst)->next; @@ -145,7 +145,7 @@ static bool hostclock_add_trigger(implements_alarmclock *_alarmclock, if (timer_settime(alarmclock->timer_id, TIMER_ABSTIME, &alarmspec, NULL) != 0) error(1, errno, "timer_settime"); } - cr_enable_interrupts(); + cr_restore_interrupts(saved); return false; } @@ -158,7 +158,7 @@ static void hostclock_del_trigger(implements_alarmclock *_alarmclock, assert(alarmclock); assert(trigger); - cr_disable_interrupts(); + bool saved = cr_save_and_disable_interrupts(); if (trigger->alarmclock == alarmclock) { if (!trigger->prev) alarmclock->queue = trigger->next; @@ -170,5 +170,5 @@ static void hostclock_del_trigger(implements_alarmclock *_alarmclock, trigger->prev = NULL; trigger->next = NULL; } - cr_enable_interrupts(); + cr_restore_interrupts(saved); } diff --git a/libhw/rp2040_hwtimer.c b/libhw/rp2040_hwtimer.c index 6f37d85..9f0d901 100644 --- a/libhw/rp2040_hwtimer.c +++ b/libhw/rp2040_hwtimer.c @@ -115,7 +115,7 @@ static bool rp2040_hwtimer_add_trigger(implements_alarmclock *_alarmclock, trigger->cb = cb; trigger->cb_arg = cb_arg; - cr_disable_interrupts(); + bool saved = cr_save_and_disable_interrupts(); struct alarmclock_trigger **dst = &alarmclock->queue; while (*dst && fire_at_ns >= (*dst)->fire_at_ns) dst = &(*dst)->next; @@ -135,14 +135,15 @@ static bool rp2040_hwtimer_add_trigger(implements_alarmclock *_alarmclock, /* Force the interrupt handler to trigger as soon as * we enable interrupts. This handles the case of * when fire_at_ns is before when we called - * cr_disable_interrupts(). We could check + * cr_save_and_disable_interrupts(). We could check * timer_time_us_64() again after calling - * cr_disable_interrupts() and do this conditionally, - * but I don't think that would be any more efficient - * than just letting the interrupt fire. */ + * cr_save_and_disable_interrupts() and do this + * conditionally, but I don't think that would be any + * more efficient than just letting the interrupt + * fire. */ hw_set_bits(&timer_hw->intf, 1 << alarmclock->alarm_num); } - cr_enable_interrupts(); + cr_restore_interrupts(saved); return false; } @@ -154,7 +155,7 @@ static void rp2040_hwtimer_del_trigger(implements_alarmclock *_alarmclock, assert(alarmclock); assert(trigger); - cr_disable_interrupts(); + bool saved = cr_save_and_disable_interrupts(); if (trigger->alarmclock == alarmclock) { if (!trigger->prev) alarmclock->queue = trigger->next; @@ -166,5 +167,5 @@ static void rp2040_hwtimer_del_trigger(implements_alarmclock *_alarmclock, trigger->prev = NULL; trigger->next = NULL; } - cr_enable_interrupts(); + cr_restore_interrupts(saved); } diff --git a/libhw/w5500.c b/libhw/w5500.c index 08486d4..5678ffd 100644 --- a/libhw/w5500.c +++ b/libhw/w5500.c @@ -340,14 +340,14 @@ void _w5500_init(struct w5500 *chip, w5500_hard_reset(chip); /* Finally, wire in the interrupt handler. */ - cr_disable_interrupts(); + bool saved = cr_save_and_disable_interrupts(); for (size_t i = 0; i < ARRAY_LEN(w5500_chips); i++) { if (w5500_chips[i] == NULL) { w5500_chips[i] = chip; break; } } - cr_enable_interrupts(); + cr_restore_interrupts(saved); coroutine_add("w5500_irq", w5500_irq_cr, chip); } |