From f4ffe0719dfc150ee182f308d31a226b034f206b Mon Sep 17 00:00:00 2001 From: Glenn Elliott Date: Wed, 6 Mar 2013 13:19:53 -0500 Subject: Differentiate between PERIODIC and SPORADIC tasks. Tasks can now be PERIODIC or SPORADIC. PERIODIC tasks do not have their job number incremented when they wake up and are tardy. PERIODIC jobs must end with a call to sys_complete_job() to set up their next release. (Not currently supported by pfair.) SPORADIC tasks _do_ have their job number incremented when they wake up and are tardy. SPORADIC is the default task behavior, carrying forward Litmus's current behavior. --- include/litmus/litmus.h | 8 ++++++-- include/litmus/rt_param.h | 18 ++++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) (limited to 'include') diff --git a/include/litmus/litmus.h b/include/litmus/litmus.h index 81f6a499570b..c9206adb3493 100644 --- a/include/litmus/litmus.h +++ b/include/litmus/litmus.h @@ -56,6 +56,7 @@ void litmus_exit_task(struct task_struct *tsk); #define get_partition(t) (tsk_rt(t)->task_params.cpu) #define get_priority(t) (tsk_rt(t)->task_params.priority) #define get_class(t) (tsk_rt(t)->task_params.cls) +#define get_release_policy(t) (tsk_rt(t)->task_params.release_policy) /* job_param macros */ #define get_exec_time(t) (tsk_rt(t)->job_params.exec_time) @@ -63,10 +64,13 @@ void litmus_exit_task(struct task_struct *tsk); #define get_release(t) (tsk_rt(t)->job_params.release) #define get_lateness(t) (tsk_rt(t)->job_params.lateness) +/* release policy macros */ +#define is_periodic(t) (get_release_policy(t) == PERIODIC) +#define is_sporadic(t) (get_release_policy(t) == SPORADIC) #ifdef CONFIG_ALLOW_EARLY_RELEASE -#define wants_early_release(t) (tsk_rt(t)->task_params.release_policy == EARLY) +#define is_early_releasing(t) (get_release_policy(t) == EARLY) #else -#define wants_early_release(t) (0) +#define is_early_releasing(t) (0) #endif #define is_hrt(t) \ diff --git a/include/litmus/rt_param.h b/include/litmus/rt_param.h index 4167508d9862..a16ac84d8043 100644 --- a/include/litmus/rt_param.h +++ b/include/litmus/rt_param.h @@ -33,19 +33,21 @@ typedef enum { PRECISE_ENFORCEMENT /* budgets are enforced with hrtimers */ } budget_policy_t; +/* Release behaviors for jobs. PERIODIC and EARLY jobs + must end by calling sys_complete_job() (or equivalent) + to set up their next release and deadline. */ typedef enum { + /* Jobs are released sporadically (provided job precedence + constraints are met). */ + SPORADIC, + /* Jobs are released periodically (provided job precedence constraints are met). */ PERIODIC, - /* Jobs are released sporadically (provided job precedence - constraints are met). NOTE: Litmus currently does not - distinguish between periodic and sporadic tasks. */ - SPORADIC = PERIODIC, - - /* Jobs are released immediatly after meeting precedence + /* Jobs are released immediately after meeting precedence constraints. Beware this can peg your CPUs if used in - the wrong applications. */ + the wrong applications. Only supported by EDF schedulers. */ EARLY } release_policy_t; @@ -78,7 +80,7 @@ struct rt_task { unsigned int priority; task_class_t cls; budget_policy_t budget_policy; /* ignored by pfair */ - release_policy_t release_policy; /* ignored by non-edf */ + release_policy_t release_policy; }; union np_flag { -- cgit v1.2.2