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

Author: Philippe Gerum <r...@xenomai.org>
Date:   Mon May 26 10:00:05 2014 +0200

cobalt/sched: raise SCHED_FIFO priority limit to 256

At this chance, we also extend the core scheduler to support a few
levels more (260 vs 258).

---

 doc/asciidoc/MIGRATION.adoc        |    4 ++--
 include/cobalt/kernel/sched-rt.h   |   22 +++++++++++-----------
 include/cobalt/kernel/schedqueue.h |    8 ++++----
 kernel/cobalt/posix/thread.c       |    8 ++++----
 kernel/cobalt/sched-quota.c        |    4 ----
 kernel/cobalt/sched-tp.c           |    5 -----
 6 files changed, 21 insertions(+), 30 deletions(-)

diff --git a/doc/asciidoc/MIGRATION.adoc b/doc/asciidoc/MIGRATION.adoc
index 650a6f4..9d0b4fb 100644
--- a/doc/asciidoc/MIGRATION.adoc
+++ b/doc/asciidoc/MIGRATION.adoc
@@ -384,11 +384,11 @@ using the Cobalt core.
 - +sched_get_priority_max()+ returns a larger value for all real-time
   policies over Cobalt, compared to their Mercury counterpart, which
   are directly mapped over the native Linux scheduling policies
-  instead (e.g. 255 vs 99 for SCHED_FIFO/RR). Applications wary of
+  instead (e.g. 256 vs 99 for SCHED_FIFO/RR). Applications wary of
   portability between the Cobalt and Mercury cores should probe for
   such limit.
 
-- The +SCHED_SPORADIC+ and +SCHED_TP classes now support up to 255
+- The +SCHED_SPORADIC+ and +SCHED_TP classes now support up to 256
   priority levels, instead of 99 as previously with Xenomai 2.x.
 
 - +pthread_setschedparam()+ may cause a secondary mode switch for the
diff --git a/include/cobalt/kernel/sched-rt.h b/include/cobalt/kernel/sched-rt.h
index 7e34850..3cb85ef 100644
--- a/include/cobalt/kernel/sched-rt.h
+++ b/include/cobalt/kernel/sched-rt.h
@@ -31,22 +31,22 @@
  * Global priority scale for Xenomai's core scheduling class,
  * available to SCHED_COBALT members.
  */
-#define XNSCHED_RT_MIN_PRIO    0
-#define XNSCHED_RT_MAX_PRIO    257
-#define XNSCHED_RT_NR_PRIO     \
-       (XNSCHED_RT_MAX_PRIO - XNSCHED_RT_MIN_PRIO + 1)
+#define XNSCHED_CORE_MIN_PRIO  0
+#define XNSCHED_CORE_MAX_PRIO  259
+#define XNSCHED_CORE_NR_PRIO   \
+       (XNSCHED_CORE_MAX_PRIO - XNSCHED_CORE_MIN_PRIO + 1)
 
 /*
- * Common POSIX priority range for SCHED_FIFO, and all other classes
- * except SCHED_COBALT.
+ * Priority range for SCHED_FIFO, and all other classes Cobalt
+ * implements except SCHED_COBALT.
  */
 #define XNSCHED_FIFO_MIN_PRIO  1
-#define XNSCHED_FIFO_MAX_PRIO  255
+#define XNSCHED_FIFO_MAX_PRIO  256
 
-#if XNSCHED_RT_NR_PRIO > XNSCHED_CLASS_WEIGHT_FACTOR ||        \
-  (defined(CONFIG_XENO_OPT_SCALABLE_SCHED) &&          \
-   XNSCHED_RT_NR_PRIO > XNSCHED_MLQ_LEVELS)
-#error "SCHED_COBALT has too many priority levels"
+#if XNSCHED_CORE_NR_PRIO > XNSCHED_CLASS_WEIGHT_FACTOR ||      \
+  (defined(CONFIG_XENO_OPT_SCALABLE_SCHED) &&                  \
+   XNSCHED_CORE_NR_PRIO > XNSCHED_MLQ_LEVELS)
+#error "XNSCHED_MLQ_LEVELS is too low"
 #endif
 
 extern struct xnsched_class xnsched_class_rt;
