Module: xenomai-forge
Branch: master
Commit: 2ace89fca63b366bf85e7e39bc73ea7b3294c82b
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=2ace89fca63b366bf85e7e39bc73ea7b3294c82b

Author: Philippe Gerum <r...@xenomai.org>
Date:   Sat Nov 26 15:24:05 2011 +0100

copperplate/clockobj: optimize rel->abs timeout conversion

---

 include/copperplate/clockobj.h |   28 ++++++++++++++++++++--------
 lib/copperplate/clockobj.c     |    4 ++--
 2 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/include/copperplate/clockobj.h b/include/copperplate/clockobj.h
index e3180d9..8e07946 100644
--- a/include/copperplate/clockobj.h
+++ b/include/copperplate/clockobj.h
@@ -105,9 +105,6 @@ void clockobj_get_date(struct clockobj *clkobj,
 void clockobj_get_time(struct clockobj *clkobj,
                       ticks_t *pticks, ticks_t *ptsc);
 
-void __clockobj_ticks_to_timeout(struct clockobj *clkobj, clockid_t clk_id,
-                                ticks_t ticks, struct timespec *ts);
-
 void clockobj_caltime_to_timeout(struct clockobj *clkobj, const struct tm *tm,
                                 unsigned long rticks, struct timespec *ts);
 
@@ -194,14 +191,19 @@ void clockobj_ns_to_timespec(ticks_t ns, struct timespec 
*ts)
 
 #endif /* CONFIG_XENO_MERCURY */
 
+#ifdef CONFIG_XENO_LORES_CLOCK_DISABLED
+
 static inline
-void clockobj_ticks_to_timeout(struct clockobj *clkobj,
-                              ticks_t ticks, struct timespec *ts)
+void __clockobj_ticks_to_timeout(struct clockobj *clkobj,
+                                clockid_t clk_id,
+                                ticks_t ticks, struct timespec *ts)
 {
-       __clockobj_ticks_to_timeout(clkobj, CLOCK_COPPERPLATE, ticks, ts);
-}
+       struct timespec now, delta;
 
-#ifdef CONFIG_XENO_LORES_CLOCK_DISABLED
+       __RT(clock_gettime(clk_id, &now));
+       clockobj_ns_to_timespec(ticks, &delta);
+       timespec_add(ts, &now, &delta);
+}
 
 static inline
 void __clockobj_ticks_to_timespec(struct clockobj *clkobj,
@@ -255,6 +257,9 @@ static inline sticks_t clockobj_ticks_to_ns(struct clockobj 
*clkobj,
 
 #else /* !CONFIG_XENO_LORES_CLOCK_DISABLED */
 
+void __clockobj_ticks_to_timeout(struct clockobj *clkobj, clockid_t clk_id,
+                                ticks_t ticks, struct timespec *ts);
+
 void __clockobj_ticks_to_timespec(struct clockobj *clkobj,
                                  ticks_t ticks, struct timespec *ts);
 
@@ -300,4 +305,11 @@ static inline sticks_t clockobj_ticks_to_ns(struct 
clockobj *clkobj,
 
 #endif /* !CONFIG_XENO_LORES_CLOCK_DISABLED */
 
+static inline
+void clockobj_ticks_to_timeout(struct clockobj *clkobj,
+                              ticks_t ticks, struct timespec *ts)
+{
+       __clockobj_ticks_to_timeout(clkobj, CLOCK_COPPERPLATE, ticks, ts);
+}
+
 #endif /* _COPPERPLATE_CLOCKOBJ_H */
diff --git a/lib/copperplate/clockobj.c b/lib/copperplate/clockobj.c
index fe447f8..4cc4a63 100644
--- a/lib/copperplate/clockobj.c
+++ b/lib/copperplate/clockobj.c
@@ -97,8 +97,6 @@ void __clockobj_ticks_to_timespec(struct clockobj *clkobj,
                clockobj_ns_to_timespec(ticks, ts);
 }
 
-#endif /* !CONFIG_XENO_LORES_CLOCK_DISABLED */
-
 void __clockobj_ticks_to_timeout(struct clockobj *clkobj,
                                 clockid_t clk_id,
                                 ticks_t ticks, struct timespec *ts)
@@ -112,6 +110,8 @@ void __clockobj_ticks_to_timeout(struct clockobj *clkobj,
        timespec_add(ts, ts, &delta);
 }
 
+#endif /* !CONFIG_XENO_LORES_CLOCK_DISABLED */
+
 static const int mdays[] = {
        31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
 };


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to