summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/kern/kern_timeout.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-10-29 10:26:48 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-10-31 13:18:52 +0100
commite65783f249d975e30e97f91cd1bbc56abf75ec50 (patch)
tree9bfe9887d1d1785043c8f984786e758073d053c2 /freebsd/sys/kern/kern_timeout.c
parentTIMEOUT(9): Use timer server for callout_tick() (diff)
downloadrtems-libbsd-e65783f249d975e30e97f91cd1bbc56abf75ec50.tar.bz2
TIMEOUT(9): Support callout_drain()
Diffstat (limited to 'freebsd/sys/kern/kern_timeout.c')
-rw-r--r--freebsd/sys/kern/kern_timeout.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/freebsd/sys/kern/kern_timeout.c b/freebsd/sys/kern/kern_timeout.c
index 2fed3727..a7fe5d59 100644
--- a/freebsd/sys/kern/kern_timeout.c
+++ b/freebsd/sys/kern/kern_timeout.c
@@ -825,8 +825,16 @@ again:
PICKUP_GIANT();
CC_LOCK(cc);
#else /* __rtems__ */
- BSD_ASSERT(0);
-#endif /* __rtems__ */
+ /*
+ * On RTEMS the LOR problem above does not
+ * exist since here we do not use
+ * sleepq_set_timeout() and instead use the
+ * RTEMS watchdog.
+ */
+ cc->cc_waiting = 1;
+ msleep_spin(&cc->cc_waiting, &cc->cc_lock,
+ "codrain", 0);
+#endif /* __rtems__ */
}
} else if (use_lock && !cc->cc_cancel) {
/*