diff options
author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2010-02-03 19:40:01 -0500 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-29 17:26:09 -0400 |
commit | fb95c290fe461de794c984bc4130741f04f9142d (patch) | |
tree | e548d3eca0e4148ee764343db6a1d9e5f9e98d05 /litmus/sched_litmus.c | |
parent | b973c95c86e6710c913c01a67013605f68a3c2c3 (diff) |
Re-implement non-preemptive section support.
Re-introduce NP sections in the configuration and in litmus.h. Remove the old
np_flag from rt_param.
If CONFIG_NP_SECTION is disabled, then all non-preemptive section checks are
constant expressions which should get removed by the dead code elimination
during optimization.
Instead of re-implementing sys_exit_np(), we simply repurposed sched_yield()
for calling into the scheduler to trigger delayed preemptions.
Diffstat (limited to 'litmus/sched_litmus.c')
-rw-r--r-- | litmus/sched_litmus.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/litmus/sched_litmus.c b/litmus/sched_litmus.c index 64ad5db07795..c1fc7748e590 100644 --- a/litmus/sched_litmus.c +++ b/litmus/sched_litmus.c | |||
@@ -177,7 +177,13 @@ static void dequeue_task_litmus(struct rq *rq, struct task_struct *p, int sleep) | |||
177 | static void yield_task_litmus(struct rq *rq) | 177 | static void yield_task_litmus(struct rq *rq) |
178 | { | 178 | { |
179 | BUG_ON(rq->curr != current); | 179 | BUG_ON(rq->curr != current); |
180 | litmus->complete_job(); | 180 | /* sched_yield() is called to trigger delayed preemptions. |
181 | * Thus, mark the current task as needing to be rescheduled. | ||
182 | * This will cause the scheduler plugin to be invoked, which can | ||
183 | * then determine if a preemption is still required. | ||
184 | */ | ||
185 | clear_exit_np(current); | ||
186 | set_tsk_need_resched(current); | ||
181 | } | 187 | } |
182 | 188 | ||
183 | /* Plugins are responsible for this. | 189 | /* Plugins are responsible for this. |