GNU Linux-libre 4.19.245-gnu1
[releases.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/signal.h>
7 #include <linux/sched/task.h>
8 #include <linux/sched/mm.h>
9 #include <linux/spinlock.h>
10 #include <linux/slab.h>
11 #include <linux/oom.h>
12 #include <kern_util.h>
13 #include <os.h>
14 #include <skas.h>
15
16 void (*pm_power_off)(void);
17 EXPORT_SYMBOL(pm_power_off);
18
19 static void kill_off_processes(void)
20 {
21         struct task_struct *p;
22         int pid;
23
24         read_lock(&tasklist_lock);
25         for_each_process(p) {
26                 struct task_struct *t;
27
28                 t = find_lock_task_mm(p);
29                 if (!t)
30                         continue;
31                 pid = t->mm->context.id.u.pid;
32                 task_unlock(t);
33                 os_kill_ptraced_process(pid, 1);
34         }
35         read_unlock(&tasklist_lock);
36 }
37
38 void uml_cleanup(void)
39 {
40         kmalloc_ok = 0;
41         do_uml_exitcalls();
42         kill_off_processes();
43 }
44
45 void machine_restart(char * __unused)
46 {
47         uml_cleanup();
48         reboot_skas();
49 }
50
51 void machine_power_off(void)
52 {
53         uml_cleanup();
54         halt_skas();
55 }
56
57 void machine_halt(void)
58 {
59         machine_power_off();
60 }