diff options
Diffstat (limited to 'arch/um/kernel/reboot.c')
-rw-r--r-- | arch/um/kernel/reboot.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/arch/um/kernel/reboot.c b/arch/um/kernel/reboot.c new file mode 100644 index 000000000000..207f89d74908 --- /dev/null +++ b/arch/um/kernel/reboot.c | |||
@@ -0,0 +1,79 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2000, 2002 Jeff Dike (jdike@karaya.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #include "linux/module.h" | ||
7 | #include "linux/sched.h" | ||
8 | #include "user_util.h" | ||
9 | #include "kern_util.h" | ||
10 | #include "kern.h" | ||
11 | #include "os.h" | ||
12 | #include "mode.h" | ||
13 | #include "choose-mode.h" | ||
14 | |||
15 | #ifdef CONFIG_SMP | ||
16 | static void kill_idlers(int me) | ||
17 | { | ||
18 | #ifdef CONFIG_MODE_TT | ||
19 | struct task_struct *p; | ||
20 | int i; | ||
21 | |||
22 | for(i = 0; i < sizeof(idle_threads)/sizeof(idle_threads[0]); i++){ | ||
23 | p = idle_threads[i]; | ||
24 | if((p != NULL) && (p->thread.mode.tt.extern_pid != me)) | ||
25 | os_kill_process(p->thread.mode.tt.extern_pid, 0); | ||
26 | } | ||
27 | #endif | ||
28 | } | ||
29 | #endif | ||
30 | |||
31 | static void kill_off_processes(void) | ||
32 | { | ||
33 | CHOOSE_MODE(kill_off_processes_tt(), kill_off_processes_skas()); | ||
34 | #ifdef CONFIG_SMP | ||
35 | kill_idlers(os_getpid()); | ||
36 | #endif | ||
37 | } | ||
38 | |||
39 | void uml_cleanup(void) | ||
40 | { | ||
41 | kill_off_processes(); | ||
42 | do_uml_exitcalls(); | ||
43 | } | ||
44 | |||
45 | void machine_restart(char * __unused) | ||
46 | { | ||
47 | do_uml_exitcalls(); | ||
48 | kill_off_processes(); | ||
49 | CHOOSE_MODE(reboot_tt(), reboot_skas()); | ||
50 | } | ||
51 | |||
52 | EXPORT_SYMBOL(machine_restart); | ||
53 | |||
54 | void machine_power_off(void) | ||
55 | { | ||
56 | do_uml_exitcalls(); | ||
57 | kill_off_processes(); | ||
58 | CHOOSE_MODE(halt_tt(), halt_skas()); | ||
59 | } | ||
60 | |||
61 | EXPORT_SYMBOL(machine_power_off); | ||
62 | |||
63 | void machine_halt(void) | ||
64 | { | ||
65 | machine_power_off(); | ||
66 | } | ||
67 | |||
68 | EXPORT_SYMBOL(machine_halt); | ||
69 | |||
70 | /* | ||
71 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
72 | * Emacs will notice this stuff at the end of the file and automatically | ||
73 | * adjust the settings for this buffer only. This must remain at the end | ||
74 | * of the file. | ||
75 | * --------------------------------------------------------------------------- | ||
76 | * Local variables: | ||
77 | * c-file-style: "linux" | ||
78 | * End: | ||
79 | */ | ||