Module: xenomai-forge Branch: master Commit: 6f5d098eafbd59d2506ee9980916226d41203c16 URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=6f5d098eafbd59d2506ee9980916226d41203c16
Author: Philippe Gerum <r...@xenomai.org> Date: Wed Jun 19 19:06:33 2013 +0200 cobalt/kernel/clock: turn timerq into regular kernel list --- include/cobalt/kernel/clock.h | 5 +++-- include/cobalt/kernel/timer.h | 11 ++++------- kernel/cobalt/clock.c | 21 +++++++++++++++------ kernel/cobalt/timer.c | 7 ++++--- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/include/cobalt/kernel/clock.h b/include/cobalt/kernel/clock.h index f923510..4471e3b 100644 --- a/include/cobalt/kernel/clock.h +++ b/include/cobalt/kernel/clock.h @@ -28,7 +28,7 @@ #ifdef __KERNEL__ -#include <cobalt/kernel/queue.h> +#include <cobalt/kernel/list.h> #include <cobalt/kernel/vfile.h> #include <asm-generic/xenomai/timeconv.h> @@ -40,7 +40,8 @@ struct xnclock { #ifdef CONFIG_XENO_OPT_STATS struct xnvfile_snapshot vfile; struct xnvfile_rev_tag revtag; - struct xnqueue timerq; + struct list_head timerq; + int nrtimers; #endif /* CONFIG_XENO_OPT_STATS */ }; diff --git a/include/cobalt/kernel/timer.h b/include/cobalt/kernel/timer.h index 6755ee6..2b13870 100644 --- a/include/cobalt/kernel/timer.h +++ b/include/cobalt/kernel/timer.h @@ -23,10 +23,11 @@ #ifndef _COBALT_KERNEL_TIMER_H #define _COBALT_KERNEL_TIMER_H +#ifdef __KERNEL__ + #include <cobalt/kernel/clock.h> #include <cobalt/kernel/stat.h> - -#ifdef __KERNEL__ +#include <cobalt/kernel/queue.h> #ifndef CONFIG_XENO_OPT_DEBUG_TIMERS #define CONFIG_XENO_OPT_DEBUG_TIMERS 0 @@ -291,12 +292,8 @@ typedef struct xntimer { #ifdef CONFIG_XENO_OPT_STATS char name[XNOBJECT_NAME_LEN]; /* !< Timer name to be displayed. */ - const char *handler_name; /* !< Handler name to be displayed. */ - - xnholder_t tblink; /* !< Timer holder in timebase. */ - -#define tblink2timer(ln) container_of(ln, xntimer_t, tblink) + struct list_head tblink; /* !< Timer holder in timebase. */ #endif /* CONFIG_XENO_OPT_STATS */ xnstat_counter_t scheduled; /* !< Number of timer schedules. */ diff --git a/kernel/cobalt/clock.c b/kernel/cobalt/clock.c index a5836c0..5f98fce 100644 --- a/kernel/cobalt/clock.c +++ b/kernel/cobalt/clock.c @@ -87,7 +87,7 @@ EXPORT_SYMBOL_GPL(xnclock_read_monotonic); static struct xnvfile_snapshot_ops tmstat_vfile_ops; struct tmstat_vfile_priv { - struct xnholder *curr; + struct xntimer *curr; }; struct tmstat_vfile_data { @@ -105,9 +105,14 @@ static int tmstat_vfile_rewind(struct xnvfile_snapshot_iterator *it) { struct tmstat_vfile_priv *priv = xnvfile_iterator_priv(it); - priv->curr = getheadq(&nkclock.timerq); + if (list_empty(&nkclock.timerq)) { + priv->curr = NULL; + return 0; + } + + priv->curr = list_first_entry(&nkclock.timerq, struct xntimer, tblink); - return countq(&nkclock.timerq); + return nkclock.nrtimers; } static int tmstat_vfile_next(struct xnvfile_snapshot_iterator *it, void *data) @@ -119,8 +124,12 @@ static int tmstat_vfile_next(struct xnvfile_snapshot_iterator *it, void *data) if (priv->curr == NULL) return 0; - timer = tblink2timer(priv->curr); - priv->curr = nextq(&nkclock.timerq, priv->curr); + timer = priv->curr; + if (list_is_last(&timer->tblink, &nkclock.timerq)) + priv->curr = NULL; + else + priv->curr = list_entry(timer->tblink.next, + struct xntimer, tblink); if (xnstat_counter_get(&timer->scheduled) == 0) return VFILE_SEQ_SKIP; @@ -197,7 +206,7 @@ void xnclock_cleanup_proc(void) struct xnclock nkclock = { #ifdef CONFIG_XENO_OPT_STATS - .timerq = XNQUEUE_INITIALIZER(nkclock.timerq), + .timerq = LIST_HEAD_INIT(nkclock.timerq), #endif /* CONFIG_XENO_OPT_STATS */ }; EXPORT_SYMBOL_GPL(nkclock); diff --git a/kernel/cobalt/timer.c b/kernel/cobalt/timer.c index 69f73d7..64266de 100644 --- a/kernel/cobalt/timer.c +++ b/kernel/cobalt/timer.c @@ -616,12 +616,12 @@ void __xntimer_init(xntimer_t *timer, void (*handler) (xntimer_t *timer)) xnobject_copy_name(timer->name, xnpod_current_thread()->name); - inith(&timer->tblink); xnstat_counter_set(&timer->scheduled, 0); xnstat_counter_set(&timer->fired, 0); xnlock_get_irqsave(&nklock, s); - appendq(&nkclock.timerq, &timer->tblink); + list_add_tail(&timer->tblink, &nkclock.timerq); + nkclock.nrtimers++; xnvfile_touch(&nkclock.vfile); xnlock_put_irqrestore(&nklock, s); #else @@ -662,7 +662,8 @@ void xntimer_destroy(xntimer_t *timer) __setbits(timer->status, XNTIMER_KILLED); timer->sched = NULL; #ifdef CONFIG_XENO_OPT_STATS - removeq(&nkclock.timerq, &timer->tblink); + list_del(&timer->tblink); + nkclock.nrtimers--; xnvfile_touch(&nkclock.vfile); #endif /* CONFIG_XENO_OPT_STATS */ xnlock_put_irqrestore(&nklock, s); _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git