diff --git a/include/cobalt/kernel/schedqueue.h 
b/include/cobalt/kernel/schedqueue.h
index 09077e4..766cdf0 100644
--- a/include/cobalt/kernel/schedqueue.h
+++ b/include/cobalt/kernel/schedqueue.h
@@ -30,11 +30,11 @@
 
 /*
  * Multi-level priority queue, suitable for handling the runnable
- * thread queue of a scheduling class with O(1) property. We only
- * manage a descending queuing order, i.e. highest numbered priorities
- * come first.
+ * thread queue of the core scheduling class with O(1) property. We
+ * only manage a descending queuing order, i.e. highest numbered
+ * priorities come first.
  */
-#define XNSCHED_MLQ_LEVELS  258        /* i.e. XNSCHED_RT_NR_PRIO */
+#define XNSCHED_MLQ_LEVELS  260        /* i.e. XNSCHED_CORE_NR_PRIO */
 
 struct xnsched_mlq {
        int elems;
diff --git a/kernel/cobalt/posix/thread.c b/kernel/cobalt/posix/thread.c
index c336fbb..5db7fea 100644
--- a/kernel/cobalt/posix/thread.c
+++ b/kernel/cobalt/posix/thread.c
@@ -312,8 +312,8 @@ get_policy_param(union xnsched_policy_param *param,
                        return NULL;
                break;
        case SCHED_COBALT:
-               if (prio < XNSCHED_RT_MIN_PRIO ||
-                   prio > XNSCHED_RT_MAX_PRIO)
+               if (prio < XNSCHED_CORE_MIN_PRIO ||
+                   prio > XNSCHED_CORE_MAX_PRIO)
                        return NULL;
                break;
 #ifdef CONFIG_XENO_OPT_SCHED_SPORADIC
@@ -1239,7 +1239,7 @@ int cobalt_sched_min_prio(int policy)
                ret = XNSCHED_FIFO_MIN_PRIO;
                break;
        case SCHED_COBALT:
-               ret = XNSCHED_RT_MIN_PRIO;
+               ret = XNSCHED_CORE_MIN_PRIO;
                break;
        case SCHED_NORMAL:
        case SCHED_WEAK:
@@ -1267,7 +1267,7 @@ int cobalt_sched_max_prio(int policy)
                ret = XNSCHED_FIFO_MAX_PRIO;
                break;
        case SCHED_COBALT:
-               ret = XNSCHED_RT_MAX_PRIO;
+               ret = XNSCHED_CORE_MAX_PRIO;
                break;
        case SCHED_NORMAL:
                ret = 0;
diff --git a/kernel/cobalt/sched-quota.c b/kernel/cobalt/sched-quota.c
index 5b1c659..b12edae 100644
--- a/kernel/cobalt/sched-quota.c
+++ b/kernel/cobalt/sched-quota.c
@@ -220,10 +220,6 @@ static void xnsched_quota_init(struct xnsched *sched)
        char limiter_name[XNOBJECT_NAME_LEN], refiller_name[XNOBJECT_NAME_LEN];
        struct xnsched_quota *qs = &sched->quota;
 
-       /*
-        * CAUTION: we may inherit RT priority during PIP boost, so we
-        * need as many levels as SCHED_RT defines.
-        */
        xnsched_initq(&qs->runnable);
        qs->period_ns = CONFIG_XENO_OPT_SCHED_QUOTA_PERIOD * 1000ULL;
        INIT_LIST_HEAD(&qs->groups);
diff --git a/kernel/cobalt/sched-tp.c b/kernel/cobalt/sched-tp.c
index 880d2b3..e1dce84 100644
--- a/kernel/cobalt/sched-tp.c
+++ b/kernel/cobalt/sched-tp.c
@@ -89,11 +89,6 @@ static void xnsched_tp_init(struct xnsched *sched)
        char timer_name[XNOBJECT_NAME_LEN];
        int n;
 
-       /*
-        * Build the runqueues.
-        * CAUTION: we may inherit RT priority during PIP boost, so we
-        * need as many levels as SCHED_RT defines.
-        */
        for (n = 0; n < CONFIG_XENO_OPT_SCHED_TP_NRPART; n++)
                xnsched_initq(&tp->partitions[n].runnable);
 


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

Reply via email to