Merge tag 'disintegrate-sound-20121009' of git://git.infradead.org/users/dhowells...
[cascardo/linux.git] / arch / um / kernel / reboot.c
1 /* 
2  * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
3  * Licensed under the GPL
4  */
5
6 #include <linux/sched.h>
7 #include <linux/spinlock.h>
8 #include <linux/slab.h>
9 #include <linux/oom.h>
10 #include <kern_util.h>
11 #include <os.h>
12 #include <skas.h>
13
14 void (*pm_power_off)(void);
15
16 static void kill_off_processes(void)
17 {
18         if (proc_mm)
19                 /*
20                  * FIXME: need to loop over userspace_pids
21                  */
22                 os_kill_ptraced_process(userspace_pid[0], 1);
23         else {
24                 struct task_struct *p;
25                 int pid;
26
27                 read_lock(&tasklist_lock);
28                 for_each_process(p) {
29                         struct task_struct *t;
30
31                         t = find_lock_task_mm(p);
32                         if (!t)
33                                 continue;
34                         pid = t->mm->context.id.u.pid;
35                         task_unlock(t);
36                         os_kill_ptraced_process(pid, 1);
37                 }
38                 read_unlock(&tasklist_lock);
39         }
40 }
41
42 void uml_cleanup(void)
43 {
44         kmalloc_ok = 0;
45         do_uml_exitcalls();
46         kill_off_processes();
47 }
48
49 void machine_restart(char * __unused)
50 {
51         uml_cleanup();
52         reboot_skas();
53 }
54
55 void machine_power_off(void)
56 {
57         uml_cleanup();
58         halt_skas();
59 }
60
61 void machine_halt(void)
62 {
63         machine_power_off();
64 }