kgdb: gdb "monitor" -> kdb passthrough
[safe/jmp/linux-2.6] / kernel / debug / debug_core.c
1 /*
2  * Kernel Debug Core
3  *
4  * Maintainer: Jason Wessel <jason.wessel@windriver.com>
5  *
6  * Copyright (C) 2000-2001 VERITAS Software Corporation.
7  * Copyright (C) 2002-2004 Timesys Corporation
8  * Copyright (C) 2003-2004 Amit S. Kale <amitkale@linsyssoft.com>
9  * Copyright (C) 2004 Pavel Machek <pavel@suse.cz>
10  * Copyright (C) 2004-2006 Tom Rini <trini@kernel.crashing.org>
11  * Copyright (C) 2004-2006 LinSysSoft Technologies Pvt. Ltd.
12  * Copyright (C) 2005-2009 Wind River Systems, Inc.
13  * Copyright (C) 2007 MontaVista Software, Inc.
14  * Copyright (C) 2008 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
15  *
16  * Contributors at various stages not listed above:
17  *  Jason Wessel ( jason.wessel@windriver.com )
18  *  George Anzinger <george@mvista.com>
19  *  Anurekh Saxena (anurekh.saxena@timesys.com)
20  *  Lake Stevens Instrument Division (Glenn Engel)
21  *  Jim Kingdon, Cygnus Support.
22  *
23  * Original KGDB stub: David Grothe <dave@gcom.com>,
24  * Tigran Aivazian <tigran@sco.com>
25  *
26  * This file is licensed under the terms of the GNU General Public License
27  * version 2. This program is licensed "as is" without any warranty of any
28  * kind, whether express or implied.
29  */
30 #include <linux/pid_namespace.h>
31 #include <linux/clocksource.h>
32 #include <linux/interrupt.h>
33 #include <linux/spinlock.h>
34 #include <linux/console.h>
35 #include <linux/threads.h>
36 #include <linux/uaccess.h>
37 #include <linux/kernel.h>
38 #include <linux/module.h>
39 #include <linux/ptrace.h>
40 #include <linux/string.h>
41 #include <linux/delay.h>
42 #include <linux/sched.h>
43 #include <linux/sysrq.h>
44 #include <linux/init.h>
45 #include <linux/kgdb.h>
46 #include <linux/kdb.h>
47 #include <linux/pid.h>
48 #include <linux/smp.h>
49 #include <linux/mm.h>
50
51 #include <asm/cacheflush.h>
52 #include <asm/byteorder.h>
53 #include <asm/atomic.h>
54 #include <asm/system.h>
55
56 #include "debug_core.h"
57
58 static int kgdb_break_asap;
59
60 struct debuggerinfo_struct kgdb_info[NR_CPUS];
61
62 /**
63  * kgdb_connected - Is a host GDB connected to us?
64  */
65 int                             kgdb_connected;
66 EXPORT_SYMBOL_GPL(kgdb_connected);
67
68 /* All the KGDB handlers are installed */
69 static int                      kgdb_io_module_registered;
70
71 /* Guard for recursive entry */
72 static int                      exception_level;
73
74 struct kgdb_io          *dbg_io_ops;
75 static DEFINE_SPINLOCK(kgdb_registration_lock);
76
77 /* kgdb console driver is loaded */
78 static int kgdb_con_registered;
79 /* determine if kgdb console output should be used */
80 static int kgdb_use_con;
81 /* Next cpu to become the master debug core */
82 int dbg_switch_cpu;
83
84 /* Use kdb or gdbserver mode */
85 int dbg_kdb_mode = 1;
86
87 static int __init opt_kgdb_con(char *str)
88 {
89         kgdb_use_con = 1;
90         return 0;
91 }
92
93 early_param("kgdbcon", opt_kgdb_con);
94
95 module_param(kgdb_use_con, int, 0644);
96
97 /*
98  * Holds information about breakpoints in a kernel. These breakpoints are
99  * added and removed by gdb.
100  */
101 static struct kgdb_bkpt         kgdb_break[KGDB_MAX_BREAKPOINTS] = {
102         [0 ... KGDB_MAX_BREAKPOINTS-1] = { .state = BP_UNDEFINED }
103 };
104
105 /*
106  * The CPU# of the active CPU, or -1 if none:
107  */
108 atomic_t                        kgdb_active = ATOMIC_INIT(-1);
109 EXPORT_SYMBOL_GPL(kgdb_active);
110
111 /*
112  * We use NR_CPUs not PERCPU, in case kgdb is used to debug early
113  * bootup code (which might not have percpu set up yet):
114  */
115 static atomic_t                 passive_cpu_wait[NR_CPUS];
116 static atomic_t                 cpu_in_kgdb[NR_CPUS];
117 atomic_t                        kgdb_setting_breakpoint;
118
119 struct task_struct              *kgdb_usethread;
120 struct task_struct              *kgdb_contthread;
121
122 int                             kgdb_single_step;
123 static pid_t                    kgdb_sstep_pid;
124
125 /* to keep track of the CPU which is doing the single stepping*/
126 atomic_t                        kgdb_cpu_doing_single_step = ATOMIC_INIT(-1);
127
128 /*
129  * If you are debugging a problem where roundup (the collection of
130  * all other CPUs) is a problem [this should be extremely rare],
131  * then use the nokgdbroundup option to avoid roundup. In that case
132  * the other CPUs might interfere with your debugging context, so
133  * use this with care:
134  */
135 static int kgdb_do_roundup = 1;
136
137 static int __init opt_nokgdbroundup(char *str)
138 {
139         kgdb_do_roundup = 0;
140
141         return 0;
142 }
143
144 early_param("nokgdbroundup", opt_nokgdbroundup);
145
146 /*
147  * Finally, some KGDB code :-)
148  */
149
150 /*
151  * Weak aliases for breakpoint management,
152  * can be overriden by architectures when needed:
153  */
154 int __weak kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr)
155 {
156         int err;
157
158         err = probe_kernel_read(saved_instr, (char *)addr, BREAK_INSTR_SIZE);
159         if (err)
160                 return err;
161
162         return probe_kernel_write((char *)addr, arch_kgdb_ops.gdb_bpt_instr,
163                                   BREAK_INSTR_SIZE);
164 }
165
166 int __weak kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle)
167 {
168         return probe_kernel_write((char *)addr,
169                                   (char *)bundle, BREAK_INSTR_SIZE);
170 }
171
172 int __weak kgdb_validate_break_address(unsigned long addr)
173 {
174         char tmp_variable[BREAK_INSTR_SIZE];
175         int err;
176         /* Validate setting the breakpoint and then removing it.  In the
177          * remove fails, the kernel needs to emit a bad message because we
178          * are deep trouble not being able to put things back the way we
179          * found them.
180          */
181         err = kgdb_arch_set_breakpoint(addr, tmp_variable);
182         if (err)
183                 return err;
184         err = kgdb_arch_remove_breakpoint(addr, tmp_variable);
185         if (err)
186                 printk(KERN_ERR "KGDB: Critical breakpoint error, kernel "
187                    "memory destroyed at: %lx", addr);
188         return err;
189 }
190
191 unsigned long __weak kgdb_arch_pc(int exception, struct pt_regs *regs)
192 {
193         return instruction_pointer(regs);
194 }
195
196 int __weak kgdb_arch_init(void)
197 {
198         return 0;
199 }
200
201 int __weak kgdb_skipexception(int exception, struct pt_regs *regs)
202 {
203         return 0;
204 }
205
206 void __weak
207 kgdb_post_primary_code(struct pt_regs *regs, int e_vector, int err_code)
208 {
209         return;
210 }
211
212 /**
213  *      kgdb_disable_hw_debug - Disable hardware debugging while we in kgdb.
214  *      @regs: Current &struct pt_regs.
215  *
216  *      This function will be called if the particular architecture must
217  *      disable hardware debugging while it is processing gdb packets or
218  *      handling exception.
219  */
220 void __weak kgdb_disable_hw_debug(struct pt_regs *regs)
221 {
222 }
223
224 /*
225  * Some architectures need cache flushes when we set/clear a
226  * breakpoint:
227  */
228 static void kgdb_flush_swbreak_addr(unsigned long addr)
229 {
230         if (!CACHE_FLUSH_IS_SAFE)
231                 return;
232
233         if (current->mm && current->mm->mmap_cache) {
234                 flush_cache_range(current->mm->mmap_cache,
235                                   addr, addr + BREAK_INSTR_SIZE);
236         }
237         /* Force flush instruction cache if it was outside the mm */
238         flush_icache_range(addr, addr + BREAK_INSTR_SIZE);
239 }
240
241 /*
242  * SW breakpoint management:
243  */
244 int dbg_activate_sw_breakpoints(void)
245 {
246         unsigned long addr;
247         int error;
248         int ret = 0;
249         int i;
250
251         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
252                 if (kgdb_break[i].state != BP_SET)
253                         continue;
254
255                 addr = kgdb_break[i].bpt_addr;
256                 error = kgdb_arch_set_breakpoint(addr,
257                                 kgdb_break[i].saved_instr);
258                 if (error) {
259                         ret = error;
260                         printk(KERN_INFO "KGDB: BP install failed: %lx", addr);
261                         continue;
262                 }
263
264                 kgdb_flush_swbreak_addr(addr);
265                 kgdb_break[i].state = BP_ACTIVE;
266         }
267         return ret;
268 }
269
270 int dbg_set_sw_break(unsigned long addr)
271 {
272         int err = kgdb_validate_break_address(addr);
273         int breakno = -1;
274         int i;
275
276         if (err)
277                 return err;
278
279         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
280                 if ((kgdb_break[i].state == BP_SET) &&
281                                         (kgdb_break[i].bpt_addr == addr))
282                         return -EEXIST;
283         }
284         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
285                 if (kgdb_break[i].state == BP_REMOVED &&
286                                         kgdb_break[i].bpt_addr == addr) {
287                         breakno = i;
288                         break;
289                 }
290         }
291
292         if (breakno == -1) {
293                 for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
294                         if (kgdb_break[i].state == BP_UNDEFINED) {
295                                 breakno = i;
296                                 break;
297                         }
298                 }
299         }
300
301         if (breakno == -1)
302                 return -E2BIG;
303
304         kgdb_break[breakno].state = BP_SET;
305         kgdb_break[breakno].type = BP_BREAKPOINT;
306         kgdb_break[breakno].bpt_addr = addr;
307
308         return 0;
309 }
310
311 int dbg_deactivate_sw_breakpoints(void)
312 {
313         unsigned long addr;
314         int error;
315         int ret = 0;
316         int i;
317
318         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
319                 if (kgdb_break[i].state != BP_ACTIVE)
320                         continue;
321                 addr = kgdb_break[i].bpt_addr;
322                 error = kgdb_arch_remove_breakpoint(addr,
323                                         kgdb_break[i].saved_instr);
324                 if (error) {
325                         printk(KERN_INFO "KGDB: BP remove failed: %lx\n", addr);
326                         ret = error;
327                 }
328
329                 kgdb_flush_swbreak_addr(addr);
330                 kgdb_break[i].state = BP_SET;
331         }
332         return ret;
333 }
334
335 int dbg_remove_sw_break(unsigned long addr)
336 {
337         int i;
338
339         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
340                 if ((kgdb_break[i].state == BP_SET) &&
341                                 (kgdb_break[i].bpt_addr == addr)) {
342                         kgdb_break[i].state = BP_REMOVED;
343                         return 0;
344                 }
345         }
346         return -ENOENT;
347 }
348
349 int kgdb_isremovedbreak(unsigned long addr)
350 {
351         int i;
352
353         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
354                 if ((kgdb_break[i].state == BP_REMOVED) &&
355                                         (kgdb_break[i].bpt_addr == addr))
356                         return 1;
357         }
358         return 0;
359 }
360
361 int dbg_remove_all_break(void)
362 {
363         unsigned long addr;
364         int error;
365         int i;
366
367         /* Clear memory breakpoints. */
368         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
369                 if (kgdb_break[i].state != BP_ACTIVE)
370                         goto setundefined;
371                 addr = kgdb_break[i].bpt_addr;
372                 error = kgdb_arch_remove_breakpoint(addr,
373                                 kgdb_break[i].saved_instr);
374                 if (error)
375                         printk(KERN_ERR "KGDB: breakpoint remove failed: %lx\n",
376                            addr);
377 setundefined:
378                 kgdb_break[i].state = BP_UNDEFINED;
379         }
380
381         /* Clear hardware breakpoints. */
382         if (arch_kgdb_ops.remove_all_hw_break)
383                 arch_kgdb_ops.remove_all_hw_break();
384
385         return 0;
386 }
387
388 /*
389  * Return true if there is a valid kgdb I/O module.  Also if no
390  * debugger is attached a message can be printed to the console about
391  * waiting for the debugger to attach.
392  *
393  * The print_wait argument is only to be true when called from inside
394  * the core kgdb_handle_exception, because it will wait for the
395  * debugger to attach.
396  */
397 static int kgdb_io_ready(int print_wait)
398 {
399         if (!dbg_io_ops)
400                 return 0;
401         if (kgdb_connected)
402                 return 1;
403         if (atomic_read(&kgdb_setting_breakpoint))
404                 return 1;
405         if (print_wait) {
406 #ifdef CONFIG_KGDB_KDB
407                 if (!dbg_kdb_mode)
408                         printk(KERN_CRIT "KGDB: waiting... or $3#33 for KDB\n");
409 #else
410                 printk(KERN_CRIT "KGDB: Waiting for remote debugger\n");
411 #endif
412         }
413         return 1;
414 }
415
416 static int kgdb_reenter_check(struct kgdb_state *ks)
417 {
418         unsigned long addr;
419
420         if (atomic_read(&kgdb_active) != raw_smp_processor_id())
421                 return 0;
422
423         /* Panic on recursive debugger calls: */
424         exception_level++;
425         addr = kgdb_arch_pc(ks->ex_vector, ks->linux_regs);
426         dbg_deactivate_sw_breakpoints();
427
428         /*
429          * If the break point removed ok at the place exception
430          * occurred, try to recover and print a warning to the end
431          * user because the user planted a breakpoint in a place that
432          * KGDB needs in order to function.
433          */
434         if (dbg_remove_sw_break(addr) == 0) {
435                 exception_level = 0;
436                 kgdb_skipexception(ks->ex_vector, ks->linux_regs);
437                 dbg_activate_sw_breakpoints();
438                 printk(KERN_CRIT "KGDB: re-enter error: breakpoint removed %lx\n",
439                         addr);
440                 WARN_ON_ONCE(1);
441
442                 return 1;
443         }
444         dbg_remove_all_break();
445         kgdb_skipexception(ks->ex_vector, ks->linux_regs);
446
447         if (exception_level > 1) {
448                 dump_stack();
449                 panic("Recursive entry to debugger");
450         }
451
452         printk(KERN_CRIT "KGDB: re-enter exception: ALL breakpoints killed\n");
453         dump_stack();
454         panic("Recursive entry to debugger");
455
456         return 1;
457 }
458
459 static void dbg_cpu_switch(int cpu, int next_cpu)
460 {
461         /* Mark the cpu we are switching away from as a slave when it
462          * holds the kgdb_active token.  This must be done so that the
463          * that all the cpus wait in for the debug core will not enter
464          * again as the master. */
465         if (cpu == atomic_read(&kgdb_active)) {
466                 kgdb_info[cpu].exception_state |= DCPU_IS_SLAVE;
467                 kgdb_info[cpu].exception_state &= ~DCPU_WANT_MASTER;
468         }
469         kgdb_info[next_cpu].exception_state |= DCPU_NEXT_MASTER;
470 }
471
472 static int kgdb_cpu_enter(struct kgdb_state *ks, struct pt_regs *regs)
473 {
474         unsigned long flags;
475         int sstep_tries = 100;
476         int error;
477         int i, cpu;
478         int trace_on = 0;
479 acquirelock:
480         /*
481          * Interrupts will be restored by the 'trap return' code, except when
482          * single stepping.
483          */
484         local_irq_save(flags);
485
486         cpu = ks->cpu;
487         kgdb_info[cpu].debuggerinfo = regs;
488         kgdb_info[cpu].task = current;
489         kgdb_info[cpu].ret_state = 0;
490         kgdb_info[cpu].irq_depth = hardirq_count() >> HARDIRQ_SHIFT;
491         /*
492          * Make sure the above info reaches the primary CPU before
493          * our cpu_in_kgdb[] flag setting does:
494          */
495         atomic_inc(&cpu_in_kgdb[cpu]);
496
497         /*
498          * CPU will loop if it is a slave or request to become a kgdb
499          * master cpu and acquire the kgdb_active lock:
500          */
501         while (1) {
502 cpu_loop:
503                 if (kgdb_info[cpu].exception_state & DCPU_NEXT_MASTER) {
504                         kgdb_info[cpu].exception_state &= ~DCPU_NEXT_MASTER;
505                         goto cpu_master_loop;
506                 } else if (kgdb_info[cpu].exception_state & DCPU_WANT_MASTER) {
507                         if (atomic_cmpxchg(&kgdb_active, -1, cpu) == cpu)
508                                 break;
509                 } else if (kgdb_info[cpu].exception_state & DCPU_IS_SLAVE) {
510                         if (!atomic_read(&passive_cpu_wait[cpu]))
511                                 goto return_normal;
512                 } else {
513 return_normal:
514                         /* Return to normal operation by executing any
515                          * hw breakpoint fixup.
516                          */
517                         if (arch_kgdb_ops.correct_hw_break)
518                                 arch_kgdb_ops.correct_hw_break();
519                         if (trace_on)
520                                 tracing_on();
521                         atomic_dec(&cpu_in_kgdb[cpu]);
522                         touch_softlockup_watchdog_sync();
523                         clocksource_touch_watchdog();
524                         local_irq_restore(flags);
525                         return 0;
526                 }
527                 cpu_relax();
528         }
529
530         /*
531          * For single stepping, try to only enter on the processor
532          * that was single stepping.  To gaurd against a deadlock, the
533          * kernel will only try for the value of sstep_tries before
534          * giving up and continuing on.
535          */
536         if (atomic_read(&kgdb_cpu_doing_single_step) != -1 &&
537             (kgdb_info[cpu].task &&
538              kgdb_info[cpu].task->pid != kgdb_sstep_pid) && --sstep_tries) {
539                 atomic_set(&kgdb_active, -1);
540                 touch_softlockup_watchdog_sync();
541                 clocksource_touch_watchdog();
542                 local_irq_restore(flags);
543
544                 goto acquirelock;
545         }
546
547         if (!kgdb_io_ready(1)) {
548                 kgdb_info[cpu].ret_state = 1;
549                 goto kgdb_restore; /* No I/O connection, resume the system */
550         }
551
552         /*
553          * Don't enter if we have hit a removed breakpoint.
554          */
555         if (kgdb_skipexception(ks->ex_vector, ks->linux_regs))
556                 goto kgdb_restore;
557
558         /* Call the I/O driver's pre_exception routine */
559         if (dbg_io_ops->pre_exception)
560                 dbg_io_ops->pre_exception();
561
562         kgdb_disable_hw_debug(ks->linux_regs);
563
564         /*
565          * Get the passive CPU lock which will hold all the non-primary
566          * CPU in a spin state while the debugger is active
567          */
568         if (!kgdb_single_step) {
569                 for (i = 0; i < NR_CPUS; i++)
570                         atomic_inc(&passive_cpu_wait[i]);
571         }
572
573 #ifdef CONFIG_SMP
574         /* Signal the other CPUs to enter kgdb_wait() */
575         if ((!kgdb_single_step) && kgdb_do_roundup)
576                 kgdb_roundup_cpus(flags);
577 #endif
578
579         /*
580          * Wait for the other CPUs to be notified and be waiting for us:
581          */
582         for_each_online_cpu(i) {
583                 while (kgdb_do_roundup && !atomic_read(&cpu_in_kgdb[i]))
584                         cpu_relax();
585         }
586
587         /*
588          * At this point the primary processor is completely
589          * in the debugger and all secondary CPUs are quiescent
590          */
591         kgdb_post_primary_code(ks->linux_regs, ks->ex_vector, ks->err_code);
592         dbg_deactivate_sw_breakpoints();
593         kgdb_single_step = 0;
594         kgdb_contthread = current;
595         exception_level = 0;
596         trace_on = tracing_is_on();
597         if (trace_on)
598                 tracing_off();
599
600         while (1) {
601 cpu_master_loop:
602                 if (dbg_kdb_mode) {
603                         kgdb_connected = 1;
604                         error = kdb_stub(ks);
605                 } else {
606                         error = gdb_serial_stub(ks);
607                 }
608
609                 if (error == DBG_PASS_EVENT) {
610                         dbg_kdb_mode = !dbg_kdb_mode;
611                         kgdb_connected = 0;
612                 } else if (error == DBG_SWITCH_CPU_EVENT) {
613                         dbg_cpu_switch(cpu, dbg_switch_cpu);
614                         goto cpu_loop;
615                 } else {
616                         kgdb_info[cpu].ret_state = error;
617                         break;
618                 }
619         }
620
621         /* Call the I/O driver's post_exception routine */
622         if (dbg_io_ops->post_exception)
623                 dbg_io_ops->post_exception();
624
625         atomic_dec(&cpu_in_kgdb[ks->cpu]);
626
627         if (!kgdb_single_step) {
628                 for (i = NR_CPUS-1; i >= 0; i--)
629                         atomic_dec(&passive_cpu_wait[i]);
630                 /*
631                  * Wait till all the CPUs have quit from the debugger,
632                  * but allow a CPU that hit an exception and is
633                  * waiting to become the master to remain in the debug
634                  * core.
635                  */
636                 for_each_online_cpu(i) {
637                         while (kgdb_do_roundup &&
638                                atomic_read(&cpu_in_kgdb[i]) &&
639                                !(kgdb_info[i].exception_state &
640                                  DCPU_WANT_MASTER))
641                                 cpu_relax();
642                 }
643         }
644
645 kgdb_restore:
646         if (atomic_read(&kgdb_cpu_doing_single_step) != -1) {
647                 int sstep_cpu = atomic_read(&kgdb_cpu_doing_single_step);
648                 if (kgdb_info[sstep_cpu].task)
649                         kgdb_sstep_pid = kgdb_info[sstep_cpu].task->pid;
650                 else
651                         kgdb_sstep_pid = 0;
652         }
653         if (trace_on)
654                 tracing_on();
655         /* Free kgdb_active */
656         atomic_set(&kgdb_active, -1);
657         touch_softlockup_watchdog_sync();
658         clocksource_touch_watchdog();
659         local_irq_restore(flags);
660
661         return kgdb_info[cpu].ret_state;
662 }
663
664 /*
665  * kgdb_handle_exception() - main entry point from a kernel exception
666  *
667  * Locking hierarchy:
668  *      interface locks, if any (begin_session)
669  *      kgdb lock (kgdb_active)
670  */
671 int
672 kgdb_handle_exception(int evector, int signo, int ecode, struct pt_regs *regs)
673 {
674         struct kgdb_state kgdb_var;
675         struct kgdb_state *ks = &kgdb_var;
676         int ret;
677
678         ks->cpu                 = raw_smp_processor_id();
679         ks->ex_vector           = evector;
680         ks->signo               = signo;
681         ks->ex_vector           = evector;
682         ks->err_code            = ecode;
683         ks->kgdb_usethreadid    = 0;
684         ks->linux_regs          = regs;
685
686         if (kgdb_reenter_check(ks))
687                 return 0; /* Ouch, double exception ! */
688         kgdb_info[ks->cpu].exception_state |= DCPU_WANT_MASTER;
689         ret = kgdb_cpu_enter(ks, regs);
690         kgdb_info[ks->cpu].exception_state &= ~(DCPU_WANT_MASTER |
691                                                 DCPU_IS_SLAVE);
692         return ret;
693 }
694
695 int kgdb_nmicallback(int cpu, void *regs)
696 {
697 #ifdef CONFIG_SMP
698         struct kgdb_state kgdb_var;
699         struct kgdb_state *ks = &kgdb_var;
700
701         memset(ks, 0, sizeof(struct kgdb_state));
702         ks->cpu                 = cpu;
703         ks->linux_regs          = regs;
704
705         if (!atomic_read(&cpu_in_kgdb[cpu]) &&
706             atomic_read(&kgdb_active) != -1 &&
707             atomic_read(&kgdb_active) != cpu) {
708                 kgdb_info[cpu].exception_state |= DCPU_IS_SLAVE;
709                 kgdb_cpu_enter(ks, regs);
710                 kgdb_info[cpu].exception_state &= ~DCPU_IS_SLAVE;
711                 return 0;
712         }
713 #endif
714         return 1;
715 }
716
717 static void kgdb_console_write(struct console *co, const char *s,
718    unsigned count)
719 {
720         unsigned long flags;
721
722         /* If we're debugging, or KGDB has not connected, don't try
723          * and print. */
724         if (!kgdb_connected || atomic_read(&kgdb_active) != -1 || dbg_kdb_mode)
725                 return;
726
727         local_irq_save(flags);
728         gdbstub_msg_write(s, count);
729         local_irq_restore(flags);
730 }
731
732 static struct console kgdbcons = {
733         .name           = "kgdb",
734         .write          = kgdb_console_write,
735         .flags          = CON_PRINTBUFFER | CON_ENABLED,
736         .index          = -1,
737 };
738
739 #ifdef CONFIG_MAGIC_SYSRQ
740 static void sysrq_handle_dbg(int key, struct tty_struct *tty)
741 {
742         if (!dbg_io_ops) {
743                 printk(KERN_CRIT "ERROR: No KGDB I/O module available\n");
744                 return;
745         }
746         if (!kgdb_connected) {
747 #ifdef CONFIG_KGDB_KDB
748                 if (!dbg_kdb_mode)
749                         printk(KERN_CRIT "KGDB or $3#33 for KDB\n");
750 #else
751                 printk(KERN_CRIT "Entering KGDB\n");
752 #endif
753         }
754
755         kgdb_breakpoint();
756 }
757
758 static struct sysrq_key_op sysrq_dbg_op = {
759         .handler        = sysrq_handle_dbg,
760         .help_msg       = "debug(G)",
761         .action_msg     = "DEBUG",
762 };
763 #endif
764
765 static void kgdb_register_callbacks(void)
766 {
767         if (!kgdb_io_module_registered) {
768                 kgdb_io_module_registered = 1;
769                 kgdb_arch_init();
770 #ifdef CONFIG_MAGIC_SYSRQ
771                 register_sysrq_key('g', &sysrq_dbg_op);
772 #endif
773                 if (kgdb_use_con && !kgdb_con_registered) {
774                         register_console(&kgdbcons);
775                         kgdb_con_registered = 1;
776                 }
777         }
778 }
779
780 static void kgdb_unregister_callbacks(void)
781 {
782         /*
783          * When this routine is called KGDB should unregister from the
784          * panic handler and clean up, making sure it is not handling any
785          * break exceptions at the time.
786          */
787         if (kgdb_io_module_registered) {
788                 kgdb_io_module_registered = 0;
789                 kgdb_arch_exit();
790 #ifdef CONFIG_MAGIC_SYSRQ
791                 unregister_sysrq_key('g', &sysrq_dbg_op);
792 #endif
793                 if (kgdb_con_registered) {
794                         unregister_console(&kgdbcons);
795                         kgdb_con_registered = 0;
796                 }
797         }
798 }
799
800 static void kgdb_initial_breakpoint(void)
801 {
802         kgdb_break_asap = 0;
803
804         printk(KERN_CRIT "kgdb: Waiting for connection from remote gdb...\n");
805         kgdb_breakpoint();
806 }
807
808 /**
809  *      kgdb_register_io_module - register KGDB IO module
810  *      @new_dbg_io_ops: the io ops vector
811  *
812  *      Register it with the KGDB core.
813  */
814 int kgdb_register_io_module(struct kgdb_io *new_dbg_io_ops)
815 {
816         int err;
817
818         spin_lock(&kgdb_registration_lock);
819
820         if (dbg_io_ops) {
821                 spin_unlock(&kgdb_registration_lock);
822
823                 printk(KERN_ERR "kgdb: Another I/O driver is already "
824                                 "registered with KGDB.\n");
825                 return -EBUSY;
826         }
827
828         if (new_dbg_io_ops->init) {
829                 err = new_dbg_io_ops->init();
830                 if (err) {
831                         spin_unlock(&kgdb_registration_lock);
832                         return err;
833                 }
834         }
835
836         dbg_io_ops = new_dbg_io_ops;
837
838         spin_unlock(&kgdb_registration_lock);
839
840         printk(KERN_INFO "kgdb: Registered I/O driver %s.\n",
841                new_dbg_io_ops->name);
842
843         /* Arm KGDB now. */
844         kgdb_register_callbacks();
845
846         if (kgdb_break_asap)
847                 kgdb_initial_breakpoint();
848
849         return 0;
850 }
851 EXPORT_SYMBOL_GPL(kgdb_register_io_module);
852
853 /**
854  *      kkgdb_unregister_io_module - unregister KGDB IO module
855  *      @old_dbg_io_ops: the io ops vector
856  *
857  *      Unregister it with the KGDB core.
858  */
859 void kgdb_unregister_io_module(struct kgdb_io *old_dbg_io_ops)
860 {
861         BUG_ON(kgdb_connected);
862
863         /*
864          * KGDB is no longer able to communicate out, so
865          * unregister our callbacks and reset state.
866          */
867         kgdb_unregister_callbacks();
868
869         spin_lock(&kgdb_registration_lock);
870
871         WARN_ON_ONCE(dbg_io_ops != old_dbg_io_ops);
872         dbg_io_ops = NULL;
873
874         spin_unlock(&kgdb_registration_lock);
875
876         printk(KERN_INFO
877                 "kgdb: Unregistered I/O driver %s, debugger disabled.\n",
878                 old_dbg_io_ops->name);
879 }
880 EXPORT_SYMBOL_GPL(kgdb_unregister_io_module);
881
882 int dbg_io_get_char(void)
883 {
884         int ret = dbg_io_ops->read_char();
885         if (ret == NO_POLL_CHAR)
886                 return -1;
887         if (!dbg_kdb_mode)
888                 return ret;
889         if (ret == 127)
890                 return 8;
891         return ret;
892 }
893
894 /**
895  * kgdb_breakpoint - generate breakpoint exception
896  *
897  * This function will generate a breakpoint exception.  It is used at the
898  * beginning of a program to sync up with a debugger and can be used
899  * otherwise as a quick means to stop program execution and "break" into
900  * the debugger.
901  */
902 void kgdb_breakpoint(void)
903 {
904         atomic_inc(&kgdb_setting_breakpoint);
905         wmb(); /* Sync point before breakpoint */
906         arch_kgdb_breakpoint();
907         wmb(); /* Sync point after breakpoint */
908         atomic_dec(&kgdb_setting_breakpoint);
909 }
910 EXPORT_SYMBOL_GPL(kgdb_breakpoint);
911
912 static int __init opt_kgdb_wait(char *str)
913 {
914         kgdb_break_asap = 1;
915
916         kdb_init(KDB_INIT_EARLY);
917         if (kgdb_io_module_registered)
918                 kgdb_initial_breakpoint();
919
920         return 0;
921 }
922
923 early_param("kgdbwait", opt_kgdb_wait);