* [Xenomai] [PATCH 0 of 3 v2] Xenomai-forge thread_obj: unset __THREAD_S_SAFE when not needed
@ 2013-10-21 14:09 Kim De Mey
2013-10-21 14:09 ` [Xenomai] [PATCH 1 of 3 v2] Xenomai-forge thread_obj: Do not set " Kim De Mey
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Kim De Mey @ 2013-10-21 14:09 UTC (permalink / raw)
To: xenomai
Adjusted patches after feedback & suggestions:
PATCH 1: Setting the __THREAD_S_SAFE for thobj->status is done later
only when necessary.
PATCH 2: Add warning when pipe() system call fails + assert on return
value of notifier_init().
PATCH 3: Extends task-9 with 3 more test loops (of which two make the
error that PATCH 1 solves occur).
lib/copperplate/notifier.c | 5 ++++-
lib/copperplate/threadobj.c | 6 ++++--
lib/psos/testsuite/task-9.c | 38 ++++++++++++++++++++++++++++++++++++--
3 files changed, 44 insertions(+), 5 deletions(-)
^ permalink raw reply [flat|nested] 4+ messages in thread* [Xenomai] [PATCH 1 of 3 v2] Xenomai-forge thread_obj: Do not set __THREAD_S_SAFE when not needed 2013-10-21 14:09 [Xenomai] [PATCH 0 of 3 v2] Xenomai-forge thread_obj: unset __THREAD_S_SAFE when not needed Kim De Mey @ 2013-10-21 14:09 ` Kim De Mey 2013-10-21 14:09 ` [Xenomai] [PATCH 2 of 3 v2] Xenomai-forge notifier_init: warning on failed pipe Kim De Mey 2013-10-21 14:09 ` [Xenomai] [PATCH 3 of 3 v2] Xenomai-forge extend psos testsuite task-9 Kim De Mey 2 siblings, 0 replies; 4+ messages in thread From: Kim De Mey @ 2013-10-21 14:09 UTC (permalink / raw) To: xenomai Do not set __THREAD_S_SAFE for thobj->status when the priority of the task is lower than the priority of the current task. Signed-off-by: Kim De Mey <kim.demey@gmail.com> --- lib/copperplate/threadobj.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/lib/copperplate/threadobj.c b/lib/copperplate/threadobj.c --- a/lib/copperplate/threadobj.c +++ b/lib/copperplate/threadobj.c @@ -926,7 +926,7 @@ int threadobj_start(struct threadobj *th if (thobj->status & __THREAD_S_STARTED) return 0; - thobj->status |= __THREAD_S_STARTED|__THREAD_S_SAFE; + thobj->status |= __THREAD_S_STARTED; __RT(pthread_cond_signal(&thobj->barrier)); if (current && thobj->priority <= current->priority) @@ -943,6 +943,7 @@ int threadobj_start(struct threadobj *th */ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldstate); + thobj->status |= __THREAD_S_SAFE; wait_on_barrier(thobj, __THREAD_S_ACTIVE); thobj->status &= ~__THREAD_S_SAFE; ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Xenomai] [PATCH 2 of 3 v2] Xenomai-forge notifier_init: warning on failed pipe 2013-10-21 14:09 [Xenomai] [PATCH 0 of 3 v2] Xenomai-forge thread_obj: unset __THREAD_S_SAFE when not needed Kim De Mey 2013-10-21 14:09 ` [Xenomai] [PATCH 1 of 3 v2] Xenomai-forge thread_obj: Do not set " Kim De Mey @ 2013-10-21 14:09 ` Kim De Mey 2013-10-21 14:09 ` [Xenomai] [PATCH 3 of 3 v2] Xenomai-forge extend psos testsuite task-9 Kim De Mey 2 siblings, 0 replies; 4+ messages in thread From: Kim De Mey @ 2013-10-21 14:09 UTC (permalink / raw) To: xenomai Give a warning if one of the pipe() system calls fails. To indicate that there is an underlying problem. Also add an assert on the notifier_init return value in threadobj_setup_coresp. Signed-off-by: Kim De Mey <kim.demey@gmail.com> --- lib/copperplate/notifier.c | 5 ++++- lib/copperplate/threadobj.c | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/copperplate/notifier.c b/lib/copperplate/notifier.c --- a/lib/copperplate/notifier.c +++ b/lib/copperplate/notifier.c @@ -143,10 +143,13 @@ int notifier_init(struct notifier *nf, sigset_t oset; int fd; - if (pipe(nf->psfd) < 0) + if (pipe(nf->psfd) < 0) { + warning("failed to create file descriptors"); return __bt(-errno); + } if (pipe(nf->pwfd) < 0) { + warning("failed to create file descriptors"); __STD(close(nf->psfd[0])); __STD(close(nf->psfd[1])); return __bt(-errno); diff --git a/lib/copperplate/threadobj.c b/lib/copperplate/threadobj.c --- a/lib/copperplate/threadobj.c +++ b/lib/copperplate/threadobj.c @@ -449,7 +449,8 @@ static inline int threadobj_setup_coresp int ret; prctl(PR_SET_NAME, (unsigned long)thobj->name, 0, 0, 0); - notifier_init(&thobj->core.notifier, notifier_callback, 1); + ret = notifier_init(&thobj->core.notifier, notifier_callback, 1); + assert(ret == 0); thobj->core.period = 0; /* ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Xenomai] [PATCH 3 of 3 v2] Xenomai-forge extend psos testsuite task-9 2013-10-21 14:09 [Xenomai] [PATCH 0 of 3 v2] Xenomai-forge thread_obj: unset __THREAD_S_SAFE when not needed Kim De Mey 2013-10-21 14:09 ` [Xenomai] [PATCH 1 of 3 v2] Xenomai-forge thread_obj: Do not set " Kim De Mey 2013-10-21 14:09 ` [Xenomai] [PATCH 2 of 3 v2] Xenomai-forge notifier_init: warning on failed pipe Kim De Mey @ 2013-10-21 14:09 ` Kim De Mey 2 siblings, 0 replies; 4+ messages in thread From: Kim De Mey @ 2013-10-21 14:09 UTC (permalink / raw) To: xenomai Extend the task-9 test with different root task priorities and with both incrementing and decrementing priorities for the test tasks. Signed-off-by: Kim De Mey <kim.demey@gmail.com> --- lib/psos/testsuite/task-9.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 files changed, 36 insertions(+), 2 deletions(-) diff --git a/lib/psos/testsuite/task-9.c b/lib/psos/testsuite/task-9.c --- a/lib/psos/testsuite/task-9.c +++ b/lib/psos/testsuite/task-9.c @@ -14,7 +14,7 @@ static void test_task(u_long a0, u_long traceobj_exit(&trobj); } -static void root_task(u_long a0, u_long a1, u_long a2, u_long a3) +static void root_task(u_long increment, u_long a1, u_long a2, u_long a3) { u_long args[] = { 1, 2, 3, 4 }, ret, tid; int n; @@ -22,7 +22,10 @@ static void root_task(u_long a0, u_long traceobj_enter(&trobj); for (n = 0; n < 512; n++) { - ret = t_create ("TEST", (n % MAX_PRIO) + 2,100000, 0, 0, &tid); + if(increment) + ret = t_create ("TEST", (n % MAX_PRIO) + 2,100000, 0, 0, &tid); + else + ret = t_create ("TEST", MAX_PRIO - (n % MAX_PRIO) + 1,100000, 0, 0, &tid); traceobj_assert(&trobj, ret == SUCCESS); ret = t_start(tid, T_PREEMPT, test_task, args); traceobj_assert(&trobj, ret == SUCCESS); @@ -39,6 +42,7 @@ int main(int argc, char *const argv[]) traceobj_init(&trobj, argv[0], 0); + // Low priority root task, loop incr. priority test tasks ret = t_create("root", 3, 0, 0, 0, &tid); traceobj_assert(&trobj, ret == SUCCESS); @@ -47,5 +51,35 @@ int main(int argc, char *const argv[]) traceobj_join(&trobj); + // Low priority root task, loop decr. priority test tasks + args[0] = 0; + ret = t_create("root", 3, 0, 0, 0, &tid); + traceobj_assert(&trobj, ret == SUCCESS); + + ret = t_start(tid, 0, root_task, args); + traceobj_assert(&trobj, ret == SUCCESS); + + traceobj_join(&trobj); + + // High priority root task, loop incr. priority test tasks + args[0] = 1; + ret = t_create("root", 90, 0, 0, 0, &tid); + traceobj_assert(&trobj, ret == SUCCESS); + + ret = t_start(tid, 0, root_task, args); + traceobj_assert(&trobj, ret == SUCCESS); + + traceobj_join(&trobj); + + // High priority root task, loop decr. priority test tasks + args[0] = 0; + ret = t_create("root", 90, 0, 0, 0, &tid); + traceobj_assert(&trobj, ret == SUCCESS); + + ret = t_start(tid, 0, root_task, args); + traceobj_assert(&trobj, ret == SUCCESS); + + traceobj_join(&trobj); + exit(0); } ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-10-21 14:09 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-10-21 14:09 [Xenomai] [PATCH 0 of 3 v2] Xenomai-forge thread_obj: unset __THREAD_S_SAFE when not needed Kim De Mey 2013-10-21 14:09 ` [Xenomai] [PATCH 1 of 3 v2] Xenomai-forge thread_obj: Do not set " Kim De Mey 2013-10-21 14:09 ` [Xenomai] [PATCH 2 of 3 v2] Xenomai-forge notifier_init: warning on failed pipe Kim De Mey 2013-10-21 14:09 ` [Xenomai] [PATCH 3 of 3 v2] Xenomai-forge extend psos testsuite task-9 Kim De Mey
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.