[Xenomai-git] Philippe Gerum : boilerplate, copperplate: fix syncluster with remote sync (pshared)
Module: xenomai-3 Branch: master Commit: fa8b8c534166276f9a9f9df7ba83b04acddd37e4 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=fa8b8c534166276f9a9f9df7ba83b04acddd37e4 Author: Philippe Gerum r...@xenomai.org Date: Mon Jun 1 16:52:34 2015 +0200 boilerplate, copperplate: fix syncluster with remote sync (pshared) --- include/boilerplate/scope.h | 26 include/copperplate/cluster.h |9 - include/copperplate/threadobj.h |6 +-- lib/boilerplate/hash.c|4 -- lib/copperplate/cluster.c | 19 - lib/copperplate/heapobj-pshared.c | 79 +++-- lib/copperplate/threadobj.c |2 +- 7 files changed, 80 insertions(+), 65 deletions(-) diff --git a/include/boilerplate/scope.h b/include/boilerplate/scope.h index 9e551ae..ae71063 100644 --- a/include/boilerplate/scope.h +++ b/include/boilerplate/scope.h @@ -31,10 +31,15 @@ extern void *__main_heap; int pshared_check(void *heap, void *addr); -#define dref_type(t) memoff_t -#define __memoff(base, addr) ((caddr_t)(addr) - (caddr_t)(base)) -#define __memptr(base, off)((caddr_t)(base) + (off)) -#define __memchk(base, addr) pshared_check(base, addr) +#define dref_type(t) memoff_t + +#define __memoff(__base, __addr) ((caddr_t)(__addr) - (caddr_t)(__base)) +#define __memptr(__base, __off)((caddr_t)(__base) + (__off)) +#define __memchk(__base, __addr) pshared_check(__base, __addr) + +#define __moff(__p)__memoff(__main_heap, __p) +#define __mptr(__off) __memptr(__main_heap, __off) +#define __mchk(__p)__memchk(__main_heap, __p) #define mutex_scope_attribute PTHREAD_PROCESS_SHARED #define sem_scope_attribute1 @@ -47,10 +52,15 @@ int pshared_check(void *heap, void *addr); #define __main_heapNULL -#define dref_type(t) __typeof__(t) -#define __memoff(base, addr) (addr) -#define __memptr(base, off)(off) -#define __memchk(base, addr) 1 +#define dref_type(t) __typeof__(t) + +#define __memoff(__base, __addr) (__addr) +#define __memptr(__base, __off)(__off) +#define __memchk(__base, __addr) 1 + +#define __moff(__p)(__p) +#define __mptr(__off) (__off) +#define __mchk(__p)1 #define mutex_scope_attribute PTHREAD_PROCESS_PRIVATE #define sem_scope_attribute0 diff --git a/include/copperplate/cluster.h b/include/copperplate/cluster.h index af7dfee..c29d6f2 100644 --- a/include/copperplate/cluster.h +++ b/include/copperplate/cluster.h @@ -155,7 +155,14 @@ pid_t pvclusterobj_cnode(const struct pvclusterobj *cobj) #endif /* !CONFIG_XENO_PSHARED */ struct syncluster_wait_struct { - const char *name; + union { + struct { + dref_type(char *) name; + } shared; + struct { + const char *name; + } private; + }; }; #ifdef __cplusplus diff --git a/include/copperplate/threadobj.h b/include/copperplate/threadobj.h index edc4d6c..4562dcb 100644 --- a/include/copperplate/threadobj.h +++ b/include/copperplate/threadobj.h @@ -179,7 +179,7 @@ struct threadobj { struct holder wait_link; int wait_status; int wait_prio; - void *wait_union; + dref_type(void *) wait_union; size_t wait_size; timer_t periodic_timer; @@ -496,14 +496,14 @@ static inline int threadobj_get_errno(struct threadobj *thobj) struct threadobj *__thobj = threadobj_current();\ assert(__thobj != NULL);\ assert(sizeof(typeof(T)) = __thobj-wait_size);\ - __thobj-wait_union;\ + (void *)__mptr(__thobj-wait_union);\ }) #define threadobj_finish_wait()do { } while (0) static inline void *threadobj_get_wait(struct threadobj *thobj) { - return thobj-wait_union; + return __mptr(thobj-wait_union); } static inline const char *threadobj_get_name(struct threadobj *thobj) diff --git a/lib/boilerplate/hash.c b/lib/boilerplate/hash.c index 35fcf73..aa35fa4 100644 --- a/lib/boilerplate/hash.c +++ b/lib/boilerplate/hash.c @@ -44,10 +44,6 @@ c -= a; c -= b; c ^= (b15); \ } -#define __moff(__p)__memoff(__main_heap, __p) -#define __mptr(__p)__memptr(__main_heap, __p) -#define __mchk(__p)__memchk(__main_heap, __p) - static inline int store_key(struct hashobj *obj, const void *key, size_t len, const struct hash_operations *hops); diff --git a/lib/copperplate/cluster.c b/lib/copperplate/cluster.c index 7353aa8..9355d94 100644 --- a/lib/copperplate/cluster.c +++ b/lib/copperplate/cluster.c @@ -255,9 +255,8 @@ redo: hobj = hash_search(main_catalog, name, strlen(name),
[Xenomai-git] Philippe Gerum : boilerplate, copperplate: fix syncluster with remote sync (pshared)
Module: xenomai-3 Branch: next Commit: fa8b8c534166276f9a9f9df7ba83b04acddd37e4 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=fa8b8c534166276f9a9f9df7ba83b04acddd37e4 Author: Philippe Gerum r...@xenomai.org Date: Mon Jun 1 16:52:34 2015 +0200 boilerplate, copperplate: fix syncluster with remote sync (pshared) --- include/boilerplate/scope.h | 26 include/copperplate/cluster.h |9 - include/copperplate/threadobj.h |6 +-- lib/boilerplate/hash.c|4 -- lib/copperplate/cluster.c | 19 - lib/copperplate/heapobj-pshared.c | 79 +++-- lib/copperplate/threadobj.c |2 +- 7 files changed, 80 insertions(+), 65 deletions(-) diff --git a/include/boilerplate/scope.h b/include/boilerplate/scope.h index 9e551ae..ae71063 100644 --- a/include/boilerplate/scope.h +++ b/include/boilerplate/scope.h @@ -31,10 +31,15 @@ extern void *__main_heap; int pshared_check(void *heap, void *addr); -#define dref_type(t) memoff_t -#define __memoff(base, addr) ((caddr_t)(addr) - (caddr_t)(base)) -#define __memptr(base, off)((caddr_t)(base) + (off)) -#define __memchk(base, addr) pshared_check(base, addr) +#define dref_type(t) memoff_t + +#define __memoff(__base, __addr) ((caddr_t)(__addr) - (caddr_t)(__base)) +#define __memptr(__base, __off)((caddr_t)(__base) + (__off)) +#define __memchk(__base, __addr) pshared_check(__base, __addr) + +#define __moff(__p)__memoff(__main_heap, __p) +#define __mptr(__off) __memptr(__main_heap, __off) +#define __mchk(__p)__memchk(__main_heap, __p) #define mutex_scope_attribute PTHREAD_PROCESS_SHARED #define sem_scope_attribute1 @@ -47,10 +52,15 @@ int pshared_check(void *heap, void *addr); #define __main_heapNULL -#define dref_type(t) __typeof__(t) -#define __memoff(base, addr) (addr) -#define __memptr(base, off)(off) -#define __memchk(base, addr) 1 +#define dref_type(t) __typeof__(t) + +#define __memoff(__base, __addr) (__addr) +#define __memptr(__base, __off)(__off) +#define __memchk(__base, __addr) 1 + +#define __moff(__p)(__p) +#define __mptr(__off) (__off) +#define __mchk(__p)1 #define mutex_scope_attribute PTHREAD_PROCESS_PRIVATE #define sem_scope_attribute0 diff --git a/include/copperplate/cluster.h b/include/copperplate/cluster.h index af7dfee..c29d6f2 100644 --- a/include/copperplate/cluster.h +++ b/include/copperplate/cluster.h @@ -155,7 +155,14 @@ pid_t pvclusterobj_cnode(const struct pvclusterobj *cobj) #endif /* !CONFIG_XENO_PSHARED */ struct syncluster_wait_struct { - const char *name; + union { + struct { + dref_type(char *) name; + } shared; + struct { + const char *name; + } private; + }; }; #ifdef __cplusplus diff --git a/include/copperplate/threadobj.h b/include/copperplate/threadobj.h index edc4d6c..4562dcb 100644 --- a/include/copperplate/threadobj.h +++ b/include/copperplate/threadobj.h @@ -179,7 +179,7 @@ struct threadobj { struct holder wait_link; int wait_status; int wait_prio; - void *wait_union; + dref_type(void *) wait_union; size_t wait_size; timer_t periodic_timer; @@ -496,14 +496,14 @@ static inline int threadobj_get_errno(struct threadobj *thobj) struct threadobj *__thobj = threadobj_current();\ assert(__thobj != NULL);\ assert(sizeof(typeof(T)) = __thobj-wait_size);\ - __thobj-wait_union;\ + (void *)__mptr(__thobj-wait_union);\ }) #define threadobj_finish_wait()do { } while (0) static inline void *threadobj_get_wait(struct threadobj *thobj) { - return thobj-wait_union; + return __mptr(thobj-wait_union); } static inline const char *threadobj_get_name(struct threadobj *thobj) diff --git a/lib/boilerplate/hash.c b/lib/boilerplate/hash.c index 35fcf73..aa35fa4 100644 --- a/lib/boilerplate/hash.c +++ b/lib/boilerplate/hash.c @@ -44,10 +44,6 @@ c -= a; c -= b; c ^= (b15); \ } -#define __moff(__p)__memoff(__main_heap, __p) -#define __mptr(__p)__memptr(__main_heap, __p) -#define __mchk(__p)__memchk(__main_heap, __p) - static inline int store_key(struct hashobj *obj, const void *key, size_t len, const struct hash_operations *hops); diff --git a/lib/copperplate/cluster.c b/lib/copperplate/cluster.c index 7353aa8..9355d94 100644 --- a/lib/copperplate/cluster.c +++ b/lib/copperplate/cluster.c @@ -255,9 +255,8 @@ redo: hobj = hash_search(main_catalog, name, strlen(name), hash_operations);