#endif
};
+struct sched_rt_entity {
+ struct list_head run_list;
+ unsigned int time_slice;
+};
+
struct task_struct {
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
void *stack;
#endif
int prio, static_prio, normal_prio;
- struct list_head run_list;
const struct sched_class *sched_class;
struct sched_entity se;
+ struct sched_rt_entity rt;
#ifdef CONFIG_PREEMPT_NOTIFIERS
/* list of struct preempt_notifier: */
unsigned int policy;
cpumask_t cpus_allowed;
int nr_cpus_allowed;
- unsigned int time_slice;
#ifdef CONFIG_PREEMPT_RCU
int rcu_read_lock_nesting;
{
struct rt_prio_array *array = &rq->rt.active;
- list_add_tail(&p->run_list, array->queue + p->prio);
+ list_add_tail(&p->rt.run_list, array->queue + p->prio);
__set_bit(p->prio, array->bitmap);
inc_cpu_load(rq, p->se.load.weight);
update_curr_rt(rq);
- list_del(&p->run_list);
+ list_del(&p->rt.run_list);
if (list_empty(array->queue + p->prio))
__clear_bit(p->prio, array->bitmap);
dec_cpu_load(rq, p->se.load.weight);
{
struct rt_prio_array *array = &rq->rt.active;
- list_move_tail(&p->run_list, array->queue + p->prio);
+ list_move_tail(&p->rt.run_list, array->queue + p->prio);
}
static void
return NULL;
queue = array->queue + idx;
- next = list_entry(queue->next, struct task_struct, run_list);
+ next = list_entry(queue->next, struct task_struct, rt.run_list);
next->se.exec_start = rq->clock;
queue = array->queue + idx;
BUG_ON(list_empty(queue));
- next = list_entry(queue->next, struct task_struct, run_list);
+ next = list_entry(queue->next, struct task_struct, rt.run_list);
if (unlikely(pick_rt_task(rq, next, cpu)))
goto out;
if (queue->next->next != queue) {
/* same prio task */
next = list_entry(queue->next->next, struct task_struct,
- run_list);
+ rt.run_list);
if (pick_rt_task(rq, next, cpu))
goto out;
}
queue = array->queue + idx;
BUG_ON(list_empty(queue));
- list_for_each_entry(next, queue, run_list) {
+ list_for_each_entry(next, queue, rt.run_list) {
if (pick_rt_task(rq, next, cpu))
goto out;
}
if (p->policy != SCHED_RR)
return;
- if (--p->time_slice)
+ if (--p->rt.time_slice)
return;
- p->time_slice = DEF_TIMESLICE;
+ p->rt.time_slice = DEF_TIMESLICE;
/*
* Requeue to the end of queue if we are not the only element
* on the queue:
*/
- if (p->run_list.prev != p->run_list.next) {
+ if (p->rt.run_list.prev != p->rt.run_list.next) {
requeue_task_rt(rq, p);
set_tsk_need_resched(p);
}