summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/kern/kern_timeout.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-10-28 16:42:55 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-10-31 13:18:52 +0100
commita9e26f5d5b461a332720e389855fb16fa44ef65f (patch)
treeb1fab7b85564d3b0630a47754fb3108aebb8c4c1 /freebsd/sys/kern/kern_timeout.c
parentUse kqueue() and kevent() from FreeBSD (diff)
downloadrtems-libbsd-a9e26f5d5b461a332720e389855fb16fa44ef65f.tar.bz2
TIMEOUT(9): Use timer server for callout_tick()
Diffstat (limited to 'freebsd/sys/kern/kern_timeout.c')
-rw-r--r--freebsd/sys/kern/kern_timeout.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/freebsd/sys/kern/kern_timeout.c b/freebsd/sys/kern/kern_timeout.c
index 1d5dbadf..2fed3727 100644
--- a/freebsd/sys/kern/kern_timeout.c
+++ b/freebsd/sys/kern/kern_timeout.c
@@ -160,6 +160,19 @@ MALLOC_DEFINE(M_CALLOUT, "callout", "Callout datastructures");
#ifdef __rtems__
static void rtems_bsd_timeout_init(void *);
+static void
+rtems_bsd_callout_timer(rtems_id id, void *arg)
+{
+ rtems_status_code sc;
+
+ (void) arg;
+
+ sc = rtems_timer_reset(id);
+ BSD_ASSERT(sc == RTEMS_SUCCESSFUL);
+
+ callout_tick();
+}
+
static void callout_cpu_init(struct callout_cpu *);
SYSINIT(rtems_bsd_timeout, SI_SUB_VM, SI_ORDER_FIRST, rtems_bsd_timeout_init,
@@ -174,6 +187,8 @@ kern_timeout_callwheel_alloc(caddr_t v)
{
struct callout_cpu *cc;
#ifdef __rtems__
+ rtems_status_code sc;
+ rtems_id id;
caddr_t v;
(void) unused;
@@ -202,6 +217,12 @@ kern_timeout_callwheel_alloc(caddr_t v)
return(v);
#else /* __rtems__ */
callout_cpu_init(cc);
+
+ sc = rtems_timer_create(rtems_build_name('_', 'C', 'L', 'O'), &id);
+ BSD_ASSERT(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_timer_server_fire_after(id, 1, rtems_bsd_callout_timer, NULL);
+ BSD_ASSERT(sc == RTEMS_SUCCESSFUL);
#endif /* __rtems__ */
}