arch_initcall(register_cpus);
 
+#ifdef CONFIG_MAGIC_SYSRQ
+static struct sysrq_key_op srm_sysrq_reboot_op = {
+       .handler        = machine_halt,
+       .help_msg       = "reboot(b)",
+       .action_msg     = "Resetting",
+       .enable_mask    = SYSRQ_ENABLE_BOOT,
+};
+#endif
+
 void __init
 setup_arch(char **cmdline_p)
 {
        /* If we're using SRM, make sysrq-b halt back to the prom,
           not auto-reboot.  */
        if (alpha_using_srm) {
-               struct sysrq_key_op *op = __sysrq_get_key_op('b');
-               op->handler = (void *) machine_halt;
+               unregister_sysrq_key('b', __sysrq_reboot_op);
+               register_sysrq_key('b', &srm_sysrq_reboot_op);
        }
 #endif
 
 
        .enable_mask    = SYSRQ_ENABLE_BOOT,
 };
 
+struct sysrq_key_op *__sysrq_reboot_op = &sysrq_reboot_op;
+
 static void sysrq_handle_sync(int key)
 {
        emergency_sync();
 /*
  * get and put functions for the table, exposed to modules.
  */
-struct sysrq_key_op *__sysrq_get_key_op(int key)
+static struct sysrq_key_op *__sysrq_get_key_op(int key)
 {
         struct sysrq_key_op *op_p = NULL;
         int i;
 
 void __handle_sysrq(int key, bool check_mask);
 int register_sysrq_key(int key, struct sysrq_key_op *op);
 int unregister_sysrq_key(int key, struct sysrq_key_op *op);
-struct sysrq_key_op *__sysrq_get_key_op(int key);
+extern struct sysrq_key_op *__sysrq_reboot_op;
 
 int sysrq_toggle_support(int enable_mask);
 int sysrq_mask(void);