]> xenbits.xen.org Git - xenclient/kernel.git/commitdiff
imported patch kdb-fixes veritas-kdb-xen.patch
authort_jeang <devnull@localhost>
Tue, 6 Jan 2009 12:06:06 +0000 (12:06 +0000)
committert_jeang <devnull@localhost>
Tue, 6 Jan 2009 12:06:06 +0000 (12:06 +0000)
arch/i386/kdb/kdba_io.c
arch/i386/kernel/traps-xen.c
arch/x86_64/kdb/kdba_io.c
kdb/kdbmain.c

index 35faeafdaa8bb57fe3bc1bc10ec8475dc5b79095..b2709a5c33496f85c0d8ef60175308cfb7abb615 100644 (file)
 #include <xen/xencons.h>
 #endif
 
-#ifdef CONFIG_VT_CONSOLE
-#define KDB_BLINK_LED 1
-#else
 #undef KDB_BLINK_LED
-#endif
 
 #ifdef CONFIG_KDB_USB
 struct kdb_usb_exchange kdb_usb_infos;
index 6e77ae2e5b8f6da60cb39518a6e7a8115b2185df..ccac68a9c62ff417eed6063a5a86b5e0ce91fef7 100644 (file)
@@ -370,15 +370,26 @@ static void handle_BUG(struct pt_regs *regs)
        printk(KERN_EMERG "------------[ cut here ]------------\n");
 #ifdef CONFIG_DEBUG_BUGVERBOSE
        do {
+               unsigned char ljmp;
                unsigned short line;
                char *file;
                char c;
 
-               if (__get_user(line, (unsigned short __user *)(eip + 2)))
+               if (__get_user(ljmp, (unsigned char __user *)(eip + 2)))
+                       break;
+               if (ljmp == 0xea) {
+                       if (__get_user(line, (unsigned short __user *)(eip + 7)))
+                               break;
+                       if (__get_user(file, (char * __user *)(eip + 3)))
+                               break;
+               } else {
+                       if (__get_user(line, (unsigned short __user *)(eip + 2)))
+                               break;
+                       if (__get_user(file, (char * __user *)(eip + 4)))
+                               break;
+               }
+               if ((unsigned long)file < PAGE_OFFSET || __get_user(c, file))
                        break;
-               if (__get_user(file, (char * __user *)(eip + 4)) ||
-                   (unsigned long)file < PAGE_OFFSET || __get_user(c, file))
-                       file = "<bad filename>";
 
                printk(KERN_EMERG "kernel BUG at %s:%d!\n", file, line);
                return;
index 2fe3761d5b428acee073b497d5a825efb4fb7681..769a514e717903fb00e98c02a7df09c7fa40fb69 100644 (file)
 #include <xen/xencons.h>
 #endif
 
-#ifdef CONFIG_VT_CONSOLE
-#define KDB_BLINK_LED 1
-#else
 #undef KDB_BLINK_LED
-#endif
 
 #ifdef CONFIG_KDB_USB
 struct kdb_usb_exchange kdb_usb_infos;
index 3168006a6d87456d72d26ccd15d4f64c132ec88d..f45affbea37376c0aa799f95d2e3cbe5f20ea704 100644 (file)
@@ -3852,11 +3852,16 @@ kdb_cmd_init(void)
 {
        int i, diag;
        for (i = 0; kdb_cmds[i]; ++i) {
-               if (!defcmd_in_progress)
-                       kdb_printf("kdb_cmd[%d]: %s", i, kdb_cmds[i]);
+               if (!defcmd_in_progress) {
+                       /* Use printk as kdb_printf writes to all consoles bypassing loglevel 
+                        * checks, and we don't want this stuff appearing in the console at boot
+                        * time unless something goes wrong
+                        */
+                       printk(KERN_DEBUG "kdb_cmd[%d]: %s", i, kdb_cmds[i]);
+       }
                diag = kdb_parse(kdb_cmds[i], NULL);
                if (diag)
-                       kdb_printf("command failed, kdb diag %d\n", diag);
+                       kdb_printf("kdb_cmd[%d]: command %s failed, kdb diag %d", i, kdb_cmds[i], diag);
        }
        if (defcmd_in_progress) {
                kdb_printf("Incomplete 'defcmd' set, forcing endefcmd\n");