Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 58270
b: refs/heads/master
c: fa72e9e
h: refs/heads/master
v: v3
  • Loading branch information
Ingo Molnar committed Jul 9, 2007
1 parent 3621966 commit c2d908b
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: bb44e5d1c6b3b748e0facf8f516b3162009feb27
refs/heads/master: fa72e9e484c16f0c9aee23981917d8c8c03f0482
71 changes: 71 additions & 0 deletions trunk/kernel/sched_idletask.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* idle-task scheduling class.
*
* (NOTE: these are not related to SCHED_IDLE tasks which are
* handled in sched_fair.c)
*/

/*
* Idle tasks are unconditionally rescheduled:
*/
static void check_preempt_curr_idle(struct rq *rq, struct task_struct *p)
{
resched_task(rq->idle);
}

static struct task_struct *pick_next_task_idle(struct rq *rq, u64 now)
{
schedstat_inc(rq, sched_goidle);

return rq->idle;
}

/*
* It is not legal to sleep in the idle task - print a warning
* message if some code attempts to do it:
*/
static void
dequeue_task_idle(struct rq *rq, struct task_struct *p, int sleep, u64 now)
{
spin_unlock_irq(&rq->lock);
printk(KERN_ERR "bad: scheduling from the idle thread!\n");
dump_stack();
spin_lock_irq(&rq->lock);
}

static void put_prev_task_idle(struct rq *rq, struct task_struct *prev, u64 now)
{
}

static int
load_balance_idle(struct rq *this_rq, int this_cpu, struct rq *busiest,
unsigned long max_nr_move, unsigned long max_load_move,
struct sched_domain *sd, enum cpu_idle_type idle,
int *all_pinned, unsigned long *total_load_moved)
{
return 0;
}

static void task_tick_idle(struct rq *rq, struct task_struct *curr)
{
}

/*
* Simple, special scheduling class for the per-CPU idle tasks:
*/
static struct sched_class idle_sched_class __read_mostly = {
/* no enqueue/yield_task for idle tasks */

/* dequeue is not valid, we print a debug message there: */
.dequeue_task = dequeue_task_idle,

.check_preempt_curr = check_preempt_curr_idle,

.pick_next_task = pick_next_task_idle,
.put_prev_task = put_prev_task_idle,

.load_balance = load_balance_idle,

.task_tick = task_tick_idle,
/* no .task_new for idle tasks */
};

0 comments on commit c2d908b

Please sign in to comment.