Merge tag 'split-asm_system_h-for-linus-20120328' of git://git.kernel.org/pub/scm...
[linux-flexiantxendom0-3.2.10.git] / 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@ucw.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/reboot.h>
45 #include <linux/init.h>
46 #include <linux/kgdb.h>
47 #include <linux/kdb.h>
48 #include <linux/pid.h>
49 #include <linux/smp.h>
50 #include <linux/mm.h>
51 #include <linux/rcupdate.h>
52
53 #include <asm/cacheflush.h>
54 #include <asm/byteorder.h>
55 #include <linux/atomic.h>
56
57 #include "debug_core.h"
58
59 static int kgdb_break_asap;
60
61 struct debuggerinfo_struct kgdb_info[NR_CPUS];
62
63 /**
64  * kgdb_connected - Is a host GDB connected to us?
65  */
66 int                             kgdb_connected;
67 EXPORT_SYMBOL_GPL(kgdb_connected);
68
69 /* All the KGDB handlers are installed */
70 int                     kgdb_io_module_registered;
71
72 /* Guard for recursive entry */
73 static int                      exception_level;
74
75 struct kgdb_io          *dbg_io_ops;
76 static DEFINE_SPINLOCK(kgdb_registration_lock);
77
78 /* Action for the reboot notifiter, a global allow kdb to change it */
79 static int kgdbreboot;
80 /* kgdb console driver is loaded */
81 static int kgdb_con_registered;
82 /* determine if kgdb console output should be used */
83 static int kgdb_use_con;
84 /* Flag for alternate operations for early debugging */
85 bool dbg_is_early = true;
86 /* Next cpu to become the master debug core */
87 int dbg_switch_cpu;
88
89 /* Use kdb or gdbserver mode */
90 int dbg_kdb_mode = 1;
91
92 static int __init opt_kgdb_con(char *str)
93 {
94         kgdb_use_con = 1;
95         return 0;
96 }
97
98 early_param("kgdbcon", opt_kgdb_con);
99
100 module_param(kgdb_use_con, int, 0644);
101 module_param(kgdbreboot, int, 0644);
102
103 /*
104  * Holds information about breakpoints in a kernel. These breakpoints are
105  * added and removed by gdb.
106  */
107 static struct kgdb_bkpt         kgdb_break[KGDB_MAX_BREAKPOINTS] = {
108         [0 ... KGDB_MAX_BREAKPOINTS-1] = { .state = BP_UNDEFINED }
109 };
110
111 /*
112  * The CPU# of the active CPU, or -1 if none:
113  */
114 atomic_t                        kgdb_active = ATOMIC_INIT(-1);
115 EXPORT_SYMBOL_GPL(kgdb_active);
116 static DEFINE_RAW_SPINLOCK(dbg_master_lock);
117 static DEFINE_RAW_SPINLOCK(dbg_slave_lock);
118
119 /*
120  * We use NR_CPUs not PERCPU, in case kgdb is used to debug early
121  * bootup code (which might not have percpu set up yet):
122  */
123 static atomic_t                 masters_in_kgdb;
124 static atomic_t                 slaves_in_kgdb;
125 static atomic_t                 kgdb_break_tasklet_var;
126 atomic_t                        kgdb_setting_breakpoint;
127
128 struct task_struct              *kgdb_usethread;
129 struct task_struct              *kgdb_contthread;
130
131 int                             kgdb_single_step;
132 static pid_t                    kgdb_sstep_pid;
133
134 /* to keep track of the CPU which is doing the single stepping*/
135 atomic_t                        kgdb_cpu_doing_single_step = ATOMIC_INIT(-1);
136
137 /*
138  * If you are debugging a problem where roundup (the collection of
139  * all other CPUs) is a problem [this should be extremely rare],
140  * then use the nokgdbroundup option to avoid roundup. In that case
141  * the other CPUs might interfere with your debugging context, so
142  * use this with care:
143  */
144 static int kgdb_do_roundup = 1;
145
146 static int __init opt_nokgdbroundup(char *str)
147 {
148         kgdb_do_roundup = 0;
149
150         return 0;
151 }
152
153 early_param("nokgdbroundup", opt_nokgdbroundup);
154
155 /*
156  * Finally, some KGDB code :-)
157  */
158
159 /*
160  * Weak aliases for breakpoint management,
161  * can be overriden by architectures when needed:
162  */
163 int __weak kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr)
164 {
165         int err;
166
167         err = probe_kernel_read(saved_instr, (char *)addr, BREAK_INSTR_SIZE);
168         if (err)
169                 return err;
170
171         return probe_kernel_write((char *)addr, arch_kgdb_ops.gdb_bpt_instr,
172                                   BREAK_INSTR_SIZE);
173 }
174
175 int __weak kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle)
176 {
177         return probe_kernel_write((char *)addr,
178                                   (char *)bundle, BREAK_INSTR_SIZE);
179 }
180
181 int __weak kgdb_validate_break_address(unsigned long addr)
182 {
183         char tmp_variable[BREAK_INSTR_SIZE];
184         int err;
185         /* Validate setting the breakpoint and then removing it.  In the
186          * remove fails, the kernel needs to emit a bad message because we
187          * are deep trouble not being able to put things back the way we
188          * found them.
189          */
190         err = kgdb_arch_set_breakpoint(addr, tmp_variable);
191         if (err)
192                 return err;
193         err = kgdb_arch_remove_breakpoint(addr, tmp_variable);
194         if (err)
195                 printk(KERN_ERR "KGDB: Critical breakpoint error, kernel "
196                    "memory destroyed at: %lx", addr);
197         return err;
198 }
199
200 unsigned long __weak kgdb_arch_pc(int exception, struct pt_regs *regs)
201 {
202         return instruction_pointer(regs);
203 }
204
205 int __weak kgdb_arch_init(void)
206 {
207         return 0;
208 }
209
210 int __weak kgdb_skipexception(int exception, struct pt_regs *regs)
211 {
212         return 0;
213 }
214
215 /*
216  * Some architectures need cache flushes when we set/clear a
217  * breakpoint:
218  */
219 static void kgdb_flush_swbreak_addr(unsigned long addr)
220 {
221         if (!CACHE_FLUSH_IS_SAFE)
222                 return;
223
224         if (current->mm && current->mm->mmap_cache) {
225                 flush_cache_range(current->mm->mmap_cache,
226                                   addr, addr + BREAK_INSTR_SIZE);
227         }
228         /* Force flush instruction cache if it was outside the mm */
229         flush_icache_range(addr, addr + BREAK_INSTR_SIZE);
230 }
231
232 /*
233  * SW breakpoint management:
234  */
235 int dbg_activate_sw_breakpoints(void)
236 {
237         unsigned long addr;
238         int error;
239         int ret = 0;
240         int i;
241
242         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
243                 if (kgdb_break[i].state != BP_SET)
244                         continue;
245
246                 addr = kgdb_break[i].bpt_addr;
247                 error = kgdb_arch_set_breakpoint(addr,
248                                 kgdb_break[i].saved_instr);
249                 if (error) {
250                         ret = error;
251                         printk(KERN_INFO "KGDB: BP install failed: %lx", addr);
252                         continue;
253                 }
254
255                 kgdb_flush_swbreak_addr(addr);
256                 kgdb_break[i].state = BP_ACTIVE;
257         }
258         return ret;
259 }
260
261 int dbg_set_sw_break(unsigned long addr)
262 {
263         int err = kgdb_validate_break_address(addr);
264         int breakno = -1;
265         int i;
266
267         if (err)
268                 return err;
269
270         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
271                 if ((kgdb_break[i].state == BP_SET) &&
272                                         (kgdb_break[i].bpt_addr == addr))
273                         return -EEXIST;
274         }
275         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
276                 if (kgdb_break[i].state == BP_REMOVED &&
277                                         kgdb_break[i].bpt_addr == addr) {
278                         breakno = i;
279                         break;
280                 }
281         }
282
283         if (breakno == -1) {
284                 for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
285                         if (kgdb_break[i].state == BP_UNDEFINED) {
286                                 breakno = i;
287                                 break;
288                         }
289                 }
290         }
291
292         if (breakno == -1)
293                 return -E2BIG;
294
295         kgdb_break[breakno].state = BP_SET;
296         kgdb_break[breakno].type = BP_BREAKPOINT;
297         kgdb_break[breakno].bpt_addr = addr;
298
299         return 0;
300 }
301
302 int dbg_deactivate_sw_breakpoints(void)
303 {
304         unsigned long addr;
305         int error;
306         int ret = 0;
307         int i;
308
309         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
310                 if (kgdb_break[i].state != BP_ACTIVE)
311                         continue;
312                 addr = kgdb_break[i].bpt_addr;
313                 error = kgdb_arch_remove_breakpoint(addr,
314                                         kgdb_break[i].saved_instr);
315                 if (error) {
316                         printk(KERN_INFO "KGDB: BP remove failed: %lx\n", addr);
317                         ret = error;
318                 }
319
320                 kgdb_flush_swbreak_addr(addr);
321                 kgdb_break[i].state = BP_SET;
322         }
323         return ret;
324 }
325
326 int dbg_remove_sw_break(unsigned long addr)
327 {
328         int i;
329
330         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
331                 if ((kgdb_break[i].state == BP_SET) &&
332                                 (kgdb_break[i].bpt_addr == addr)) {
333                         kgdb_break[i].state = BP_REMOVED;
334                         return 0;
335                 }
336         }
337         return -ENOENT;
338 }
339
340 int kgdb_isremovedbreak(unsigned long addr)
341 {
342         int i;
343
344         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
345                 if ((kgdb_break[i].state == BP_REMOVED) &&
346                                         (kgdb_break[i].bpt_addr == addr))
347                         return 1;
348         }
349         return 0;
350 }
351
352 int dbg_remove_all_break(void)
353 {
354         unsigned long addr;
355         int error;
356         int i;
357
358         /* Clear memory breakpoints. */
359         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
360                 if (kgdb_break[i].state != BP_ACTIVE)
361                         goto setundefined;
362                 addr = kgdb_break[i].bpt_addr;
363                 error = kgdb_arch_remove_breakpoint(addr,
364                                 kgdb_break[i].saved_instr);
365                 if (error)
366                         printk(KERN_ERR "KGDB: breakpoint remove failed: %lx\n",
367                            addr);
368 setundefined:
369                 kgdb_break[i].state = BP_UNDEFINED;
370         }
371
372         /* Clear hardware breakpoints. */
373         if (arch_kgdb_ops.remove_all_hw_break)
374                 arch_kgdb_ops.remove_all_hw_break();
375
376         return 0;
377 }
378
379 /*
380  * Return true if there is a valid kgdb I/O module.  Also if no
381  * debugger is attached a message can be printed to the console about
382  * waiting for the debugger to attach.
383  *
384  * The print_wait argument is only to be true when called from inside
385  * the core kgdb_handle_exception, because it will wait for the
386  * debugger to attach.
387  */
388 static int kgdb_io_ready(int print_wait)
389 {
390         if (!dbg_io_ops)
391                 return 0;
392         if (kgdb_connected)
393                 return 1;
394         if (atomic_read(&kgdb_setting_breakpoint))
395                 return 1;
396         if (print_wait) {
397 #ifdef CONFIG_KGDB_KDB
398                 if (!dbg_kdb_mode)
399                         printk(KERN_CRIT "KGDB: waiting... or $3#33 for KDB\n");
400 #else
401                 printk(KERN_CRIT "KGDB: Waiting for remote debugger\n");
402 #endif
403         }
404         return 1;
405 }
406
407 static int kgdb_reenter_check(struct kgdb_state *ks)
408 {
409         unsigned long addr;
410
411         if (atomic_read(&kgdb_active) != raw_smp_processor_id())
412                 return 0;
413
414         /* Panic on recursive debugger calls: */
415         exception_level++;
416         addr = kgdb_arch_pc(ks->ex_vector, ks->linux_regs);
417         dbg_deactivate_sw_breakpoints();
418
419         /*
420          * If the break point removed ok at the place exception
421          * occurred, try to recover and print a warning to the end
422          * user because the user planted a breakpoint in a place that
423          * KGDB needs in order to function.
424          */
425         if (dbg_remove_sw_break(addr) == 0) {
426                 exception_level = 0;
427                 kgdb_skipexception(ks->ex_vector, ks->linux_regs);
428                 dbg_activate_sw_breakpoints();
429                 printk(KERN_CRIT "KGDB: re-enter error: breakpoint removed %lx\n",
430                         addr);
431                 WARN_ON_ONCE(1);
432
433                 return 1;
434         }
435         dbg_remove_all_break();
436         kgdb_skipexception(ks->ex_vector, ks->linux_regs);
437
438         if (exception_level > 1) {
439                 dump_stack();
440                 panic("Recursive entry to debugger");
441         }
442
443         printk(KERN_CRIT "KGDB: re-enter exception: ALL breakpoints killed\n");
444 #ifdef CONFIG_KGDB_KDB
445         /* Allow kdb to debug itself one level */
446         return 0;
447 #endif
448         dump_stack();
449         panic("Recursive entry to debugger");
450
451         return 1;
452 }
453
454 static void dbg_touch_watchdogs(void)
455 {
456         touch_softlockup_watchdog_sync();
457         clocksource_touch_watchdog();
458         rcu_cpu_stall_reset();
459 }
460
461 static int kgdb_cpu_enter(struct kgdb_state *ks, struct pt_regs *regs,
462                 int exception_state)
463 {
464         unsigned long flags;
465         int sstep_tries = 100;
466         int error;
467         int cpu;
468         int trace_on = 0;
469         int online_cpus = num_online_cpus();
470
471         kgdb_info[ks->cpu].enter_kgdb++;
472         kgdb_info[ks->cpu].exception_state |= exception_state;
473
474         if (exception_state == DCPU_WANT_MASTER)
475                 atomic_inc(&masters_in_kgdb);
476         else
477                 atomic_inc(&slaves_in_kgdb);
478
479         if (arch_kgdb_ops.disable_hw_break)
480                 arch_kgdb_ops.disable_hw_break(regs);
481
482 acquirelock:
483         /*
484          * Interrupts will be restored by the 'trap return' code, except when
485          * single stepping.
486          */
487         local_irq_save(flags);
488
489         cpu = ks->cpu;
490         kgdb_info[cpu].debuggerinfo = regs;
491         kgdb_info[cpu].task = current;
492         kgdb_info[cpu].ret_state = 0;
493         kgdb_info[cpu].irq_depth = hardirq_count() >> HARDIRQ_SHIFT;
494
495         /* Make sure the above info reaches the primary CPU */
496         smp_mb();
497
498         if (exception_level == 1) {
499                 if (raw_spin_trylock(&dbg_master_lock))
500                         atomic_xchg(&kgdb_active, cpu);
501                 goto cpu_master_loop;
502         }
503
504         /*
505          * CPU will loop if it is a slave or request to become a kgdb
506          * master cpu and acquire the kgdb_active lock:
507          */
508         while (1) {
509 cpu_loop:
510                 if (kgdb_info[cpu].exception_state & DCPU_NEXT_MASTER) {
511                         kgdb_info[cpu].exception_state &= ~DCPU_NEXT_MASTER;
512                         goto cpu_master_loop;
513                 } else if (kgdb_info[cpu].exception_state & DCPU_WANT_MASTER) {
514                         if (raw_spin_trylock(&dbg_master_lock)) {
515                                 atomic_xchg(&kgdb_active, cpu);
516                                 break;
517                         }
518                 } else if (kgdb_info[cpu].exception_state & DCPU_IS_SLAVE) {
519                         if (!raw_spin_is_locked(&dbg_slave_lock))
520                                 goto return_normal;
521                 } else {
522 return_normal:
523                         /* Return to normal operation by executing any
524                          * hw breakpoint fixup.
525                          */
526                         if (arch_kgdb_ops.correct_hw_break)
527                                 arch_kgdb_ops.correct_hw_break();
528                         if (trace_on)
529                                 tracing_on();
530                         kgdb_info[cpu].exception_state &=
531                                 ~(DCPU_WANT_MASTER | DCPU_IS_SLAVE);
532                         kgdb_info[cpu].enter_kgdb--;
533                         smp_mb__before_atomic_dec();
534                         atomic_dec(&slaves_in_kgdb);
535                         dbg_touch_watchdogs();
536                         local_irq_restore(flags);
537                         return 0;
538                 }
539                 cpu_relax();
540         }
541
542         /*
543          * For single stepping, try to only enter on the processor
544          * that was single stepping.  To guard against a deadlock, the
545          * kernel will only try for the value of sstep_tries before
546          * giving up and continuing on.
547          */
548         if (atomic_read(&kgdb_cpu_doing_single_step) != -1 &&
549             (kgdb_info[cpu].task &&
550              kgdb_info[cpu].task->pid != kgdb_sstep_pid) && --sstep_tries) {
551                 atomic_set(&kgdb_active, -1);
552                 raw_spin_unlock(&dbg_master_lock);
553                 dbg_touch_watchdogs();
554                 local_irq_restore(flags);
555
556                 goto acquirelock;
557         }
558
559         if (!kgdb_io_ready(1)) {
560                 kgdb_info[cpu].ret_state = 1;
561                 goto kgdb_restore; /* No I/O connection, resume the system */
562         }
563
564         /*
565          * Don't enter if we have hit a removed breakpoint.
566          */
567         if (kgdb_skipexception(ks->ex_vector, ks->linux_regs))
568                 goto kgdb_restore;
569
570         /* Call the I/O driver's pre_exception routine */
571         if (dbg_io_ops->pre_exception)
572                 dbg_io_ops->pre_exception();
573
574         /*
575          * Get the passive CPU lock which will hold all the non-primary
576          * CPU in a spin state while the debugger is active
577          */
578         if (!kgdb_single_step)
579                 raw_spin_lock(&dbg_slave_lock);
580
581 #ifdef CONFIG_SMP
582         /* Signal the other CPUs to enter kgdb_wait() */
583         if ((!kgdb_single_step) && kgdb_do_roundup)
584                 kgdb_roundup_cpus(flags);
585 #endif
586
587         /*
588          * Wait for the other CPUs to be notified and be waiting for us:
589          */
590         while (kgdb_do_roundup && (atomic_read(&masters_in_kgdb) +
591                                 atomic_read(&slaves_in_kgdb)) != online_cpus)
592                 cpu_relax();
593
594         /*
595          * At this point the primary processor is completely
596          * in the debugger and all secondary CPUs are quiescent
597          */
598         dbg_deactivate_sw_breakpoints();
599         kgdb_single_step = 0;
600         kgdb_contthread = current;
601         exception_level = 0;
602         trace_on = tracing_is_on();
603         if (trace_on)
604                 tracing_off();
605
606         while (1) {
607 cpu_master_loop:
608                 if (dbg_kdb_mode) {
609                         kgdb_connected = 1;
610                         error = kdb_stub(ks);
611                         if (error == -1)
612                                 continue;
613                         kgdb_connected = 0;
614                 } else {
615                         error = gdb_serial_stub(ks);
616                 }
617
618                 if (error == DBG_PASS_EVENT) {
619                         dbg_kdb_mode = !dbg_kdb_mode;
620                 } else if (error == DBG_SWITCH_CPU_EVENT) {
621                         kgdb_info[dbg_switch_cpu].exception_state |=
622                                 DCPU_NEXT_MASTER;
623                         goto cpu_loop;
624                 } else {
625                         kgdb_info[cpu].ret_state = error;
626                         break;
627                 }
628         }
629
630         /* Call the I/O driver's post_exception routine */
631         if (dbg_io_ops->post_exception)
632                 dbg_io_ops->post_exception();
633
634         if (!kgdb_single_step) {
635                 raw_spin_unlock(&dbg_slave_lock);
636                 /* Wait till all the CPUs have quit from the debugger. */
637                 while (kgdb_do_roundup && atomic_read(&slaves_in_kgdb))
638                         cpu_relax();
639         }
640
641 kgdb_restore:
642         if (atomic_read(&kgdb_cpu_doing_single_step) != -1) {
643                 int sstep_cpu = atomic_read(&kgdb_cpu_doing_single_step);
644                 if (kgdb_info[sstep_cpu].task)
645                         kgdb_sstep_pid = kgdb_info[sstep_cpu].task->pid;
646                 else
647                         kgdb_sstep_pid = 0;
648         }
649         if (arch_kgdb_ops.correct_hw_break)
650                 arch_kgdb_ops.correct_hw_break();
651         if (trace_on)
652                 tracing_on();
653
654         kgdb_info[cpu].exception_state &=
655                 ~(DCPU_WANT_MASTER | DCPU_IS_SLAVE);
656         kgdb_info[cpu].enter_kgdb--;
657         smp_mb__before_atomic_dec();
658         atomic_dec(&masters_in_kgdb);
659         /* Free kgdb_active */
660         atomic_set(&kgdb_active, -1);
661         raw_spin_unlock(&dbg_master_lock);
662         dbg_touch_watchdogs();
663         local_irq_restore(flags);
664
665         return kgdb_info[cpu].ret_state;
666 }
667
668 /*
669  * kgdb_handle_exception() - main entry point from a kernel exception
670  *
671  * Locking hierarchy:
672  *      interface locks, if any (begin_session)
673  *      kgdb lock (kgdb_active)
674  */
675 int
676 kgdb_handle_exception(int evector, int signo, int ecode, struct pt_regs *regs)
677 {
678         struct kgdb_state kgdb_var;
679         struct kgdb_state *ks = &kgdb_var;
680
681         ks->cpu                 = raw_smp_processor_id();
682         ks->ex_vector           = evector;
683         ks->signo               = signo;
684         ks->err_code            = ecode;
685         ks->kgdb_usethreadid    = 0;
686         ks->linux_regs          = regs;
687
688         if (kgdb_reenter_check(ks))
689                 return 0; /* Ouch, double exception ! */
690         if (kgdb_info[ks->cpu].enter_kgdb != 0)
691                 return 0;
692
693         return kgdb_cpu_enter(ks, regs, DCPU_WANT_MASTER);
694 }
695
696 int kgdb_nmicallback(int cpu, void *regs)
697 {
698 #ifdef CONFIG_SMP
699         struct kgdb_state kgdb_var;
700         struct kgdb_state *ks = &kgdb_var;
701
702         memset(ks, 0, sizeof(struct kgdb_state));
703         ks->cpu                 = cpu;
704         ks->linux_regs          = regs;
705
706         if (kgdb_info[ks->cpu].enter_kgdb == 0 &&
707                         raw_spin_is_locked(&dbg_master_lock)) {
708                 kgdb_cpu_enter(ks, regs, DCPU_IS_SLAVE);
709                 return 0;
710         }
711 #endif
712         return 1;
713 }
714
715 static void kgdb_console_write(struct console *co, const char *s,
716    unsigned count)
717 {
718         unsigned long flags;
719
720         /* If we're debugging, or KGDB has not connected, don't try
721          * and print. */
722         if (!kgdb_connected || atomic_read(&kgdb_active) != -1 || dbg_kdb_mode)
723                 return;
724
725         local_irq_save(flags);
726         gdbstub_msg_write(s, count);
727         local_irq_restore(flags);
728 }
729
730 static struct console kgdbcons = {
731         .name           = "kgdb",
732         .write          = kgdb_console_write,
733         .flags          = CON_PRINTBUFFER | CON_ENABLED,
734         .index          = -1,
735 };
736
737 #ifdef CONFIG_MAGIC_SYSRQ
738 static void sysrq_handle_dbg(int key)
739 {
740         if (!dbg_io_ops) {
741                 printk(KERN_CRIT "ERROR: No KGDB I/O module available\n");
742                 return;
743         }
744         if (!kgdb_connected) {
745 #ifdef CONFIG_KGDB_KDB
746                 if (!dbg_kdb_mode)
747                         printk(KERN_CRIT "KGDB or $3#33 for KDB\n");
748 #else
749                 printk(KERN_CRIT "Entering KGDB\n");
750 #endif
751         }
752
753         kgdb_breakpoint();
754 }
755
756 static struct sysrq_key_op sysrq_dbg_op = {
757         .handler        = sysrq_handle_dbg,
758         .help_msg       = "debug(G)",
759         .action_msg     = "DEBUG",
760 };
761 #endif
762
763 static int kgdb_panic_event(struct notifier_block *self,
764                             unsigned long val,
765                             void *data)
766 {
767         if (dbg_kdb_mode)
768                 kdb_printf("PANIC: %s\n", (char *)data);
769         kgdb_breakpoint();
770         return NOTIFY_DONE;
771 }
772
773 static struct notifier_block kgdb_panic_event_nb = {
774        .notifier_call   = kgdb_panic_event,
775        .priority        = INT_MAX,
776 };
777
778 void __weak kgdb_arch_late(void)
779 {
780 }
781
782 void __init dbg_late_init(void)
783 {
784         dbg_is_early = false;
785         if (kgdb_io_module_registered)
786                 kgdb_arch_late();
787         kdb_init(KDB_INIT_FULL);
788 }
789
790 static int
791 dbg_notify_reboot(struct notifier_block *this, unsigned long code, void *x)
792 {
793         /*
794          * Take the following action on reboot notify depending on value:
795          *    1 == Enter debugger
796          *    0 == [the default] detatch debug client
797          *   -1 == Do nothing... and use this until the board resets
798          */
799         switch (kgdbreboot) {
800         case 1:
801                 kgdb_breakpoint();
802         case -1:
803                 goto done;
804         }
805         if (!dbg_kdb_mode)
806                 gdbstub_exit(code);
807 done:
808         return NOTIFY_DONE;
809 }
810
811 static struct notifier_block dbg_reboot_notifier = {
812         .notifier_call          = dbg_notify_reboot,
813         .next                   = NULL,
814         .priority               = INT_MAX,
815 };
816
817 static void kgdb_register_callbacks(void)
818 {
819         if (!kgdb_io_module_registered) {
820                 kgdb_io_module_registered = 1;
821                 kgdb_arch_init();
822                 if (!dbg_is_early)
823                         kgdb_arch_late();
824                 register_reboot_notifier(&dbg_reboot_notifier);
825                 atomic_notifier_chain_register(&panic_notifier_list,
826                                                &kgdb_panic_event_nb);
827 #ifdef CONFIG_MAGIC_SYSRQ
828                 register_sysrq_key('g', &sysrq_dbg_op);
829 #endif
830                 if (kgdb_use_con && !kgdb_con_registered) {
831                         register_console(&kgdbcons);
832                         kgdb_con_registered = 1;
833                 }
834         }
835 }
836
837 static void kgdb_unregister_callbacks(void)
838 {
839         /*
840          * When this routine is called KGDB should unregister from the
841          * panic handler and clean up, making sure it is not handling any
842          * break exceptions at the time.
843          */
844         if (kgdb_io_module_registered) {
845                 kgdb_io_module_registered = 0;
846                 unregister_reboot_notifier(&dbg_reboot_notifier);
847                 atomic_notifier_chain_unregister(&panic_notifier_list,
848                                                &kgdb_panic_event_nb);
849                 kgdb_arch_exit();
850 #ifdef CONFIG_MAGIC_SYSRQ
851                 unregister_sysrq_key('g', &sysrq_dbg_op);
852 #endif
853                 if (kgdb_con_registered) {
854                         unregister_console(&kgdbcons);
855                         kgdb_con_registered = 0;
856                 }
857         }
858 }
859
860 /*
861  * There are times a tasklet needs to be used vs a compiled in
862  * break point so as to cause an exception outside a kgdb I/O module,
863  * such as is the case with kgdboe, where calling a breakpoint in the
864  * I/O driver itself would be fatal.
865  */
866 static void kgdb_tasklet_bpt(unsigned long ing)
867 {
868         kgdb_breakpoint();
869         atomic_set(&kgdb_break_tasklet_var, 0);
870 }
871
872 static DECLARE_TASKLET(kgdb_tasklet_breakpoint, kgdb_tasklet_bpt, 0);
873
874 void kgdb_schedule_breakpoint(void)
875 {
876         if (atomic_read(&kgdb_break_tasklet_var) ||
877                 atomic_read(&kgdb_active) != -1 ||
878                 atomic_read(&kgdb_setting_breakpoint))
879                 return;
880         atomic_inc(&kgdb_break_tasklet_var);
881         tasklet_schedule(&kgdb_tasklet_breakpoint);
882 }
883 EXPORT_SYMBOL_GPL(kgdb_schedule_breakpoint);
884
885 static void kgdb_initial_breakpoint(void)
886 {
887         kgdb_break_asap = 0;
888
889         printk(KERN_CRIT "kgdb: Waiting for connection from remote gdb...\n");
890         kgdb_breakpoint();
891 }
892
893 /**
894  *      kgdb_register_io_module - register KGDB IO module
895  *      @new_dbg_io_ops: the io ops vector
896  *
897  *      Register it with the KGDB core.
898  */
899 int kgdb_register_io_module(struct kgdb_io *new_dbg_io_ops)
900 {
901         int err;
902
903         spin_lock(&kgdb_registration_lock);
904
905         if (dbg_io_ops) {
906                 spin_unlock(&kgdb_registration_lock);
907
908                 printk(KERN_ERR "kgdb: Another I/O driver is already "
909                                 "registered with KGDB.\n");
910                 return -EBUSY;
911         }
912
913         if (new_dbg_io_ops->init) {
914                 err = new_dbg_io_ops->init();
915                 if (err) {
916                         spin_unlock(&kgdb_registration_lock);
917                         return err;
918                 }
919         }
920
921         dbg_io_ops = new_dbg_io_ops;
922
923         spin_unlock(&kgdb_registration_lock);
924
925         printk(KERN_INFO "kgdb: Registered I/O driver %s.\n",
926                new_dbg_io_ops->name);
927
928         /* Arm KGDB now. */
929         kgdb_register_callbacks();
930
931         if (kgdb_break_asap)
932                 kgdb_initial_breakpoint();
933
934         return 0;
935 }
936 EXPORT_SYMBOL_GPL(kgdb_register_io_module);
937
938 /**
939  *      kkgdb_unregister_io_module - unregister KGDB IO module
940  *      @old_dbg_io_ops: the io ops vector
941  *
942  *      Unregister it with the KGDB core.
943  */
944 void kgdb_unregister_io_module(struct kgdb_io *old_dbg_io_ops)
945 {
946         BUG_ON(kgdb_connected);
947
948         /*
949          * KGDB is no longer able to communicate out, so
950          * unregister our callbacks and reset state.
951          */
952         kgdb_unregister_callbacks();
953
954         spin_lock(&kgdb_registration_lock);
955
956         WARN_ON_ONCE(dbg_io_ops != old_dbg_io_ops);
957         dbg_io_ops = NULL;
958
959         spin_unlock(&kgdb_registration_lock);
960
961         printk(KERN_INFO
962                 "kgdb: Unregistered I/O driver %s, debugger disabled.\n",
963                 old_dbg_io_ops->name);
964 }
965 EXPORT_SYMBOL_GPL(kgdb_unregister_io_module);
966
967 int dbg_io_get_char(void)
968 {
969         int ret = dbg_io_ops->read_char();
970         if (ret == NO_POLL_CHAR)
971                 return -1;
972         if (!dbg_kdb_mode)
973                 return ret;
974         if (ret == 127)
975                 return 8;
976         return ret;
977 }
978
979 /**
980  * kgdb_breakpoint - generate breakpoint exception
981  *
982  * This function will generate a breakpoint exception.  It is used at the
983  * beginning of a program to sync up with a debugger and can be used
984  * otherwise as a quick means to stop program execution and "break" into
985  * the debugger.
986  */
987 void kgdb_breakpoint(void)
988 {
989         atomic_inc(&kgdb_setting_breakpoint);
990         wmb(); /* Sync point before breakpoint */
991         arch_kgdb_breakpoint();
992         wmb(); /* Sync point after breakpoint */
993         atomic_dec(&kgdb_setting_breakpoint);
994 }
995 EXPORT_SYMBOL_GPL(kgdb_breakpoint);
996
997 static int __init opt_kgdb_wait(char *str)
998 {
999         kgdb_break_asap = 1;
1000
1001         kdb_init(KDB_INIT_EARLY);
1002         if (kgdb_io_module_registered)
1003                 kgdb_initial_breakpoint();
1004
1005         return 0;
1006 }
1007
1008 early_param("kgdbwait", opt_kgdb_wait);