Module: xenomai-forge
Branch: master
Commit: 622706fb309f42f979271a9031340eb100d0711e
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=622706fb309f42f979271a9031340eb100d0711e

Author: Philippe Gerum <r...@xenomai.org>
Date:   Sun Nov 20 23:13:02 2011 +0100

copperplate: introduce copperplate_renice_thread()

As a follow up to copperplate_create_thread(), we introduce a call to
change the priority of a thread, using the extended
pthread_setschedparm_ex() service over Cobalt. As a side-effect, this
may turn a regular POSIX thread into a Xenomai shadow.

---

 lib/copperplate/internal.c |   22 ++++++++++++++++++++++
 lib/copperplate/internal.h |    3 +++
 2 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/lib/copperplate/internal.c b/lib/copperplate/internal.c
index a7f9405..4596457 100644
--- a/lib/copperplate/internal.c
+++ b/lib/copperplate/internal.c
@@ -92,6 +92,17 @@ int copperplate_create_thread(int prio,
        return ret;
 }
 
+int copperplate_renice_thread(pthread_t tid, int prio)
+{
+       struct sched_param_ex param_ex;
+       int policy;
+
+       param_ex.sched_priority = prio;
+       policy = prio ? SCHED_RT : SCHED_OTHER;
+
+       return __bt(-pthread_setschedparam_ex(tid, policy, &param_ex));
+}
+
 #else /* CONFIG_XENO_MERCURY */
 
 int copperplate_probe_node(unsigned int id)
@@ -126,6 +137,17 @@ int copperplate_create_thread(int prio,
        return ret;
 }
 
+int copperplate_renice_thread(pthread_t tid, int prio)
+{
+       struct sched_param param;
+       int policy;
+
+       param.sched_priority = prio;
+       policy = prio ? SCHED_RT : SCHED_OTHER;
+
+       return __bt(-__RT(pthread_setschedparam(tid, policy, &param)));
+}
+
 #endif  /* CONFIG_XENO_MERCURY */
 
 void __printout(struct threadobj *thobj,
diff --git a/lib/copperplate/internal.h b/lib/copperplate/internal.h
index 8168310..ee9d905 100644
--- a/lib/copperplate/internal.h
+++ b/lib/copperplate/internal.h
@@ -73,6 +73,9 @@ int copperplate_create_thread(int prio,
                              void *(*start)(void *arg), void *arg,
                              size_t stacksize,
                              pthread_t *tid);
+
+int copperplate_renice_thread(pthread_t tid, int prio);
+
 #ifdef __cplusplus
 }
 #endif


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to