diff options
Diffstat (limited to 'drivers/char/sysrq.c')
-rw-r--r-- | drivers/char/sysrq.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c index 2aa79ab1930d..dce4cc0e6953 100644 --- a/drivers/char/sysrq.c +++ b/drivers/char/sysrq.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/reboot.h> | 23 | #include <linux/reboot.h> |
24 | #include <linux/sysrq.h> | 24 | #include <linux/sysrq.h> |
25 | #include <linux/kbd_kern.h> | 25 | #include <linux/kbd_kern.h> |
26 | #include <linux/proc_fs.h> | ||
26 | #include <linux/quotaops.h> | 27 | #include <linux/quotaops.h> |
27 | #include <linux/kernel.h> | 28 | #include <linux/kernel.h> |
28 | #include <linux/module.h> | 29 | #include <linux/module.h> |
@@ -534,3 +535,32 @@ int unregister_sysrq_key(int key, struct sysrq_key_op *op_p) | |||
534 | return __sysrq_swap_key_ops(key, NULL, op_p); | 535 | return __sysrq_swap_key_ops(key, NULL, op_p); |
535 | } | 536 | } |
536 | EXPORT_SYMBOL(unregister_sysrq_key); | 537 | EXPORT_SYMBOL(unregister_sysrq_key); |
538 | |||
539 | #ifdef CONFIG_PROC_FS | ||
540 | /* | ||
541 | * writing 'C' to /proc/sysrq-trigger is like sysrq-C | ||
542 | */ | ||
543 | static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf, | ||
544 | size_t count, loff_t *ppos) | ||
545 | { | ||
546 | if (count) { | ||
547 | char c; | ||
548 | |||
549 | if (get_user(c, buf)) | ||
550 | return -EFAULT; | ||
551 | __handle_sysrq(c, NULL, 0); | ||
552 | } | ||
553 | return count; | ||
554 | } | ||
555 | |||
556 | static const struct file_operations proc_sysrq_trigger_operations = { | ||
557 | .write = write_sysrq_trigger, | ||
558 | }; | ||
559 | |||
560 | static int __init sysrq_init(void) | ||
561 | { | ||
562 | proc_create("sysrq-trigger", S_IWUSR, NULL, &proc_sysrq_trigger_operations); | ||
563 | return 0; | ||
564 | } | ||
565 | module_init(sysrq_init); | ||
566 | #endif | ||