cpu: introduce clear_tasks_mm_cpumask() helper
[cascardo/linux.git] / kernel / cpu.c
1 /* CPU control.
2  * (C) 2001, 2002, 2003, 2004 Rusty Russell
3  *
4  * This code is licenced under the GPL.
5  */
6 #include <linux/proc_fs.h>
7 #include <linux/smp.h>
8 #include <linux/init.h>
9 #include <linux/notifier.h>
10 #include <linux/sched.h>
11 #include <linux/unistd.h>
12 #include <linux/cpu.h>
13 #include <linux/oom.h>
14 #include <linux/rcupdate.h>
15 #include <linux/export.h>
16 #include <linux/kthread.h>
17 #include <linux/stop_machine.h>
18 #include <linux/mutex.h>
19 #include <linux/gfp.h>
20 #include <linux/suspend.h>
21
22 #include "smpboot.h"
23
24 #ifdef CONFIG_SMP
25 /* Serializes the updates to cpu_online_mask, cpu_present_mask */
26 static DEFINE_MUTEX(cpu_add_remove_lock);
27
28 /*
29  * The following two API's must be used when attempting
30  * to serialize the updates to cpu_online_mask, cpu_present_mask.
31  */
32 void cpu_maps_update_begin(void)
33 {
34         mutex_lock(&cpu_add_remove_lock);
35 }
36
37 void cpu_maps_update_done(void)
38 {
39         mutex_unlock(&cpu_add_remove_lock);
40 }
41
42 static RAW_NOTIFIER_HEAD(cpu_chain);
43
44 /* If set, cpu_up and cpu_down will return -EBUSY and do nothing.
45  * Should always be manipulated under cpu_add_remove_lock
46  */
47 static int cpu_hotplug_disabled;
48
49 #ifdef CONFIG_HOTPLUG_CPU
50
51 static struct {
52         struct task_struct *active_writer;
53         struct mutex lock; /* Synchronizes accesses to refcount, */
54         /*
55          * Also blocks the new readers during
56          * an ongoing cpu hotplug operation.
57          */
58         int refcount;
59 } cpu_hotplug = {
60         .active_writer = NULL,
61         .lock = __MUTEX_INITIALIZER(cpu_hotplug.lock),
62         .refcount = 0,
63 };
64
65 void get_online_cpus(void)
66 {
67         might_sleep();
68         if (cpu_hotplug.active_writer == current)
69                 return;
70         mutex_lock(&cpu_hotplug.lock);
71         cpu_hotplug.refcount++;
72         mutex_unlock(&cpu_hotplug.lock);
73
74 }
75 EXPORT_SYMBOL_GPL(get_online_cpus);
76
77 void put_online_cpus(void)
78 {
79         if (cpu_hotplug.active_writer == current)
80                 return;
81         mutex_lock(&cpu_hotplug.lock);
82         if (!--cpu_hotplug.refcount && unlikely(cpu_hotplug.active_writer))
83                 wake_up_process(cpu_hotplug.active_writer);
84         mutex_unlock(&cpu_hotplug.lock);
85
86 }
87 EXPORT_SYMBOL_GPL(put_online_cpus);
88
89 /*
90  * This ensures that the hotplug operation can begin only when the
91  * refcount goes to zero.
92  *
93  * Note that during a cpu-hotplug operation, the new readers, if any,
94  * will be blocked by the cpu_hotplug.lock
95  *
96  * Since cpu_hotplug_begin() is always called after invoking
97  * cpu_maps_update_begin(), we can be sure that only one writer is active.
98  *
99  * Note that theoretically, there is a possibility of a livelock:
100  * - Refcount goes to zero, last reader wakes up the sleeping
101  *   writer.
102  * - Last reader unlocks the cpu_hotplug.lock.
103  * - A new reader arrives at this moment, bumps up the refcount.
104  * - The writer acquires the cpu_hotplug.lock finds the refcount
105  *   non zero and goes to sleep again.
106  *
107  * However, this is very difficult to achieve in practice since
108  * get_online_cpus() not an api which is called all that often.
109  *
110  */
111 static void cpu_hotplug_begin(void)
112 {
113         cpu_hotplug.active_writer = current;
114
115         for (;;) {
116                 mutex_lock(&cpu_hotplug.lock);
117                 if (likely(!cpu_hotplug.refcount))
118                         break;
119                 __set_current_state(TASK_UNINTERRUPTIBLE);
120                 mutex_unlock(&cpu_hotplug.lock);
121                 schedule();
122         }
123 }
124
125 static void cpu_hotplug_done(void)
126 {
127         cpu_hotplug.active_writer = NULL;
128         mutex_unlock(&cpu_hotplug.lock);
129 }
130
131 #else /* #if CONFIG_HOTPLUG_CPU */
132 static void cpu_hotplug_begin(void) {}
133 static void cpu_hotplug_done(void) {}
134 #endif  /* #else #if CONFIG_HOTPLUG_CPU */
135
136 /* Need to know about CPUs going up/down? */
137 int __ref register_cpu_notifier(struct notifier_block *nb)
138 {
139         int ret;
140         cpu_maps_update_begin();
141         ret = raw_notifier_chain_register(&cpu_chain, nb);
142         cpu_maps_update_done();
143         return ret;
144 }
145
146 static int __cpu_notify(unsigned long val, void *v, int nr_to_call,
147                         int *nr_calls)
148 {
149         int ret;
150
151         ret = __raw_notifier_call_chain(&cpu_chain, val, v, nr_to_call,
152                                         nr_calls);
153
154         return notifier_to_errno(ret);
155 }
156
157 static int cpu_notify(unsigned long val, void *v)
158 {
159         return __cpu_notify(val, v, -1, NULL);
160 }
161
162 #ifdef CONFIG_HOTPLUG_CPU
163
164 static void cpu_notify_nofail(unsigned long val, void *v)
165 {
166         BUG_ON(cpu_notify(val, v));
167 }
168 EXPORT_SYMBOL(register_cpu_notifier);
169
170 void __ref unregister_cpu_notifier(struct notifier_block *nb)
171 {
172         cpu_maps_update_begin();
173         raw_notifier_chain_unregister(&cpu_chain, nb);
174         cpu_maps_update_done();
175 }
176 EXPORT_SYMBOL(unregister_cpu_notifier);
177
178 void clear_tasks_mm_cpumask(int cpu)
179 {
180         struct task_struct *p;
181
182         /*
183          * This function is called after the cpu is taken down and marked
184          * offline, so its not like new tasks will ever get this cpu set in
185          * their mm mask. -- Peter Zijlstra
186          * Thus, we may use rcu_read_lock() here, instead of grabbing
187          * full-fledged tasklist_lock.
188          */
189         rcu_read_lock();
190         for_each_process(p) {
191                 struct task_struct *t;
192
193                 t = find_lock_task_mm(p);
194                 if (!t)
195                         continue;
196                 cpumask_clear_cpu(cpu, mm_cpumask(t->mm));
197                 task_unlock(t);
198         }
199         rcu_read_unlock();
200 }
201
202 static inline void check_for_tasks(int cpu)
203 {
204         struct task_struct *p;
205
206         write_lock_irq(&tasklist_lock);
207         for_each_process(p) {
208                 if (task_cpu(p) == cpu && p->state == TASK_RUNNING &&
209                     (p->utime || p->stime))
210                         printk(KERN_WARNING "Task %s (pid = %d) is on cpu %d "
211                                 "(state = %ld, flags = %x)\n",
212                                 p->comm, task_pid_nr(p), cpu,
213                                 p->state, p->flags);
214         }
215         write_unlock_irq(&tasklist_lock);
216 }
217
218 struct take_cpu_down_param {
219         unsigned long mod;
220         void *hcpu;
221 };
222
223 /* Take this CPU down. */
224 static int __ref take_cpu_down(void *_param)
225 {
226         struct take_cpu_down_param *param = _param;
227         int err;
228
229         /* Ensure this CPU doesn't handle any more interrupts. */
230         err = __cpu_disable();
231         if (err < 0)
232                 return err;
233
234         cpu_notify(CPU_DYING | param->mod, param->hcpu);
235         return 0;
236 }
237
238 /* Requires cpu_add_remove_lock to be held */
239 static int __ref _cpu_down(unsigned int cpu, int tasks_frozen)
240 {
241         int err, nr_calls = 0;
242         void *hcpu = (void *)(long)cpu;
243         unsigned long mod = tasks_frozen ? CPU_TASKS_FROZEN : 0;
244         struct take_cpu_down_param tcd_param = {
245                 .mod = mod,
246                 .hcpu = hcpu,
247         };
248
249         if (num_online_cpus() == 1)
250                 return -EBUSY;
251
252         if (!cpu_online(cpu))
253                 return -EINVAL;
254
255         cpu_hotplug_begin();
256
257         err = __cpu_notify(CPU_DOWN_PREPARE | mod, hcpu, -1, &nr_calls);
258         if (err) {
259                 nr_calls--;
260                 __cpu_notify(CPU_DOWN_FAILED | mod, hcpu, nr_calls, NULL);
261                 printk("%s: attempt to take down CPU %u failed\n",
262                                 __func__, cpu);
263                 goto out_release;
264         }
265
266         err = __stop_machine(take_cpu_down, &tcd_param, cpumask_of(cpu));
267         if (err) {
268                 /* CPU didn't die: tell everyone.  Can't complain. */
269                 cpu_notify_nofail(CPU_DOWN_FAILED | mod, hcpu);
270
271                 goto out_release;
272         }
273         BUG_ON(cpu_online(cpu));
274
275         /*
276          * The migration_call() CPU_DYING callback will have removed all
277          * runnable tasks from the cpu, there's only the idle task left now
278          * that the migration thread is done doing the stop_machine thing.
279          *
280          * Wait for the stop thread to go away.
281          */
282         while (!idle_cpu(cpu))
283                 cpu_relax();
284
285         /* This actually kills the CPU. */
286         __cpu_die(cpu);
287
288         /* CPU is completely dead: tell everyone.  Too late to complain. */
289         cpu_notify_nofail(CPU_DEAD | mod, hcpu);
290
291         check_for_tasks(cpu);
292
293 out_release:
294         cpu_hotplug_done();
295         if (!err)
296                 cpu_notify_nofail(CPU_POST_DEAD | mod, hcpu);
297         return err;
298 }
299
300 int __ref cpu_down(unsigned int cpu)
301 {
302         int err;
303
304         cpu_maps_update_begin();
305
306         if (cpu_hotplug_disabled) {
307                 err = -EBUSY;
308                 goto out;
309         }
310
311         err = _cpu_down(cpu, 0);
312
313 out:
314         cpu_maps_update_done();
315         return err;
316 }
317 EXPORT_SYMBOL(cpu_down);
318 #endif /*CONFIG_HOTPLUG_CPU*/
319
320 /* Requires cpu_add_remove_lock to be held */
321 static int __cpuinit _cpu_up(unsigned int cpu, int tasks_frozen)
322 {
323         int ret, nr_calls = 0;
324         void *hcpu = (void *)(long)cpu;
325         unsigned long mod = tasks_frozen ? CPU_TASKS_FROZEN : 0;
326         struct task_struct *idle;
327
328         if (cpu_online(cpu) || !cpu_present(cpu))
329                 return -EINVAL;
330
331         cpu_hotplug_begin();
332
333         idle = idle_thread_get(cpu);
334         if (IS_ERR(idle)) {
335                 ret = PTR_ERR(idle);
336                 goto out;
337         }
338
339         ret = __cpu_notify(CPU_UP_PREPARE | mod, hcpu, -1, &nr_calls);
340         if (ret) {
341                 nr_calls--;
342                 printk(KERN_WARNING "%s: attempt to bring up CPU %u failed\n",
343                                 __func__, cpu);
344                 goto out_notify;
345         }
346
347         /* Arch-specific enabling code. */
348         ret = __cpu_up(cpu, idle);
349         if (ret != 0)
350                 goto out_notify;
351         BUG_ON(!cpu_online(cpu));
352
353         /* Now call notifier in preparation. */
354         cpu_notify(CPU_ONLINE | mod, hcpu);
355
356 out_notify:
357         if (ret != 0)
358                 __cpu_notify(CPU_UP_CANCELED | mod, hcpu, nr_calls, NULL);
359 out:
360         cpu_hotplug_done();
361
362         return ret;
363 }
364
365 int __cpuinit cpu_up(unsigned int cpu)
366 {
367         int err = 0;
368
369 #ifdef  CONFIG_MEMORY_HOTPLUG
370         int nid;
371         pg_data_t       *pgdat;
372 #endif
373
374         if (!cpu_possible(cpu)) {
375                 printk(KERN_ERR "can't online cpu %d because it is not "
376                         "configured as may-hotadd at boot time\n", cpu);
377 #if defined(CONFIG_IA64)
378                 printk(KERN_ERR "please check additional_cpus= boot "
379                                 "parameter\n");
380 #endif
381                 return -EINVAL;
382         }
383
384 #ifdef  CONFIG_MEMORY_HOTPLUG
385         nid = cpu_to_node(cpu);
386         if (!node_online(nid)) {
387                 err = mem_online_node(nid);
388                 if (err)
389                         return err;
390         }
391
392         pgdat = NODE_DATA(nid);
393         if (!pgdat) {
394                 printk(KERN_ERR
395                         "Can't online cpu %d due to NULL pgdat\n", cpu);
396                 return -ENOMEM;
397         }
398
399         if (pgdat->node_zonelists->_zonerefs->zone == NULL) {
400                 mutex_lock(&zonelists_mutex);
401                 build_all_zonelists(NULL);
402                 mutex_unlock(&zonelists_mutex);
403         }
404 #endif
405
406         cpu_maps_update_begin();
407
408         if (cpu_hotplug_disabled) {
409                 err = -EBUSY;
410                 goto out;
411         }
412
413         err = _cpu_up(cpu, 0);
414
415 out:
416         cpu_maps_update_done();
417         return err;
418 }
419 EXPORT_SYMBOL_GPL(cpu_up);
420
421 #ifdef CONFIG_PM_SLEEP_SMP
422 static cpumask_var_t frozen_cpus;
423
424 void __weak arch_disable_nonboot_cpus_begin(void)
425 {
426 }
427
428 void __weak arch_disable_nonboot_cpus_end(void)
429 {
430 }
431
432 int disable_nonboot_cpus(void)
433 {
434         int cpu, first_cpu, error = 0;
435
436         cpu_maps_update_begin();
437         first_cpu = cpumask_first(cpu_online_mask);
438         /*
439          * We take down all of the non-boot CPUs in one shot to avoid races
440          * with the userspace trying to use the CPU hotplug at the same time
441          */
442         cpumask_clear(frozen_cpus);
443         arch_disable_nonboot_cpus_begin();
444
445         printk("Disabling non-boot CPUs ...\n");
446         for_each_online_cpu(cpu) {
447                 if (cpu == first_cpu)
448                         continue;
449                 error = _cpu_down(cpu, 1);
450                 if (!error)
451                         cpumask_set_cpu(cpu, frozen_cpus);
452                 else {
453                         printk(KERN_ERR "Error taking CPU%d down: %d\n",
454                                 cpu, error);
455                         break;
456                 }
457         }
458
459         arch_disable_nonboot_cpus_end();
460
461         if (!error) {
462                 BUG_ON(num_online_cpus() > 1);
463                 /* Make sure the CPUs won't be enabled by someone else */
464                 cpu_hotplug_disabled = 1;
465         } else {
466                 printk(KERN_ERR "Non-boot CPUs are not disabled\n");
467         }
468         cpu_maps_update_done();
469         return error;
470 }
471
472 void __weak arch_enable_nonboot_cpus_begin(void)
473 {
474 }
475
476 void __weak arch_enable_nonboot_cpus_end(void)
477 {
478 }
479
480 void __ref enable_nonboot_cpus(void)
481 {
482         int cpu, error;
483
484         /* Allow everyone to use the CPU hotplug again */
485         cpu_maps_update_begin();
486         cpu_hotplug_disabled = 0;
487         if (cpumask_empty(frozen_cpus))
488                 goto out;
489
490         printk(KERN_INFO "Enabling non-boot CPUs ...\n");
491
492         arch_enable_nonboot_cpus_begin();
493
494         for_each_cpu(cpu, frozen_cpus) {
495                 error = _cpu_up(cpu, 1);
496                 if (!error) {
497                         printk(KERN_INFO "CPU%d is up\n", cpu);
498                         continue;
499                 }
500                 printk(KERN_WARNING "Error taking CPU%d up: %d\n", cpu, error);
501         }
502
503         arch_enable_nonboot_cpus_end();
504
505         cpumask_clear(frozen_cpus);
506 out:
507         cpu_maps_update_done();
508 }
509
510 static int __init alloc_frozen_cpus(void)
511 {
512         if (!alloc_cpumask_var(&frozen_cpus, GFP_KERNEL|__GFP_ZERO))
513                 return -ENOMEM;
514         return 0;
515 }
516 core_initcall(alloc_frozen_cpus);
517
518 /*
519  * Prevent regular CPU hotplug from racing with the freezer, by disabling CPU
520  * hotplug when tasks are about to be frozen. Also, don't allow the freezer
521  * to continue until any currently running CPU hotplug operation gets
522  * completed.
523  * To modify the 'cpu_hotplug_disabled' flag, we need to acquire the
524  * 'cpu_add_remove_lock'. And this same lock is also taken by the regular
525  * CPU hotplug path and released only after it is complete. Thus, we
526  * (and hence the freezer) will block here until any currently running CPU
527  * hotplug operation gets completed.
528  */
529 void cpu_hotplug_disable_before_freeze(void)
530 {
531         cpu_maps_update_begin();
532         cpu_hotplug_disabled = 1;
533         cpu_maps_update_done();
534 }
535
536
537 /*
538  * When tasks have been thawed, re-enable regular CPU hotplug (which had been
539  * disabled while beginning to freeze tasks).
540  */
541 void cpu_hotplug_enable_after_thaw(void)
542 {
543         cpu_maps_update_begin();
544         cpu_hotplug_disabled = 0;
545         cpu_maps_update_done();
546 }
547
548 /*
549  * When callbacks for CPU hotplug notifications are being executed, we must
550  * ensure that the state of the system with respect to the tasks being frozen
551  * or not, as reported by the notification, remains unchanged *throughout the
552  * duration* of the execution of the callbacks.
553  * Hence we need to prevent the freezer from racing with regular CPU hotplug.
554  *
555  * This synchronization is implemented by mutually excluding regular CPU
556  * hotplug and Suspend/Hibernate call paths by hooking onto the Suspend/
557  * Hibernate notifications.
558  */
559 static int
560 cpu_hotplug_pm_callback(struct notifier_block *nb,
561                         unsigned long action, void *ptr)
562 {
563         switch (action) {
564
565         case PM_SUSPEND_PREPARE:
566         case PM_HIBERNATION_PREPARE:
567                 cpu_hotplug_disable_before_freeze();
568                 break;
569
570         case PM_POST_SUSPEND:
571         case PM_POST_HIBERNATION:
572                 cpu_hotplug_enable_after_thaw();
573                 break;
574
575         default:
576                 return NOTIFY_DONE;
577         }
578
579         return NOTIFY_OK;
580 }
581
582
583 static int __init cpu_hotplug_pm_sync_init(void)
584 {
585         pm_notifier(cpu_hotplug_pm_callback, 0);
586         return 0;
587 }
588 core_initcall(cpu_hotplug_pm_sync_init);
589
590 #endif /* CONFIG_PM_SLEEP_SMP */
591
592 /**
593  * notify_cpu_starting(cpu) - call the CPU_STARTING notifiers
594  * @cpu: cpu that just started
595  *
596  * This function calls the cpu_chain notifiers with CPU_STARTING.
597  * It must be called by the arch code on the new cpu, before the new cpu
598  * enables interrupts and before the "boot" cpu returns from __cpu_up().
599  */
600 void __cpuinit notify_cpu_starting(unsigned int cpu)
601 {
602         unsigned long val = CPU_STARTING;
603
604 #ifdef CONFIG_PM_SLEEP_SMP
605         if (frozen_cpus != NULL && cpumask_test_cpu(cpu, frozen_cpus))
606                 val = CPU_STARTING_FROZEN;
607 #endif /* CONFIG_PM_SLEEP_SMP */
608         cpu_notify(val, (void *)(long)cpu);
609 }
610
611 #endif /* CONFIG_SMP */
612
613 /*
614  * cpu_bit_bitmap[] is a special, "compressed" data structure that
615  * represents all NR_CPUS bits binary values of 1<<nr.
616  *
617  * It is used by cpumask_of() to get a constant address to a CPU
618  * mask value that has a single bit set only.
619  */
620
621 /* cpu_bit_bitmap[0] is empty - so we can back into it */
622 #define MASK_DECLARE_1(x)       [x+1][0] = (1UL << (x))
623 #define MASK_DECLARE_2(x)       MASK_DECLARE_1(x), MASK_DECLARE_1(x+1)
624 #define MASK_DECLARE_4(x)       MASK_DECLARE_2(x), MASK_DECLARE_2(x+2)
625 #define MASK_DECLARE_8(x)       MASK_DECLARE_4(x), MASK_DECLARE_4(x+4)
626
627 const unsigned long cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(NR_CPUS)] = {
628
629         MASK_DECLARE_8(0),      MASK_DECLARE_8(8),
630         MASK_DECLARE_8(16),     MASK_DECLARE_8(24),
631 #if BITS_PER_LONG > 32
632         MASK_DECLARE_8(32),     MASK_DECLARE_8(40),
633         MASK_DECLARE_8(48),     MASK_DECLARE_8(56),
634 #endif
635 };
636 EXPORT_SYMBOL_GPL(cpu_bit_bitmap);
637
638 const DECLARE_BITMAP(cpu_all_bits, NR_CPUS) = CPU_BITS_ALL;
639 EXPORT_SYMBOL(cpu_all_bits);
640
641 #ifdef CONFIG_INIT_ALL_POSSIBLE
642 static DECLARE_BITMAP(cpu_possible_bits, CONFIG_NR_CPUS) __read_mostly
643         = CPU_BITS_ALL;
644 #else
645 static DECLARE_BITMAP(cpu_possible_bits, CONFIG_NR_CPUS) __read_mostly;
646 #endif
647 const struct cpumask *const cpu_possible_mask = to_cpumask(cpu_possible_bits);
648 EXPORT_SYMBOL(cpu_possible_mask);
649
650 static DECLARE_BITMAP(cpu_online_bits, CONFIG_NR_CPUS) __read_mostly;
651 const struct cpumask *const cpu_online_mask = to_cpumask(cpu_online_bits);
652 EXPORT_SYMBOL(cpu_online_mask);
653
654 static DECLARE_BITMAP(cpu_present_bits, CONFIG_NR_CPUS) __read_mostly;
655 const struct cpumask *const cpu_present_mask = to_cpumask(cpu_present_bits);
656 EXPORT_SYMBOL(cpu_present_mask);
657
658 static DECLARE_BITMAP(cpu_active_bits, CONFIG_NR_CPUS) __read_mostly;
659 const struct cpumask *const cpu_active_mask = to_cpumask(cpu_active_bits);
660 EXPORT_SYMBOL(cpu_active_mask);
661
662 void set_cpu_possible(unsigned int cpu, bool possible)
663 {
664         if (possible)
665                 cpumask_set_cpu(cpu, to_cpumask(cpu_possible_bits));
666         else
667                 cpumask_clear_cpu(cpu, to_cpumask(cpu_possible_bits));
668 }
669
670 void set_cpu_present(unsigned int cpu, bool present)
671 {
672         if (present)
673                 cpumask_set_cpu(cpu, to_cpumask(cpu_present_bits));
674         else
675                 cpumask_clear_cpu(cpu, to_cpumask(cpu_present_bits));
676 }
677
678 void set_cpu_online(unsigned int cpu, bool online)
679 {
680         if (online)
681                 cpumask_set_cpu(cpu, to_cpumask(cpu_online_bits));
682         else
683                 cpumask_clear_cpu(cpu, to_cpumask(cpu_online_bits));
684 }
685
686 void set_cpu_active(unsigned int cpu, bool active)
687 {
688         if (active)
689                 cpumask_set_cpu(cpu, to_cpumask(cpu_active_bits));
690         else
691                 cpumask_clear_cpu(cpu, to_cpumask(cpu_active_bits));
692 }
693
694 void init_cpu_present(const struct cpumask *src)
695 {
696         cpumask_copy(to_cpumask(cpu_present_bits), src);
697 }
698
699 void init_cpu_possible(const struct cpumask *src)
700 {
701         cpumask_copy(to_cpumask(cpu_possible_bits), src);
702 }
703
704 void init_cpu_online(const struct cpumask *src)
705 {
706         cpumask_copy(to_cpumask(cpu_online_bits), src);
707 }