From 0378f059440d4702203f9bc005894f7b53cad889 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Wed, 26 Mar 2025 21:20:54 -0600 Subject: Have libhw_generic be independent of libcr, rename libhw to libhw_cr --- libhw_cr/alarmclock.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 libhw_cr/alarmclock.c (limited to 'libhw_cr/alarmclock.c') diff --git a/libhw_cr/alarmclock.c b/libhw_cr/alarmclock.c new file mode 100644 index 0000000..6eec52b --- /dev/null +++ b/libhw_cr/alarmclock.c @@ -0,0 +1,23 @@ +/* libhw_cr/alarmclock.c - sleep() implementation for libcr + * + * Copyright (C) 2024-2025 Luke T. Shumaker + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +#include + +#include + +static void alarmclock_sleep_intrhandler(void *_arg) { + cid_t cid = *(cid_t *)_arg; + cr_unpause_from_intrhandler(cid); +} + +void alarmclock_sleep_until_ns(lo_interface alarmclock clock, uint64_t abstime_ns) { + bool saved = cr_save_and_disable_interrupts(); + cid_t cid = cr_getcid(); + struct alarmclock_trigger trigger; + LO_CALL(clock, add_trigger, &trigger, abstime_ns, alarmclock_sleep_intrhandler, &cid); + cr_pause_and_yield(); + cr_restore_interrupts(saved); +} -- cgit v1.2.3-2-g168b