diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-10-28 16:42:55 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-10-31 13:18:52 +0100 |
commit | a9e26f5d5b461a332720e389855fb16fa44ef65f (patch) | |
tree | b1fab7b85564d3b0630a47754fb3108aebb8c4c1 /freebsd/sys/kern/kern_timeout.c | |
parent | Use kqueue() and kevent() from FreeBSD (diff) | |
download | rtems-libbsd-a9e26f5d5b461a332720e389855fb16fa44ef65f.tar.bz2 |
TIMEOUT(9): Use timer server for callout_tick()
Diffstat (limited to '')
-rw-r--r-- | freebsd/sys/kern/kern_timeout.c | 21 |
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__ */ } |