[Xenomai-git] Gilles Chanteperdrix : cobalt: move message queues syscalls to mq.c
Module: xenomai-gch Branch: for-forge Commit: 3b14eb4932b1b69f5a7de2fd16b94eb52e989225 URL: http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=3b14eb4932b1b69f5a7de2fd16b94eb52e989225 Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org Date: Sun Dec 11 18:12:25 2011 +0100 cobalt: move message queues syscalls to mq.c --- include/cobalt/mqueue.h | 47 --- kernel/cobalt/mq.c | 722 +++ kernel/cobalt/mq.h | 36 ++- kernel/cobalt/syscall.c | 340 +-- 4 files changed, 389 insertions(+), 756 deletions(-) diff --git a/include/cobalt/mqueue.h b/include/cobalt/mqueue.h index 8f8f677..00bc847 100644 --- a/include/cobalt/mqueue.h +++ b/include/cobalt/mqueue.h @@ -57,53 +57,6 @@ struct mq_attr { longmq_curmsgs; }; -#ifdef __cplusplus -extern C { -#endif - -int mq_getattr(mqd_t qd, - struct mq_attr *attr); - -int mq_setattr(mqd_t qd, - const struct mq_attr *__restrict__ attr, - struct mq_attr *__restrict__ oattr); - -int mq_send(mqd_t qd, - const char *buffer, - size_t len, - unsigned prio); - -int mq_close(mqd_t qd); - -ssize_t mq_receive(mqd_t q, - char *buffer, - size_t len, - unsigned *prio); - -ssize_t mq_timedreceive(mqd_t q, -char *__restrict__ buffer, -size_t len, -unsigned *__restrict__ prio, -const struct timespec *__restrict__ timeout); - -int mq_timedsend(mqd_t q, -const char *buffer, -size_t len, -unsigned prio, -const struct timespec *timeout); - -int mq_notify(mqd_t mqdes, const struct sigevent *notification); - -mqd_t mq_open(const char *name, - int oflags, - ...); - -int mq_unlink(const char *name); - -#ifdef __cplusplus -} -#endif - #else /* !(__KERNEL__ || __XENO_SIM__ || !HAVE_MQUEUE_H) */ #include_next mqueue.h diff --git a/kernel/cobalt/mq.c b/kernel/cobalt/mq.c index 732a178..352873c 100644 --- a/kernel/cobalt/mq.c +++ b/kernel/cobalt/mq.c @@ -46,8 +46,7 @@ struct cobalt_mq { cobalt_node_t nodebase; -#define node2mq(naddr) \ -((cobalt_mq_t *) (((char *)naddr) - offsetof(cobalt_mq_t, nodebase))) +#define node2mq(naddr) container_of(naddr, cobalt_mq_t, nodebase) xnpqueue_t queued; xnsynch_t receivers; @@ -62,12 +61,19 @@ struct cobalt_mq { DECLARE_XNSELECT(read_select); DECLARE_XNSELECT(write_select); -#define link2mq(laddr) \ -((cobalt_mq_t *) (((char *)laddr) - offsetof(cobalt_mq_t, link))) +#define link2mq(laddr) container_of(laddr, cobalt_mq_t, link) }; -#define any2msg(addr, member) \ -((cobalt_msg_t *)(((char *)addr) - offsetof(cobalt_msg_t, member))) +#define link2msg(addr) container_of(addr, cobalt_msg_t, link) + +typedef struct cobalt_msg { + xnpholder_t link; + size_t len; + char data[0]; +} cobalt_msg_t; + +#define cobalt_msg_get_prio(msg) (msg)-link.prio +#define cobalt_msg_set_prio(msg, prio) (msg)-link.prio = (prio) static xnqueue_t cobalt_mqq; @@ -76,7 +82,7 @@ static struct mq_attr default_attr = { mq_msgsize:128, }; -static cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq) +static inline cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq) { xnpholder_t *holder = (xnpholder_t *)getq(mq-avail); @@ -84,24 +90,21 @@ static cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq) return NULL; initph(holder); - return any2msg(holder, link); + return link2msg(holder); } -static void cobalt_mq_msg_free(cobalt_mq_t * mq, cobalt_msg_t * msg) +static inline void cobalt_mq_msg_free(cobalt_mq_t * mq, cobalt_msg_t * msg) { xnholder_t *holder = (xnholder_t *)(msg-link); inith(holder); prependq(mq-avail, holder); /* For earliest re-use of the block. */ } -static int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr) +static inline int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr) { unsigned i, msgsize, memsize; char *mem; - if (xnpod_asynch_p() || !xnpod_root_p()) - return EPERM; - if (!attr) attr = default_attr; else if (attr-mq_maxmsg = 0 || attr-mq_msgsize = 0) @@ -142,7 +145,7 @@ static int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr) return 0; } -static void cobalt_mq_destroy(cobalt_mq_t *mq) +static inline void cobalt_mq_destroy(cobalt_mq_t *mq) { int resched; spl_t s; @@ -231,7 +234,7 @@ static void cobalt_mq_destroy(cobalt_mq_t *mq) * Specification./a * */ -mqd_t mq_open(const char *name, int oflags, ...) +static mqd_t mq_open(const char *name, int oflags, ...) { struct mq_attr *attr;
[Xenomai-git] Gilles Chanteperdrix : cobalt: move message queues syscalls to mq.c
Module: xenomai-gch Branch: for-forge Commit: d18103f31d7216d2d40e597bdbc0ed4c0fc71176 URL: http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=d18103f31d7216d2d40e597bdbc0ed4c0fc71176 Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org Date: Sun Dec 11 18:12:25 2011 +0100 cobalt: move message queues syscalls to mq.c --- include/cobalt/mqueue.h | 47 --- kernel/cobalt/mq.c | 724 +++ kernel/cobalt/mq.h | 36 ++- kernel/cobalt/syscall.c | 340 +- 4 files changed, 390 insertions(+), 757 deletions(-) diff --git a/include/cobalt/mqueue.h b/include/cobalt/mqueue.h index 8f8f677..00bc847 100644 --- a/include/cobalt/mqueue.h +++ b/include/cobalt/mqueue.h @@ -57,53 +57,6 @@ struct mq_attr { longmq_curmsgs; }; -#ifdef __cplusplus -extern C { -#endif - -int mq_getattr(mqd_t qd, - struct mq_attr *attr); - -int mq_setattr(mqd_t qd, - const struct mq_attr *__restrict__ attr, - struct mq_attr *__restrict__ oattr); - -int mq_send(mqd_t qd, - const char *buffer, - size_t len, - unsigned prio); - -int mq_close(mqd_t qd); - -ssize_t mq_receive(mqd_t q, - char *buffer, - size_t len, - unsigned *prio); - -ssize_t mq_timedreceive(mqd_t q, -char *__restrict__ buffer, -size_t len, -unsigned *__restrict__ prio, -const struct timespec *__restrict__ timeout); - -int mq_timedsend(mqd_t q, -const char *buffer, -size_t len, -unsigned prio, -const struct timespec *timeout); - -int mq_notify(mqd_t mqdes, const struct sigevent *notification); - -mqd_t mq_open(const char *name, - int oflags, - ...); - -int mq_unlink(const char *name); - -#ifdef __cplusplus -} -#endif - #else /* !(__KERNEL__ || __XENO_SIM__ || !HAVE_MQUEUE_H) */ #include_next mqueue.h diff --git a/kernel/cobalt/mq.c b/kernel/cobalt/mq.c index 732a178..8894f05 100644 --- a/kernel/cobalt/mq.c +++ b/kernel/cobalt/mq.c @@ -46,8 +46,7 @@ struct cobalt_mq { cobalt_node_t nodebase; -#define node2mq(naddr) \ -((cobalt_mq_t *) (((char *)naddr) - offsetof(cobalt_mq_t, nodebase))) +#define node2mq(naddr) container_of(naddr, cobalt_mq_t, nodebase) xnpqueue_t queued; xnsynch_t receivers; @@ -62,12 +61,19 @@ struct cobalt_mq { DECLARE_XNSELECT(read_select); DECLARE_XNSELECT(write_select); -#define link2mq(laddr) \ -((cobalt_mq_t *) (((char *)laddr) - offsetof(cobalt_mq_t, link))) +#define link2mq(laddr) container_of(laddr, cobalt_mq_t, link) }; -#define any2msg(addr, member) \ -((cobalt_msg_t *)(((char *)addr) - offsetof(cobalt_msg_t, member))) +#define link2msg(addr) container_of(addr, cobalt_msg_t, link) + +typedef struct cobalt_msg { + xnpholder_t link; + size_t len; + char data[0]; +} cobalt_msg_t; + +#define cobalt_msg_get_prio(msg) (msg)-link.prio +#define cobalt_msg_set_prio(msg, prio) (msg)-link.prio = (prio) static xnqueue_t cobalt_mqq; @@ -76,7 +82,7 @@ static struct mq_attr default_attr = { mq_msgsize:128, }; -static cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq) +static inline cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq) { xnpholder_t *holder = (xnpholder_t *)getq(mq-avail); @@ -84,24 +90,21 @@ static cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq) return NULL; initph(holder); - return any2msg(holder, link); + return link2msg(holder); } -static void cobalt_mq_msg_free(cobalt_mq_t * mq, cobalt_msg_t * msg) +static inline void cobalt_mq_msg_free(cobalt_mq_t * mq, cobalt_msg_t * msg) { xnholder_t *holder = (xnholder_t *)(msg-link); inith(holder); prependq(mq-avail, holder); /* For earliest re-use of the block. */ } -static int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr) +static inline int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr) { unsigned i, msgsize, memsize; char *mem; - if (xnpod_asynch_p() || !xnpod_root_p()) - return EPERM; - if (!attr) attr = default_attr; else if (attr-mq_maxmsg = 0 || attr-mq_msgsize = 0) @@ -142,7 +145,7 @@ static int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr) return 0; } -static void cobalt_mq_destroy(cobalt_mq_t *mq) +static inline void cobalt_mq_destroy(cobalt_mq_t *mq) { int resched; spl_t s; @@ -231,7 +234,7 @@ static void cobalt_mq_destroy(cobalt_mq_t *mq) * Specification./a * */ -mqd_t mq_open(const char *name, int oflags, ...) +static mqd_t mq_open(const char *name, int oflags, ...) { struct mq_attr *attr;
[Xenomai-git] Gilles Chanteperdrix : cobalt: move message queues syscalls to mq.c
Module: xenomai-forge Branch: master Commit: d18103f31d7216d2d40e597bdbc0ed4c0fc71176 URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=d18103f31d7216d2d40e597bdbc0ed4c0fc71176 Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org Date: Sun Dec 11 18:12:25 2011 +0100 cobalt: move message queues syscalls to mq.c --- include/cobalt/mqueue.h | 47 --- kernel/cobalt/mq.c | 724 +++ kernel/cobalt/mq.h | 36 ++- kernel/cobalt/syscall.c | 340 +- 4 files changed, 390 insertions(+), 757 deletions(-) diff --git a/include/cobalt/mqueue.h b/include/cobalt/mqueue.h index 8f8f677..00bc847 100644 --- a/include/cobalt/mqueue.h +++ b/include/cobalt/mqueue.h @@ -57,53 +57,6 @@ struct mq_attr { longmq_curmsgs; }; -#ifdef __cplusplus -extern C { -#endif - -int mq_getattr(mqd_t qd, - struct mq_attr *attr); - -int mq_setattr(mqd_t qd, - const struct mq_attr *__restrict__ attr, - struct mq_attr *__restrict__ oattr); - -int mq_send(mqd_t qd, - const char *buffer, - size_t len, - unsigned prio); - -int mq_close(mqd_t qd); - -ssize_t mq_receive(mqd_t q, - char *buffer, - size_t len, - unsigned *prio); - -ssize_t mq_timedreceive(mqd_t q, -char *__restrict__ buffer, -size_t len, -unsigned *__restrict__ prio, -const struct timespec *__restrict__ timeout); - -int mq_timedsend(mqd_t q, -const char *buffer, -size_t len, -unsigned prio, -const struct timespec *timeout); - -int mq_notify(mqd_t mqdes, const struct sigevent *notification); - -mqd_t mq_open(const char *name, - int oflags, - ...); - -int mq_unlink(const char *name); - -#ifdef __cplusplus -} -#endif - #else /* !(__KERNEL__ || __XENO_SIM__ || !HAVE_MQUEUE_H) */ #include_next mqueue.h diff --git a/kernel/cobalt/mq.c b/kernel/cobalt/mq.c index 732a178..8894f05 100644 --- a/kernel/cobalt/mq.c +++ b/kernel/cobalt/mq.c @@ -46,8 +46,7 @@ struct cobalt_mq { cobalt_node_t nodebase; -#define node2mq(naddr) \ -((cobalt_mq_t *) (((char *)naddr) - offsetof(cobalt_mq_t, nodebase))) +#define node2mq(naddr) container_of(naddr, cobalt_mq_t, nodebase) xnpqueue_t queued; xnsynch_t receivers; @@ -62,12 +61,19 @@ struct cobalt_mq { DECLARE_XNSELECT(read_select); DECLARE_XNSELECT(write_select); -#define link2mq(laddr) \ -((cobalt_mq_t *) (((char *)laddr) - offsetof(cobalt_mq_t, link))) +#define link2mq(laddr) container_of(laddr, cobalt_mq_t, link) }; -#define any2msg(addr, member) \ -((cobalt_msg_t *)(((char *)addr) - offsetof(cobalt_msg_t, member))) +#define link2msg(addr) container_of(addr, cobalt_msg_t, link) + +typedef struct cobalt_msg { + xnpholder_t link; + size_t len; + char data[0]; +} cobalt_msg_t; + +#define cobalt_msg_get_prio(msg) (msg)-link.prio +#define cobalt_msg_set_prio(msg, prio) (msg)-link.prio = (prio) static xnqueue_t cobalt_mqq; @@ -76,7 +82,7 @@ static struct mq_attr default_attr = { mq_msgsize:128, }; -static cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq) +static inline cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq) { xnpholder_t *holder = (xnpholder_t *)getq(mq-avail); @@ -84,24 +90,21 @@ static cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq) return NULL; initph(holder); - return any2msg(holder, link); + return link2msg(holder); } -static void cobalt_mq_msg_free(cobalt_mq_t * mq, cobalt_msg_t * msg) +static inline void cobalt_mq_msg_free(cobalt_mq_t * mq, cobalt_msg_t * msg) { xnholder_t *holder = (xnholder_t *)(msg-link); inith(holder); prependq(mq-avail, holder); /* For earliest re-use of the block. */ } -static int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr) +static inline int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr) { unsigned i, msgsize, memsize; char *mem; - if (xnpod_asynch_p() || !xnpod_root_p()) - return EPERM; - if (!attr) attr = default_attr; else if (attr-mq_maxmsg = 0 || attr-mq_msgsize = 0) @@ -142,7 +145,7 @@ static int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr) return 0; } -static void cobalt_mq_destroy(cobalt_mq_t *mq) +static inline void cobalt_mq_destroy(cobalt_mq_t *mq) { int resched; spl_t s; @@ -231,7 +234,7 @@ static void cobalt_mq_destroy(cobalt_mq_t *mq) * Specification./a * */ -mqd_t mq_open(const char *name, int oflags, ...) +static mqd_t mq_open(const char *name, int oflags, ...) { struct mq_attr *attr;