Hello all.  Without the attached patch, SysRq doesn't work over a serial
console here.  Has anyone else seen this problem?

-- 
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
diff -Nru a/linux/drivers/char/n_tty.c b/linux/drivers/char/n_tty.c
--- a/linux/drivers/char/n_tty.c        Sat Mar 31 16:30:44 2001
+++ b/linux/drivers/char/n_tty.c        Sat Mar 31 16:30:44 2001
@@ -40,6 +40,10 @@
 #include <linux/string.h>
 #include <linux/slab.h>
 #include <linux/poll.h>
+#ifdef CONFIG_MAGIC_SYSRQ      /* Handle the SysRq Hack */
+#include <linux/sysrq.h>
+#include <linux/console.h>
+#endif
 
 #include <asm/uaccess.h>
 #include <asm/system.h>
@@ -458,6 +462,12 @@
 
 static inline void n_tty_receive_break(struct tty_struct *tty)
 {
+#ifdef CONFIG_MAGIC_SYSRQ      /* Handle the SysRq Hack */
+       struct console *c = console_drivers;
+       if (c && c->device && (c->device(c) == tty->device)
+           && !test_and_change_bit(TTY_DOING_SYSRQ, &tty->flags))
+               return;
+#endif
        if (I_IGNBRK(tty))
                return;
        if (I_BRKINT(tty)) {
@@ -506,6 +516,12 @@
 {
        unsigned long flags;
 
+#ifdef CONFIG_MAGIC_SYSRQ      /* Handle the SysRq Hack */
+       if (test_and_clear_bit(TTY_DOING_SYSRQ, &tty->flags)) {
+               handle_sysrq(c, NULL, NULL, tty);
+               return;
+       }
+#endif
        if (tty->raw) {
                put_tty_queue(c, tty);
                return;
diff -Nru a/linux/include/linux/tty.h b/linux/include/linux/tty.h
--- a/linux/include/linux/tty.h Sat Mar 31 16:30:44 2001
+++ b/linux/include/linux/tty.h Sat Mar 31 16:30:44 2001
@@ -329,6 +329,9 @@
 #define TTY_PUSH 6
 #define TTY_CLOSING 7
 #define TTY_DONT_FLIP 8
+#ifdef CONFIG_MAGIC_SYSRQ      /* Handle the SysRq Hack */
+#define TTY_DOING_SYSRQ 9
+#endif
 #define TTY_HW_COOK_OUT 14
 #define TTY_HW_COOK_IN 15
 #define TTY_PTY_LOCK 16

Reply via email to