55bff1894bfb1fc7f0a55bed8873b786a6b06599
[projects/modsched/linux.git] / kernel / sched / idle.c
1 /*
2  * Generic entry point for the idle threads
3  */
4 #include <linux/sched.h>
5 #include <linux/cpu.h>
6 #include <linux/cpuidle.h>
7 #include <linux/tick.h>
8 #include <linux/mm.h>
9 #include <linux/stackprotector.h>
10 #include <linux/suspend.h>
11
12 #include <asm/tlb.h>
13
14 #include <trace/events/power.h>
15
16 #ifdef CONFIG_MOD_SCHED
17 #include <os/linux.h>
18 #else
19 #include "cfs/sched.h"
20 #endif
21
22 /**
23  * sched_idle_set_state - Record idle state for the current CPU.
24  * @idle_state: State to record.
25  */
26 void sched_idle_set_state(struct cpuidle_state *idle_state)
27 {
28         idle_set_state(this_rq(), idle_state);
29 }
30
31 static int __read_mostly cpu_idle_force_poll;
32
33 void cpu_idle_poll_ctrl(bool enable)
34 {
35         if (enable) {
36                 cpu_idle_force_poll++;
37         } else {
38                 cpu_idle_force_poll--;
39                 WARN_ON_ONCE(cpu_idle_force_poll < 0);
40         }
41 }
42
43 #ifdef CONFIG_GENERIC_IDLE_POLL_SETUP
44 static int __init cpu_idle_poll_setup(char *__unused)
45 {
46         cpu_idle_force_poll = 1;
47         return 1;
48 }
49 __setup("nohlt", cpu_idle_poll_setup);
50
51 static int __init cpu_idle_nopoll_setup(char *__unused)
52 {
53         cpu_idle_force_poll = 0;
54         return 1;
55 }
56 __setup("hlt", cpu_idle_nopoll_setup);
57 #endif
58
59 static inline int cpu_idle_poll(void)
60 {
61         rcu_idle_enter();
62         trace_cpu_idle_rcuidle(0, smp_processor_id());
63         local_irq_enable();
64         while (!tif_need_resched() &&
65                 (cpu_idle_force_poll || tick_check_broadcast_expired()))
66                 cpu_relax();
67         trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id());
68         rcu_idle_exit();
69         return 1;
70 }
71
72 /* Weak implementations for optional arch specific functions */
73 void __weak arch_cpu_idle_prepare(void) { }
74 void __weak arch_cpu_idle_enter(void) { }
75 void __weak arch_cpu_idle_exit(void) { }
76 void __weak arch_cpu_idle_dead(void) { }
77 void __weak arch_cpu_idle(void)
78 {
79         cpu_idle_force_poll = 1;
80         local_irq_enable();
81 }
82
83 /**
84  * default_idle_call - Default CPU idle routine.
85  *
86  * To use when the cpuidle framework cannot be used.
87  */
88 void default_idle_call(void)
89 {
90         if (current_clr_polling_and_test())
91                 local_irq_enable();
92         else
93                 arch_cpu_idle();
94 }
95
96 static int call_cpuidle(struct cpuidle_driver *drv, struct cpuidle_device *dev,
97                       int next_state)
98 {
99         /* Fall back to the default arch idle method on errors. */
100         if (next_state < 0) {
101                 default_idle_call();
102                 return next_state;
103         }
104
105         /*
106          * The idle task must be scheduled, it is pointless to go to idle, just
107          * update no idle residency and return.
108          */
109         if (current_clr_polling_and_test()) {
110                 dev->last_residency = 0;
111                 local_irq_enable();
112                 return -EBUSY;
113         }
114
115         /*
116          * Enter the idle state previously returned by the governor decision.
117          * This function will block until an interrupt occurs and will take
118          * care of re-enabling the local interrupts
119          */
120         return cpuidle_enter(drv, dev, next_state);
121 }
122
123 /**
124  * cpuidle_idle_call - the main idle function
125  *
126  * NOTE: no locks or semaphores should be used here
127  *
128  * On archs that support TIF_POLLING_NRFLAG, is called with polling
129  * set, and it returns with polling set.  If it ever stops polling, it
130  * must clear the polling bit.
131  */
132 static void cpuidle_idle_call(void)
133 {
134         struct cpuidle_device *dev = __this_cpu_read(cpuidle_devices);
135         struct cpuidle_driver *drv = cpuidle_get_cpu_driver(dev);
136         int next_state, entered_state;
137
138         /*
139          * Check if the idle task must be rescheduled. If it is the
140          * case, exit the function after re-enabling the local irq.
141          */
142         if (need_resched()) {
143                 local_irq_enable();
144                 return;
145         }
146
147         /*
148          * During the idle period, stop measuring the disabled irqs
149          * critical sections latencies
150          */
151         stop_critical_timings();
152
153         /*
154          * Tell the RCU framework we are entering an idle section,
155          * so no more rcu read side critical sections and one more
156          * step to the grace period
157          */
158         rcu_idle_enter();
159
160         if (cpuidle_not_available(drv, dev)) {
161                 default_idle_call();
162                 goto exit_idle;
163         }
164
165         /*
166          * Suspend-to-idle ("freeze") is a system state in which all user space
167          * has been frozen, all I/O devices have been suspended and the only
168          * activity happens here and in iterrupts (if any).  In that case bypass
169          * the cpuidle governor and go stratight for the deepest idle state
170          * available.  Possibly also suspend the local tick and the entire
171          * timekeeping to prevent timer interrupts from kicking us out of idle
172          * until a proper wakeup interrupt happens.
173          */
174         if (idle_should_freeze()) {
175                 entered_state = cpuidle_enter_freeze(drv, dev);
176                 if (entered_state >= 0) {
177                         local_irq_enable();
178                         goto exit_idle;
179                 }
180
181                 next_state = cpuidle_find_deepest_state(drv, dev);
182                 call_cpuidle(drv, dev, next_state);
183         } else {
184                 /*
185                  * Ask the cpuidle framework to choose a convenient idle state.
186                  */
187                 next_state = cpuidle_select(drv, dev);
188                 entered_state = call_cpuidle(drv, dev, next_state);
189                 /*
190                  * Give the governor an opportunity to reflect on the outcome
191                  */
192                 cpuidle_reflect(dev, entered_state);
193         }
194
195 exit_idle:
196         __current_set_polling();
197
198         /*
199          * It is up to the idle functions to reenable local interrupts
200          */
201         if (WARN_ON_ONCE(irqs_disabled()))
202                 local_irq_enable();
203
204         rcu_idle_exit();
205         start_critical_timings();
206 }
207
208 DEFINE_PER_CPU(bool, cpu_dead_idle);
209
210 /*
211  * Generic idle loop implementation
212  *
213  * Called with polling cleared.
214  */
215 static void cpu_idle_loop(void)
216 {
217         while (1) {
218                 /*
219                  * If the arch has a polling bit, we maintain an invariant:
220                  *
221                  * Our polling bit is clear if we're not scheduled (i.e. if
222                  * rq->curr != rq->idle).  This means that, if rq->idle has
223                  * the polling bit set, then setting need_resched is
224                  * guaranteed to cause the cpu to reschedule.
225                  */
226
227                 __current_set_polling();
228                 tick_nohz_idle_enter();
229
230                 while (!need_resched()) {
231                         check_pgt_cache();
232                         rmb();
233
234                         if (cpu_is_offline(smp_processor_id())) {
235                                 rcu_cpu_notify(NULL, CPU_DYING_IDLE,
236                                                (void *)(long)smp_processor_id());
237                                 smp_mb(); /* all activity before dead. */
238                                 this_cpu_write(cpu_dead_idle, true);
239                                 arch_cpu_idle_dead();
240                         }
241
242                         local_irq_disable();
243                         arch_cpu_idle_enter();
244
245                         /*
246                          * In poll mode we reenable interrupts and spin.
247                          *
248                          * Also if we detected in the wakeup from idle
249                          * path that the tick broadcast device expired
250                          * for us, we don't want to go deep idle as we
251                          * know that the IPI is going to arrive right
252                          * away
253                          */
254                         if (cpu_idle_force_poll || tick_check_broadcast_expired())
255                                 cpu_idle_poll();
256                         else
257                                 cpuidle_idle_call();
258
259                         arch_cpu_idle_exit();
260                 }
261
262                 /*
263                  * Since we fell out of the loop above, we know
264                  * TIF_NEED_RESCHED must be set, propagate it into
265                  * PREEMPT_NEED_RESCHED.
266                  *
267                  * This is required because for polling idle loops we will
268                  * not have had an IPI to fold the state for us.
269                  */
270                 preempt_set_need_resched();
271                 tick_nohz_idle_exit();
272                 __current_clr_polling();
273
274                 /*
275                  * We promise to call sched_ttwu_pending and reschedule
276                  * if need_resched is set while polling is set.  That
277                  * means that clearing polling needs to be visible
278                  * before doing these things.
279                  */
280                 smp_mb__after_atomic();
281
282                 sched_ttwu_pending();
283                 schedule_preempt_disabled();
284         }
285 }
286
287 void cpu_startup_entry(enum cpuhp_state state)
288 {
289         /*
290          * This #ifdef needs to die, but it's too late in the cycle to
291          * make this generic (arm and sh have never invoked the canary
292          * init for the non boot cpus!). Will be fixed in 3.11
293          */
294 #ifdef CONFIG_X86
295         /*
296          * If we're the non-boot CPU, nothing set the stack canary up
297          * for us. The boot CPU already has it initialized but no harm
298          * in doing it again. This is a good place for updating it, as
299          * we wont ever return from this function (so the invalid
300          * canaries already on the stack wont ever trigger).
301          */
302         boot_init_stack_canary();
303 #endif
304         arch_cpu_idle_prepare();
305         cpu_idle_loop();
306 }