Blame view

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