[Xenomai-git] Philippe Gerum : cobalt/kernel/clock: turn timerq into regular kernel list

2013-06-21 Thread git repository hosting
Module: xenomai-forge
Branch: next
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
-   

[Xenomai-git] Philippe Gerum : cobalt/kernel/clock: turn timerq into regular kernel list

2013-06-21 Thread git repository hosting
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
-