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