x86: msr: propagate errors from smp_call_function_single()
[safe/jmp/linux-2.6] / arch / x86 / kernel / kgdb.c
index 7d651ad..f47f0eb 100644 (file)
 #include <asm/apicdef.h>
 #include <asm/system.h>
 
-#ifdef CONFIG_X86_32
-# include <mach_ipi.h>
-#else
-# include <asm/mach_apic.h>
-#endif
+#include <mach_ipi.h>
 
 /*
  * Put the error code here just in case the user cares:
@@ -370,15 +366,17 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,
                ptr = &remcomInBuffer[1];
                if (kgdb_hex2long(&ptr, &addr))
                        linux_regs->ip = addr;
+       case 'D':
+       case 'k':
                newPC = linux_regs->ip;
 
                /* clear the trace bit */
-               linux_regs->flags &= ~TF_MASK;
+               linux_regs->flags &= ~X86_EFLAGS_TF;
                atomic_set(&kgdb_cpu_doing_single_step, -1);
 
                /* set the trace bit if we're stepping */
                if (remcomInBuffer[0] == 's') {
-                       linux_regs->flags |= TF_MASK;
+                       linux_regs->flags |= X86_EFLAGS_TF;
                        kgdb_single_step = 1;
                        if (kgdb_contthread) {
                                atomic_set(&kgdb_cpu_doing_single_step,
@@ -480,6 +478,8 @@ static int __kgdb_notify(struct die_args *args, unsigned long cmd)
        if (kgdb_handle_exception(args->trapnr, args->signr, args->err, regs))
                return NOTIFY_DONE;
 
+       /* Must touch watchdog before return to normal operation */
+       touch_nmi_watchdog();
        return NOTIFY_STOP;
 }