[PATCH] ppc64: allow xmon=off
authorOlaf Hering <olh@suse.de>
Thu, 4 Aug 2005 17:26:42 +0000 (19:26 +0200)
committerPaul Mackerras <paulus@samba.org>
Mon, 29 Aug 2005 00:53:37 +0000 (10:53 +1000)
If both CONFIG_XMON and CONFIG_XMON_DEFAULT is enabled in the .config,
there is no way to disable xmon again. setup_system calls first xmon_init,
later parse_early_param. So a new 'xmon=off' cmdline option will do the right
thing.

Signed-off-by: Olaf Hering <olh@suse.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/ppc64/kernel/setup.c
arch/ppc64/xmon/start.c
arch/ppc64/xmon/xmon.c
include/asm-ppc64/system.h

index e9c24d2dbd91276407ba53d2abd9e4b2fc013b34..b3ef8df12982540ca224b799fd6d33de36287597 100644 (file)
@@ -627,7 +627,7 @@ void __init setup_system(void)
         * Initialize xmon
         */
 #ifdef CONFIG_XMON_DEFAULT
-       xmon_init();
+       xmon_init(1);
 #endif
        /*
         * Register early console
@@ -1343,11 +1343,13 @@ static int __init early_xmon(char *p)
        /* ensure xmon is enabled */
        if (p) {
                if (strncmp(p, "on", 2) == 0)
-                       xmon_init();
+                       xmon_init(1);
+               if (strncmp(p, "off", 3) == 0)
+                       xmon_init(0);
                if (strncmp(p, "early", 5) != 0)
                        return 0;
        }
-       xmon_init();
+       xmon_init(1);
        debugger(NULL);
 
        return 0;
index a9265bcc79b24d1e3750efdb3ec86e7ee3d1cd61..f86b584acd76d16793e55be30848319d3e7066de 100644 (file)
@@ -27,7 +27,7 @@ static void sysrq_handle_xmon(int key, struct pt_regs *pt_regs,
                              struct tty_struct *tty) 
 {
        /* ensure xmon is enabled */
-       xmon_init();
+       xmon_init(1);
        debugger(pt_regs);
 }
 
index 05539439e6bc0eef1b020f402a7b218b4f2841cf..45908b10acd345970da83c6d5369fc850e6b072a 100644 (file)
@@ -2496,15 +2496,25 @@ static void dump_stab(void)
        }
 }
 
-void xmon_init(void)
-{
-       __debugger = xmon;
-       __debugger_ipi = xmon_ipi;
-       __debugger_bpt = xmon_bpt;
-       __debugger_sstep = xmon_sstep;
-       __debugger_iabr_match = xmon_iabr_match;
-       __debugger_dabr_match = xmon_dabr_match;
-       __debugger_fault_handler = xmon_fault_handler;
+void xmon_init(int enable)
+{
+       if (enable) {
+               __debugger = xmon;
+               __debugger_ipi = xmon_ipi;
+               __debugger_bpt = xmon_bpt;
+               __debugger_sstep = xmon_sstep;
+               __debugger_iabr_match = xmon_iabr_match;
+               __debugger_dabr_match = xmon_dabr_match;
+               __debugger_fault_handler = xmon_fault_handler;
+       } else {
+               __debugger = NULL;
+               __debugger_ipi = NULL;
+               __debugger_bpt = NULL;
+               __debugger_sstep = NULL;
+               __debugger_iabr_match = NULL;
+               __debugger_dabr_match = NULL;
+               __debugger_fault_handler = NULL;
+       }
 }
 
 void dump_segments(void)
index 4104a5dedbaa4d8eecab0a3f912b66c4a5446004..b9e1835351e98d7874f1c9f06cc7a4fccc3f4904 100644 (file)
@@ -88,7 +88,7 @@ DEBUGGER_BOILERPLATE(debugger_dabr_match)
 DEBUGGER_BOILERPLATE(debugger_fault_handler)
 
 #ifdef CONFIG_XMON
-extern void xmon_init(void);
+extern void xmon_init(int enable);
 #endif
 
 #else