Module: xenomai-forge Branch: master Commit: b1539948cf9b547734a269b58ca4693520f61ad2 URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=b1539948cf9b547734a269b58ca4693520f61ad2
Author: Philippe Gerum <r...@xenomai.org> Date: Tue Jan 3 15:13:41 2012 +0100 cobalt: detect misplaced header in ipipe_post_work_root() --- include/asm-generic/bits/shadow.h | 2 +- include/asm-generic/ipipe/wrappers.h | 11 ++++++++++- kernel/cobalt/mq.c | 2 +- kernel/cobalt/nucleus/shadow.c | 4 ++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/include/asm-generic/bits/shadow.h b/include/asm-generic/bits/shadow.h index 05c113b..258a82e 100644 --- a/include/asm-generic/bits/shadow.h +++ b/include/asm-generic/bits/shadow.h @@ -57,7 +57,7 @@ static void do_lostage_work(unsigned int virq, void *cookie) } } -void ipipe_post_work_root(struct ipipe_work_header *work) +void __ipipe_post_work_root(struct ipipe_work_header *work) { unsigned long flags; void *tail; diff --git a/include/asm-generic/ipipe/wrappers.h b/include/asm-generic/ipipe/wrappers.h index f29b8bc..2f93095 100644 --- a/include/asm-generic/ipipe/wrappers.h +++ b/include/asm-generic/ipipe/wrappers.h @@ -211,7 +211,16 @@ static inline void ipipe_set_hooks(struct ipipe_domain *ipd, } } -void ipipe_post_work_root(struct ipipe_work_header *work); +void __ipipe_post_work_root(struct ipipe_work_header *work); + +#define ipipe_post_work_root(p, header) \ + do { \ + void header_not_at_start(void); \ + if (offsetof(typeof(*(p)), header)) { \ + header_not_at_start(); \ + } \ + __ipipe_post_work_root(&(p)->header); \ + } while (0) static inline struct ipipe_threadinfo *ipipe_task_threadinfo(struct task_struct *p) diff --git a/kernel/cobalt/mq.c b/kernel/cobalt/mq.c index 42552b0..b0a83c5 100644 --- a/kernel/cobalt/mq.c +++ b/kernel/cobalt/mq.c @@ -172,7 +172,7 @@ static inline void cobalt_mq_destroy(cobalt_mq_t *mq) xnlock_put_irqrestore(&nklock, s); xnselect_destroy(&mq->read_select); xnselect_destroy(&mq->write_select); - ipipe_post_work_root(&freework.work); + ipipe_post_work_root(&freework, work); if (resched) xnpod_schedule(); diff --git a/kernel/cobalt/nucleus/shadow.c b/kernel/cobalt/nucleus/shadow.c index 136c328..a28ce30 100644 --- a/kernel/cobalt/nucleus/shadow.c +++ b/kernel/cobalt/nucleus/shadow.c @@ -308,7 +308,7 @@ static void post_wakeup(struct task_struct *p) .task = p, }; - ipipe_post_work_root(&wakework.work); + ipipe_post_work_root(&wakework, work); } struct lostage_signal { @@ -1815,7 +1815,7 @@ void xnshadow_send_sig(xnthread_t *thread, int sig, int arg) .sigval = arg, }; - ipipe_post_work_root(&sigwork.work); + ipipe_post_work_root(&sigwork, work); } EXPORT_SYMBOL_GPL(xnshadow_send_sig); _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git