Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
poweroff.c
Go to the documentation of this file.
1 /*
2  * poweroff.c - sysrq handler to gracefully power down machine.
3  *
4  * This file is released under the GPL v2
5  */
6 
7 #include <linux/kernel.h>
8 #include <linux/sysrq.h>
9 #include <linux/init.h>
10 #include <linux/pm.h>
11 #include <linux/workqueue.h>
12 #include <linux/reboot.h>
13 #include <linux/cpumask.h>
14 
15 /*
16  * When the user hits Sys-Rq o to power down the machine this is the
17  * callback we use.
18  */
19 
20 static void do_poweroff(struct work_struct *dummy)
21 {
23 }
24 
25 static DECLARE_WORK(poweroff_work, do_poweroff);
26 
27 static void handle_poweroff(int key)
28 {
29  /* run sysrq poweroff on boot cpu */
30  schedule_work_on(cpumask_first(cpu_online_mask), &poweroff_work);
31 }
32 
33 static struct sysrq_key_op sysrq_poweroff_op = {
34  .handler = handle_poweroff,
35  .help_msg = "powerOff",
36  .action_msg = "Power Off",
37  .enable_mask = SYSRQ_ENABLE_BOOT,
38 };
39 
40 static int __init pm_sysrq_init(void)
41 {
42  register_sysrq_key('o', &sysrq_poweroff_op);
43  return 0;
44 }
45 
46 subsys_initcall(pm_sysrq_init);