~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to kernel/sched_stoptask.c

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * stop-task scheduling class.
 
3
 *
 
4
 * The stop task is the highest priority task in the system, it preempts
 
5
 * everything and will be preempted by nothing.
 
6
 *
 
7
 * See kernel/stop_machine.c
 
8
 */
 
9
 
 
10
#ifdef CONFIG_SMP
 
11
static int
 
12
select_task_rq_stop(struct task_struct *p, int sd_flag, int flags)
 
13
{
 
14
        return task_cpu(p); /* stop tasks as never migrate */
 
15
}
 
16
#endif /* CONFIG_SMP */
 
17
 
 
18
static void
 
19
check_preempt_curr_stop(struct rq *rq, struct task_struct *p, int flags)
 
20
{
 
21
        /* we're never preempted */
 
22
}
 
23
 
 
24
static struct task_struct *pick_next_task_stop(struct rq *rq)
 
25
{
 
26
        struct task_struct *stop = rq->stop;
 
27
 
 
28
        if (stop && stop->on_rq)
 
29
                return stop;
 
30
 
 
31
        return NULL;
 
32
}
 
33
 
 
34
static void
 
35
enqueue_task_stop(struct rq *rq, struct task_struct *p, int flags)
 
36
{
 
37
        inc_nr_running(rq);
 
38
}
 
39
 
 
40
static void
 
41
dequeue_task_stop(struct rq *rq, struct task_struct *p, int flags)
 
42
{
 
43
        dec_nr_running(rq);
 
44
}
 
45
 
 
46
static void yield_task_stop(struct rq *rq)
 
47
{
 
48
        BUG(); /* the stop task should never yield, its pointless. */
 
49
}
 
50
 
 
51
static void put_prev_task_stop(struct rq *rq, struct task_struct *prev)
 
52
{
 
53
}
 
54
 
 
55
static void task_tick_stop(struct rq *rq, struct task_struct *curr, int queued)
 
56
{
 
57
}
 
58
 
 
59
static void set_curr_task_stop(struct rq *rq)
 
60
{
 
61
}
 
62
 
 
63
static void switched_to_stop(struct rq *rq, struct task_struct *p)
 
64
{
 
65
        BUG(); /* its impossible to change to this class */
 
66
}
 
67
 
 
68
static void
 
69
prio_changed_stop(struct rq *rq, struct task_struct *p, int oldprio)
 
70
{
 
71
        BUG(); /* how!?, what priority? */
 
72
}
 
73
 
 
74
static unsigned int
 
75
get_rr_interval_stop(struct rq *rq, struct task_struct *task)
 
76
{
 
77
        return 0;
 
78
}
 
79
 
 
80
/*
 
81
 * Simple, special scheduling class for the per-CPU stop tasks:
 
82
 */
 
83
static const struct sched_class stop_sched_class = {
 
84
        .next                   = &rt_sched_class,
 
85
 
 
86
        .enqueue_task           = enqueue_task_stop,
 
87
        .dequeue_task           = dequeue_task_stop,
 
88
        .yield_task             = yield_task_stop,
 
89
 
 
90
        .check_preempt_curr     = check_preempt_curr_stop,
 
91
 
 
92
        .pick_next_task         = pick_next_task_stop,
 
93
        .put_prev_task          = put_prev_task_stop,
 
94
 
 
95
#ifdef CONFIG_SMP
 
96
        .select_task_rq         = select_task_rq_stop,
 
97
#endif
 
98
 
 
99
        .set_curr_task          = set_curr_task_stop,
 
100
        .task_tick              = task_tick_stop,
 
101
 
 
102
        .get_rr_interval        = get_rr_interval_stop,
 
103
 
 
104
        .prio_changed           = prio_changed_stop,
 
105
        .switched_to            = switched_to_stop,
 
106
};