linux/kernel/power/poweroff.c
<<
>>
Prefs
   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
  20static void do_poweroff(struct work_struct *dummy)
  21{
  22        kernel_power_off();
  23}
  24
  25static DECLARE_WORK(poweroff_work, do_poweroff);
  26
  27static void handle_poweroff(int key, struct tty_struct *tty)
  28{
  29        /* run sysrq poweroff on boot cpu */
  30        schedule_work_on(cpumask_first(cpu_online_mask), &poweroff_work);
  31}
  32
  33static 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
  40static int pm_sysrq_init(void)
  41{
  42        register_sysrq_key('o', &sysrq_poweroff_op);
  43        return 0;
  44}
  45
  46subsys_initcall(pm_sysrq_init);
  47