The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/kernel/sched_idletask.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * idle-task scheduling class.
    3  *
    4  * (NOTE: these are not related to SCHED_IDLE tasks which are
    5  *  handled in sched_fair.c)
    6  */
    7 
    8 #ifdef CONFIG_SMP
    9 static int
   10 select_task_rq_idle(struct task_struct *p, int sd_flag, int flags)
   11 {
   12         return task_cpu(p); /* IDLE tasks as never migrated */
   13 }
   14 #endif /* CONFIG_SMP */
   15 /*
   16  * Idle tasks are unconditionally rescheduled:
   17  */
   18 static void check_preempt_curr_idle(struct rq *rq, struct task_struct *p, int flags)
   19 {
   20         resched_task(rq->idle);
   21 }
   22 
   23 static struct task_struct *pick_next_task_idle(struct rq *rq)
   24 {
   25         schedstat_inc(rq, sched_goidle);
   26         calc_load_account_idle(rq);
   27         return rq->idle;
   28 }
   29 
   30 /*
   31  * It is not legal to sleep in the idle task - print a warning
   32  * message if some code attempts to do it:
   33  */
   34 static void
   35 dequeue_task_idle(struct rq *rq, struct task_struct *p, int flags)
   36 {
   37         raw_spin_unlock_irq(&rq->lock);
   38         printk(KERN_ERR "bad: scheduling from the idle thread!\n");
   39         dump_stack();
   40         raw_spin_lock_irq(&rq->lock);
   41 }
   42 
   43 static void put_prev_task_idle(struct rq *rq, struct task_struct *prev)
   44 {
   45 }
   46 
   47 static void task_tick_idle(struct rq *rq, struct task_struct *curr, int queued)
   48 {
   49 }
   50 
   51 static void set_curr_task_idle(struct rq *rq)
   52 {
   53 }
   54 
   55 static void switched_to_idle(struct rq *rq, struct task_struct *p)
   56 {
   57         BUG();
   58 }
   59 
   60 static void
   61 prio_changed_idle(struct rq *rq, struct task_struct *p, int oldprio)
   62 {
   63         BUG();
   64 }
   65 
   66 static unsigned int get_rr_interval_idle(struct rq *rq, struct task_struct *task)
   67 {
   68         return 0;
   69 }
   70 
   71 /*
   72  * Simple, special scheduling class for the per-CPU idle tasks:
   73  */
   74 static const struct sched_class idle_sched_class = {
   75         /* .next is NULL */
   76         /* no enqueue/yield_task for idle tasks */
   77 
   78         /* dequeue is not valid, we print a debug message there: */
   79         .dequeue_task           = dequeue_task_idle,
   80 
   81         .check_preempt_curr     = check_preempt_curr_idle,
   82 
   83         .pick_next_task         = pick_next_task_idle,
   84         .put_prev_task          = put_prev_task_idle,
   85 
   86 #ifdef CONFIG_SMP
   87         .select_task_rq         = select_task_rq_idle,
   88 #endif
   89 
   90         .set_curr_task          = set_curr_task_idle,
   91         .task_tick              = task_tick_idle,
   92 
   93         .get_rr_interval        = get_rr_interval_idle,
   94 
   95         .prio_changed           = prio_changed_idle,
   96         .switched_to            = switched_to_idle,
   97 };

Cache object: 15fef8e9ce42a9093424712166fd9a3f


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.