Module: xenomai-forge Branch: master Commit: 4c05b9c46a8322e6c5f60ba147ee2a9789c5ebb3 URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=4c05b9c46a8322e6c5f60ba147ee2a9789c5ebb3
Author: Philippe Gerum <r...@xenomai.org> Date: Sun Nov 20 18:17:48 2011 +0100 copperplate/timerobj: segregate core-specific data --- include/copperplate/timerobj.h | 19 +++++++++++++++++-- lib/copperplate/timerobj-cobalt.c | 32 ++++++++++++++++---------------- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/include/copperplate/timerobj.h b/include/copperplate/timerobj.h index 91be73f..ab1fbd8 100644 --- a/include/copperplate/timerobj.h +++ b/include/copperplate/timerobj.h @@ -22,13 +22,28 @@ #include <pthread.h> #include <time.h> #include <copperplate/lock.h> + +#ifdef CONFIG_XENO_COBALT + #include <copperplate/list.h> +struct timerobj_corespec { + struct itimerspec spec; + struct pvholder link; +}; + +#else /* CONFIG_XENO_MERCURY */ + +struct timerobj_corespec { + /* Nothing specific. */ +}; + +#endif /* CONFIG_XENO_MERCURY */ + struct timerobj { + struct timerobj_corespec core; void (*handler)(struct timerobj *tmobj); timer_t timer; - struct itimerspec spec; - struct pvholder link; pthread_mutex_t lock; int cancel_state; }; diff --git a/lib/copperplate/timerobj-cobalt.c b/lib/copperplate/timerobj-cobalt.c index 772dea7..248d8f5 100644 --- a/lib/copperplate/timerobj-cobalt.c +++ b/lib/copperplate/timerobj-cobalt.c @@ -72,17 +72,17 @@ static void timerobj_enqueue(struct timerobj *tmobj) struct timerobj *__tmobj; if (pvlist_empty(&svtimers)) { - pvlist_append(&tmobj->link, &svtimers); + pvlist_append(&tmobj->core.link, &svtimers); return; } - pvlist_for_each_entry_reverse(__tmobj, &svtimers, link) { - if (timeobj_compare(&__tmobj->spec.it_value, - &tmobj->spec.it_value) <= 0) + pvlist_for_each_entry_reverse(__tmobj, &svtimers, core.link) { + if (timeobj_compare(&__tmobj->core.spec.it_value, + &tmobj->core.spec.it_value) <= 0) break; } - atpvh(&__tmobj->link, &tmobj->link); + atpvh(&__tmobj->core.link, &tmobj->core.link); } static void *timerobj_server(void *arg) @@ -108,14 +108,14 @@ static void *timerobj_server(void *arg) __RT(clock_gettime(CLOCK_COPPERPLATE, &now)); - pvlist_for_each_entry_safe(tmobj, tmp, &svtimers, link) { - value = tmobj->spec.it_value; + pvlist_for_each_entry_safe(tmobj, tmp, &svtimers, core.link) { + value = tmobj->core.spec.it_value; if (timeobj_compare(&value, &now) > 0) break; - pvlist_remove_init(&tmobj->link); - interval = tmobj->spec.it_interval; + pvlist_remove_init(&tmobj->core.link); + interval = tmobj->core.spec.it_interval; if (interval.tv_sec > 0 || interval.tv_nsec > 0) { - timespec_add(&tmobj->spec.it_value, + timespec_add(&tmobj->core.spec.it_value, &value, &interval); timerobj_enqueue(tmobj); } @@ -172,7 +172,7 @@ int timerobj_init(struct timerobj *tmobj) evt.sigev_value.sival_ptr = &svsem; tmobj->handler = NULL; - pvholder_init(&tmobj->link); /* so we may use pvholder_linked() */ + pvholder_init(&tmobj->core.link); /* so we may use pvholder_linked() */ if (__RT(timer_create(CLOCK_COPPERPLATE, &evt, &tmobj->timer))) return __bt(-errno); @@ -190,8 +190,8 @@ void timerobj_destroy(struct timerobj *tmobj) /* lock held, dropped */ { write_lock_nocancel(&svlock); - if (pvholder_linked(&tmobj->link)) - pvlist_remove_init(&tmobj->link); + if (pvholder_linked(&tmobj->core.link)) + pvlist_remove_init(&tmobj->core.link); write_unlock(&svlock); @@ -205,7 +205,7 @@ int timerobj_start(struct timerobj *tmobj, struct itimerspec *it) /* lock held, dropped */ { tmobj->handler = handler; - tmobj->spec = *it; + tmobj->core.spec = *it; write_lock_nocancel(&svlock); timerobj_enqueue(tmobj); write_unlock(&svlock); @@ -223,8 +223,8 @@ int timerobj_stop(struct timerobj *tmobj) /* lock held, dropped */ { write_lock_nocancel(&svlock); - if (pvholder_linked(&tmobj->link)) - pvlist_remove_init(&tmobj->link); + if (pvholder_linked(&tmobj->core.link)) + pvlist_remove_init(&tmobj->core.link); write_unlock(&svlock); _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git