Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/um/kernel/reboot.c
26439 views
1
// SPDX-License-Identifier: GPL-2.0
2
/*
3
* Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
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 <linux/reboot.h>
13
#include <kern_util.h>
14
#include <os.h>
15
#include <skas.h>
16
17
void (*pm_power_off)(void);
18
EXPORT_SYMBOL(pm_power_off);
19
20
static void kill_off_processes(void)
21
{
22
struct task_struct *p;
23
int pid;
24
25
read_lock(&tasklist_lock);
26
for_each_process(p) {
27
struct task_struct *t;
28
29
t = find_lock_task_mm(p);
30
if (!t)
31
continue;
32
pid = t->mm->context.id.pid;
33
task_unlock(t);
34
os_kill_ptraced_process(pid, 1);
35
}
36
read_unlock(&tasklist_lock);
37
}
38
39
void uml_cleanup(void)
40
{
41
kmalloc_ok = 0;
42
do_uml_exitcalls();
43
kill_off_processes();
44
}
45
46
void machine_restart(char * __unused)
47
{
48
uml_cleanup();
49
reboot_skas();
50
}
51
52
void machine_power_off(void)
53
{
54
uml_cleanup();
55
halt_skas();
56
}
57
58
void machine_halt(void)
59
{
60
machine_power_off();
61
}
62
63
static int sys_power_off_handler(struct sys_off_data *data)
64
{
65
machine_power_off();
66
return 0;
67
}
68
69
static int register_power_off(void)
70
{
71
register_sys_off_handler(SYS_OFF_MODE_POWER_OFF,
72
SYS_OFF_PRIO_DEFAULT,
73
sys_power_off_handler, NULL);
74
return 0;
75
}
76
__initcall(register_power_off);
77
78