Add the psos_task_denormalize_priority() and psos_task_get_priority()
functions. Use psos_task_get_priority() to fill oldprio_r in t_setpri().

Signed-off-by: Kim De Mey <kim.de...@gmail.com>

---

v2: Removed the psos_task_get_priority() call from task.h

diff --git a/include/psos/psos.h b/include/psos/psos.h
--- a/include/psos/psos.h
+++ b/include/psos/psos.h
@@ -366,6 +366,7 @@ u_long tm_wkwhen(u_long date,
                 u_long ticks);
 
 int psos_task_normalize_priority(unsigned long psos_prio);
+int psos_task_denormalize_priority(unsigned long core_prio);
 
 extern unsigned int psos_long_names;
 
diff --git a/lib/psos/task.c b/lib/psos/task.c
--- a/lib/psos/task.c
+++ b/lib/psos/task.c
@@ -236,6 +236,21 @@ int psos_task_normalize_priority(unsigne
        return psos_prio;
 }
 
+/*
+ * Although default pSOS priorities are mapped 1:1 to SCHED_RT,
+ * we do still have to use a denormalize function because these
+ * calls are weak and application code may be override the call
+ * and implement the mapping differently.
+ */
+
+__attribute__ ((weak))
+int psos_task_denormalize_priority(unsigned long core_prio)
+{
+       /* Map a SCHED_RT priority level to a pSOS one. */
+       return core_prio;
+}
+
+
 static int check_task_priority(u_long psos_prio, int *core_prio)
 {
        if (psos_prio < 1 || psos_prio > 255) /* In theory. */
@@ -246,6 +261,12 @@ static int check_task_priority(u_long ps
        return SUCCESS;
 }
 
+static int psos_task_get_priority(struct psos_task *task)
+{
+       int prio = threadobj_get_priority(&task->thobj);
+       return psos_task_denormalize_priority(prio);
+}
+
 u_long t_create(const char *name, u_long prio,
                u_long sstack, u_long ustack, u_long flags, u_long *tid_r)
 {
@@ -416,7 +437,7 @@ u_long t_setpri(u_long tid, u_long newpr
        if (task == NULL)
                return ret;
 
-       *oldprio_r = threadobj_get_priority(&task->thobj);
+       *oldprio_r = psos_task_get_priority(task);
 
        if (newprio == 0) { /* Only inquires for the task priority. */
                put_psos_task(task);

_______________________________________________
Xenomai mailing list
Xenomai@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to