summaryrefslogtreecommitdiffstats
path: root/freebsd
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-07-05 10:18:42 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-07-05 10:20:18 +0200
commit313e1d5f1c8c7cd8e3d458628b040ce1c264d23c (patch)
treeb69505e369429fc085df5fb5efaace05a01b508e /freebsd
parenti2c tool : port to RTEMS (diff)
downloadrtems-libbsd-313e1d5f1c8c7cd8e3d458628b040ce1c264d23c.tar.bz2
SLEEPQUEUE(9): Fix timeout handling
Diffstat (limited to 'freebsd')
-rw-r--r--freebsd/sys/kern/subr_sleepqueue.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/freebsd/sys/kern/subr_sleepqueue.c b/freebsd/sys/kern/subr_sleepqueue.c
index e8e221c8..118e1aaf 100644
--- a/freebsd/sys/kern/subr_sleepqueue.c
+++ b/freebsd/sys/kern/subr_sleepqueue.c
@@ -462,6 +462,7 @@ sleepq_set_timeout_sbt(void *wchan, sbintime_t sbt, sbintime_t pr,
ISR_lock_Context lock_context;
ISR_lock_Context lock_context_2;
Watchdog_Header *header;
+ sbintime_t sbt_per_tick;
uint64_t expire;
cpu_self = _Thread_Dispatch_disable();
@@ -477,15 +478,16 @@ sleepq_set_timeout_sbt(void *wchan, sbintime_t sbt, sbintime_t pr,
_Watchdog_Set_CPU(&executing->Timer.Watchdog, cpu_self);
_Watchdog_Per_CPU_acquire_critical(cpu_self, &lock_context_2);
+ sbt_per_tick = rtems_bsd_sbt_per_watchdog_tick;
if ((flags & C_ABSOLUTE) != 0) {
/*
* The FreeBSD uptime starts at one second, however, the
* relative watchdog ticks start at zero, see also TIMESEL().
*/
- expire = (sbt - SBT_1S + tick_sbt - 1) / tick_sbt;
+ expire = (sbt - SBT_1S + sbt_per_tick - 1) / sbt_per_tick;
} else {
- expire = (sbt + tick_sbt - 1) / tick_sbt;
+ expire = (sbt + sbt_per_tick - 1) / sbt_per_tick;
expire += cpu_self->Watchdog.ticks;
}