]> Pileus Git - ~andy/linux/blobdiff - arch/avr32/kernel/process.c
[AVR32] Enable debugging only when needed
[~andy/linux] / arch / avr32 / kernel / process.c
index 13f988402613a038133f0e84289565210382600a..eaaa69bbdc38d5546b395311f29896a6a2c357db 100644 (file)
@@ -55,8 +55,8 @@ void machine_power_off(void)
 
 void machine_restart(char *cmd)
 {
-       __mtdr(DBGREG_DC, DC_DBE);
-       __mtdr(DBGREG_DC, DC_RES);
+       ocd_write(DC, (1 << OCD_DC_DBE_BIT));
+       ocd_write(DC, (1 << OCD_DC_RES_BIT));
        while (1) ;
 }
 
@@ -103,7 +103,7 @@ EXPORT_SYMBOL(kernel_thread);
  */
 void exit_thread(void)
 {
-       /* nothing to do */
+       ocd_disable(current);
 }
 
 void flush_thread(void)
@@ -287,10 +287,11 @@ void show_regs_log_lvl(struct pt_regs *regs, const char *log_lvl)
               regs->sr & SR_N ? 'N' : 'n',
               regs->sr & SR_Z ? 'Z' : 'z',
               regs->sr & SR_C ? 'C' : 'c');
-       printk("%sMode bits: %c%c%c%c%c%c%c%c%c\n", log_lvl,
+       printk("%sMode bits: %c%c%c%c%c%c%c%c%c%c\n", log_lvl,
               regs->sr & SR_H ? 'H' : 'h',
-              regs->sr & SR_R ? 'R' : 'r',
               regs->sr & SR_J ? 'J' : 'j',
+              regs->sr & SR_DM ? 'M' : 'm',
+              regs->sr & SR_D ? 'D' : 'd',
               regs->sr & SR_EM ? 'E' : 'e',
               regs->sr & SR_I3M ? '3' : '.',
               regs->sr & SR_I2M ? '2' : '.',
@@ -344,6 +345,9 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
        p->thread.cpu_context.ksp = (unsigned long)childregs;
        p->thread.cpu_context.pc = (unsigned long)ret_from_fork;
 
+       if ((clone_flags & CLONE_PTRACE) && test_thread_flag(TIF_DEBUG))
+               ocd_enable(p);
+
        return 0;
 }