xref: /openbmc/linux/kernel/debug/kdb/kdb_main.c (revision dc6a81c3)
1 /*
2  * Kernel Debugger Architecture Independent Main Code
3  *
4  * This file is subject to the terms and conditions of the GNU General Public
5  * License.  See the file "COPYING" in the main directory of this archive
6  * for more details.
7  *
8  * Copyright (C) 1999-2004 Silicon Graphics, Inc.  All Rights Reserved.
9  * Copyright (C) 2000 Stephane Eranian <eranian@hpl.hp.com>
10  * Xscale (R) modifications copyright (C) 2003 Intel Corporation.
11  * Copyright (c) 2009 Wind River Systems, Inc.  All Rights Reserved.
12  */
13 
14 #include <linux/ctype.h>
15 #include <linux/types.h>
16 #include <linux/string.h>
17 #include <linux/kernel.h>
18 #include <linux/kmsg_dump.h>
19 #include <linux/reboot.h>
20 #include <linux/sched.h>
21 #include <linux/sched/loadavg.h>
22 #include <linux/sched/stat.h>
23 #include <linux/sched/debug.h>
24 #include <linux/sysrq.h>
25 #include <linux/smp.h>
26 #include <linux/utsname.h>
27 #include <linux/vmalloc.h>
28 #include <linux/atomic.h>
29 #include <linux/module.h>
30 #include <linux/moduleparam.h>
31 #include <linux/mm.h>
32 #include <linux/init.h>
33 #include <linux/kallsyms.h>
34 #include <linux/kgdb.h>
35 #include <linux/kdb.h>
36 #include <linux/notifier.h>
37 #include <linux/interrupt.h>
38 #include <linux/delay.h>
39 #include <linux/nmi.h>
40 #include <linux/time.h>
41 #include <linux/ptrace.h>
42 #include <linux/sysctl.h>
43 #include <linux/cpu.h>
44 #include <linux/kdebug.h>
45 #include <linux/proc_fs.h>
46 #include <linux/uaccess.h>
47 #include <linux/slab.h>
48 #include "kdb_private.h"
49 
50 #undef	MODULE_PARAM_PREFIX
51 #define	MODULE_PARAM_PREFIX "kdb."
52 
53 static int kdb_cmd_enabled = CONFIG_KDB_DEFAULT_ENABLE;
54 module_param_named(cmd_enable, kdb_cmd_enabled, int, 0600);
55 
56 char kdb_grep_string[KDB_GREP_STRLEN];
57 int kdb_grepping_flag;
58 EXPORT_SYMBOL(kdb_grepping_flag);
59 int kdb_grep_leading;
60 int kdb_grep_trailing;
61 
62 /*
63  * Kernel debugger state flags
64  */
65 int kdb_flags;
66 
67 /*
68  * kdb_lock protects updates to kdb_initial_cpu.  Used to
69  * single thread processors through the kernel debugger.
70  */
71 int kdb_initial_cpu = -1;	/* cpu number that owns kdb */
72 int kdb_nextline = 1;
73 int kdb_state;			/* General KDB state */
74 
75 struct task_struct *kdb_current_task;
76 struct pt_regs *kdb_current_regs;
77 
78 const char *kdb_diemsg;
79 static int kdb_go_count;
80 #ifdef CONFIG_KDB_CONTINUE_CATASTROPHIC
81 static unsigned int kdb_continue_catastrophic =
82 	CONFIG_KDB_CONTINUE_CATASTROPHIC;
83 #else
84 static unsigned int kdb_continue_catastrophic;
85 #endif
86 
87 /* kdb_commands describes the available commands. */
88 static kdbtab_t *kdb_commands;
89 #define KDB_BASE_CMD_MAX 50
90 static int kdb_max_commands = KDB_BASE_CMD_MAX;
91 static kdbtab_t kdb_base_commands[KDB_BASE_CMD_MAX];
92 #define for_each_kdbcmd(cmd, num)					\
93 	for ((cmd) = kdb_base_commands, (num) = 0;			\
94 	     num < kdb_max_commands;					\
95 	     num++, num == KDB_BASE_CMD_MAX ? cmd = kdb_commands : cmd++)
96 
97 typedef struct _kdbmsg {
98 	int	km_diag;	/* kdb diagnostic */
99 	char	*km_msg;	/* Corresponding message text */
100 } kdbmsg_t;
101 
102 #define KDBMSG(msgnum, text) \
103 	{ KDB_##msgnum, text }
104 
105 static kdbmsg_t kdbmsgs[] = {
106 	KDBMSG(NOTFOUND, "Command Not Found"),
107 	KDBMSG(ARGCOUNT, "Improper argument count, see usage."),
108 	KDBMSG(BADWIDTH, "Illegal value for BYTESPERWORD use 1, 2, 4 or 8, "
109 	       "8 is only allowed on 64 bit systems"),
110 	KDBMSG(BADRADIX, "Illegal value for RADIX use 8, 10 or 16"),
111 	KDBMSG(NOTENV, "Cannot find environment variable"),
112 	KDBMSG(NOENVVALUE, "Environment variable should have value"),
113 	KDBMSG(NOTIMP, "Command not implemented"),
114 	KDBMSG(ENVFULL, "Environment full"),
115 	KDBMSG(ENVBUFFULL, "Environment buffer full"),
116 	KDBMSG(TOOMANYBPT, "Too many breakpoints defined"),
117 #ifdef CONFIG_CPU_XSCALE
118 	KDBMSG(TOOMANYDBREGS, "More breakpoints than ibcr registers defined"),
119 #else
120 	KDBMSG(TOOMANYDBREGS, "More breakpoints than db registers defined"),
121 #endif
122 	KDBMSG(DUPBPT, "Duplicate breakpoint address"),
123 	KDBMSG(BPTNOTFOUND, "Breakpoint not found"),
124 	KDBMSG(BADMODE, "Invalid IDMODE"),
125 	KDBMSG(BADINT, "Illegal numeric value"),
126 	KDBMSG(INVADDRFMT, "Invalid symbolic address format"),
127 	KDBMSG(BADREG, "Invalid register name"),
128 	KDBMSG(BADCPUNUM, "Invalid cpu number"),
129 	KDBMSG(BADLENGTH, "Invalid length field"),
130 	KDBMSG(NOBP, "No Breakpoint exists"),
131 	KDBMSG(BADADDR, "Invalid address"),
132 	KDBMSG(NOPERM, "Permission denied"),
133 };
134 #undef KDBMSG
135 
136 static const int __nkdb_err = ARRAY_SIZE(kdbmsgs);
137 
138 
139 /*
140  * Initial environment.   This is all kept static and local to
141  * this file.   We don't want to rely on the memory allocation
142  * mechanisms in the kernel, so we use a very limited allocate-only
143  * heap for new and altered environment variables.  The entire
144  * environment is limited to a fixed number of entries (add more
145  * to __env[] if required) and a fixed amount of heap (add more to
146  * KDB_ENVBUFSIZE if required).
147  */
148 
149 static char *__env[] = {
150 #if defined(CONFIG_SMP)
151  "PROMPT=[%d]kdb> ",
152 #else
153  "PROMPT=kdb> ",
154 #endif
155  "MOREPROMPT=more> ",
156  "RADIX=16",
157  "MDCOUNT=8",			/* lines of md output */
158  KDB_PLATFORM_ENV,
159  "DTABCOUNT=30",
160  "NOSECT=1",
161  (char *)0,
162  (char *)0,
163  (char *)0,
164  (char *)0,
165  (char *)0,
166  (char *)0,
167  (char *)0,
168  (char *)0,
169  (char *)0,
170  (char *)0,
171  (char *)0,
172  (char *)0,
173  (char *)0,
174  (char *)0,
175  (char *)0,
176  (char *)0,
177  (char *)0,
178  (char *)0,
179  (char *)0,
180  (char *)0,
181  (char *)0,
182  (char *)0,
183  (char *)0,
184  (char *)0,
185 };
186 
187 static const int __nenv = ARRAY_SIZE(__env);
188 
189 struct task_struct *kdb_curr_task(int cpu)
190 {
191 	struct task_struct *p = curr_task(cpu);
192 #ifdef	_TIF_MCA_INIT
193 	if ((task_thread_info(p)->flags & _TIF_MCA_INIT) && KDB_TSK(cpu))
194 		p = krp->p;
195 #endif
196 	return p;
197 }
198 
199 /*
200  * Check whether the flags of the current command and the permissions
201  * of the kdb console has allow a command to be run.
202  */
203 static inline bool kdb_check_flags(kdb_cmdflags_t flags, int permissions,
204 				   bool no_args)
205 {
206 	/* permissions comes from userspace so needs massaging slightly */
207 	permissions &= KDB_ENABLE_MASK;
208 	permissions |= KDB_ENABLE_ALWAYS_SAFE;
209 
210 	/* some commands change group when launched with no arguments */
211 	if (no_args)
212 		permissions |= permissions << KDB_ENABLE_NO_ARGS_SHIFT;
213 
214 	flags |= KDB_ENABLE_ALL;
215 
216 	return permissions & flags;
217 }
218 
219 /*
220  * kdbgetenv - This function will return the character string value of
221  *	an environment variable.
222  * Parameters:
223  *	match	A character string representing an environment variable.
224  * Returns:
225  *	NULL	No environment variable matches 'match'
226  *	char*	Pointer to string value of environment variable.
227  */
228 char *kdbgetenv(const char *match)
229 {
230 	char **ep = __env;
231 	int matchlen = strlen(match);
232 	int i;
233 
234 	for (i = 0; i < __nenv; i++) {
235 		char *e = *ep++;
236 
237 		if (!e)
238 			continue;
239 
240 		if ((strncmp(match, e, matchlen) == 0)
241 		 && ((e[matchlen] == '\0')
242 		   || (e[matchlen] == '='))) {
243 			char *cp = strchr(e, '=');
244 			return cp ? ++cp : "";
245 		}
246 	}
247 	return NULL;
248 }
249 
250 /*
251  * kdballocenv - This function is used to allocate bytes for
252  *	environment entries.
253  * Parameters:
254  *	match	A character string representing a numeric value
255  * Outputs:
256  *	*value  the unsigned long representation of the env variable 'match'
257  * Returns:
258  *	Zero on success, a kdb diagnostic on failure.
259  * Remarks:
260  *	We use a static environment buffer (envbuffer) to hold the values
261  *	of dynamically generated environment variables (see kdb_set).  Buffer
262  *	space once allocated is never free'd, so over time, the amount of space
263  *	(currently 512 bytes) will be exhausted if env variables are changed
264  *	frequently.
265  */
266 static char *kdballocenv(size_t bytes)
267 {
268 #define	KDB_ENVBUFSIZE	512
269 	static char envbuffer[KDB_ENVBUFSIZE];
270 	static int envbufsize;
271 	char *ep = NULL;
272 
273 	if ((KDB_ENVBUFSIZE - envbufsize) >= bytes) {
274 		ep = &envbuffer[envbufsize];
275 		envbufsize += bytes;
276 	}
277 	return ep;
278 }
279 
280 /*
281  * kdbgetulenv - This function will return the value of an unsigned
282  *	long-valued environment variable.
283  * Parameters:
284  *	match	A character string representing a numeric value
285  * Outputs:
286  *	*value  the unsigned long represntation of the env variable 'match'
287  * Returns:
288  *	Zero on success, a kdb diagnostic on failure.
289  */
290 static int kdbgetulenv(const char *match, unsigned long *value)
291 {
292 	char *ep;
293 
294 	ep = kdbgetenv(match);
295 	if (!ep)
296 		return KDB_NOTENV;
297 	if (strlen(ep) == 0)
298 		return KDB_NOENVVALUE;
299 
300 	*value = simple_strtoul(ep, NULL, 0);
301 
302 	return 0;
303 }
304 
305 /*
306  * kdbgetintenv - This function will return the value of an
307  *	integer-valued environment variable.
308  * Parameters:
309  *	match	A character string representing an integer-valued env variable
310  * Outputs:
311  *	*value  the integer representation of the environment variable 'match'
312  * Returns:
313  *	Zero on success, a kdb diagnostic on failure.
314  */
315 int kdbgetintenv(const char *match, int *value)
316 {
317 	unsigned long val;
318 	int diag;
319 
320 	diag = kdbgetulenv(match, &val);
321 	if (!diag)
322 		*value = (int) val;
323 	return diag;
324 }
325 
326 /*
327  * kdbgetularg - This function will convert a numeric string into an
328  *	unsigned long value.
329  * Parameters:
330  *	arg	A character string representing a numeric value
331  * Outputs:
332  *	*value  the unsigned long represntation of arg.
333  * Returns:
334  *	Zero on success, a kdb diagnostic on failure.
335  */
336 int kdbgetularg(const char *arg, unsigned long *value)
337 {
338 	char *endp;
339 	unsigned long val;
340 
341 	val = simple_strtoul(arg, &endp, 0);
342 
343 	if (endp == arg) {
344 		/*
345 		 * Also try base 16, for us folks too lazy to type the
346 		 * leading 0x...
347 		 */
348 		val = simple_strtoul(arg, &endp, 16);
349 		if (endp == arg)
350 			return KDB_BADINT;
351 	}
352 
353 	*value = val;
354 
355 	return 0;
356 }
357 
358 int kdbgetu64arg(const char *arg, u64 *value)
359 {
360 	char *endp;
361 	u64 val;
362 
363 	val = simple_strtoull(arg, &endp, 0);
364 
365 	if (endp == arg) {
366 
367 		val = simple_strtoull(arg, &endp, 16);
368 		if (endp == arg)
369 			return KDB_BADINT;
370 	}
371 
372 	*value = val;
373 
374 	return 0;
375 }
376 
377 /*
378  * kdb_set - This function implements the 'set' command.  Alter an
379  *	existing environment variable or create a new one.
380  */
381 int kdb_set(int argc, const char **argv)
382 {
383 	int i;
384 	char *ep;
385 	size_t varlen, vallen;
386 
387 	/*
388 	 * we can be invoked two ways:
389 	 *   set var=value    argv[1]="var", argv[2]="value"
390 	 *   set var = value  argv[1]="var", argv[2]="=", argv[3]="value"
391 	 * - if the latter, shift 'em down.
392 	 */
393 	if (argc == 3) {
394 		argv[2] = argv[3];
395 		argc--;
396 	}
397 
398 	if (argc != 2)
399 		return KDB_ARGCOUNT;
400 
401 	/*
402 	 * Check for internal variables
403 	 */
404 	if (strcmp(argv[1], "KDBDEBUG") == 0) {
405 		unsigned int debugflags;
406 		char *cp;
407 
408 		debugflags = simple_strtoul(argv[2], &cp, 0);
409 		if (cp == argv[2] || debugflags & ~KDB_DEBUG_FLAG_MASK) {
410 			kdb_printf("kdb: illegal debug flags '%s'\n",
411 				    argv[2]);
412 			return 0;
413 		}
414 		kdb_flags = (kdb_flags &
415 			     ~(KDB_DEBUG_FLAG_MASK << KDB_DEBUG_FLAG_SHIFT))
416 			| (debugflags << KDB_DEBUG_FLAG_SHIFT);
417 
418 		return 0;
419 	}
420 
421 	/*
422 	 * Tokenizer squashed the '=' sign.  argv[1] is variable
423 	 * name, argv[2] = value.
424 	 */
425 	varlen = strlen(argv[1]);
426 	vallen = strlen(argv[2]);
427 	ep = kdballocenv(varlen + vallen + 2);
428 	if (ep == (char *)0)
429 		return KDB_ENVBUFFULL;
430 
431 	sprintf(ep, "%s=%s", argv[1], argv[2]);
432 
433 	ep[varlen+vallen+1] = '\0';
434 
435 	for (i = 0; i < __nenv; i++) {
436 		if (__env[i]
437 		 && ((strncmp(__env[i], argv[1], varlen) == 0)
438 		   && ((__env[i][varlen] == '\0')
439 		    || (__env[i][varlen] == '=')))) {
440 			__env[i] = ep;
441 			return 0;
442 		}
443 	}
444 
445 	/*
446 	 * Wasn't existing variable.  Fit into slot.
447 	 */
448 	for (i = 0; i < __nenv-1; i++) {
449 		if (__env[i] == (char *)0) {
450 			__env[i] = ep;
451 			return 0;
452 		}
453 	}
454 
455 	return KDB_ENVFULL;
456 }
457 
458 static int kdb_check_regs(void)
459 {
460 	if (!kdb_current_regs) {
461 		kdb_printf("No current kdb registers."
462 			   "  You may need to select another task\n");
463 		return KDB_BADREG;
464 	}
465 	return 0;
466 }
467 
468 /*
469  * kdbgetaddrarg - This function is responsible for parsing an
470  *	address-expression and returning the value of the expression,
471  *	symbol name, and offset to the caller.
472  *
473  *	The argument may consist of a numeric value (decimal or
474  *	hexidecimal), a symbol name, a register name (preceded by the
475  *	percent sign), an environment variable with a numeric value
476  *	(preceded by a dollar sign) or a simple arithmetic expression
477  *	consisting of a symbol name, +/-, and a numeric constant value
478  *	(offset).
479  * Parameters:
480  *	argc	- count of arguments in argv
481  *	argv	- argument vector
482  *	*nextarg - index to next unparsed argument in argv[]
483  *	regs	- Register state at time of KDB entry
484  * Outputs:
485  *	*value	- receives the value of the address-expression
486  *	*offset - receives the offset specified, if any
487  *	*name   - receives the symbol name, if any
488  *	*nextarg - index to next unparsed argument in argv[]
489  * Returns:
490  *	zero is returned on success, a kdb diagnostic code is
491  *      returned on error.
492  */
493 int kdbgetaddrarg(int argc, const char **argv, int *nextarg,
494 		  unsigned long *value,  long *offset,
495 		  char **name)
496 {
497 	unsigned long addr;
498 	unsigned long off = 0;
499 	int positive;
500 	int diag;
501 	int found = 0;
502 	char *symname;
503 	char symbol = '\0';
504 	char *cp;
505 	kdb_symtab_t symtab;
506 
507 	/*
508 	 * If the enable flags prohibit both arbitrary memory access
509 	 * and flow control then there are no reasonable grounds to
510 	 * provide symbol lookup.
511 	 */
512 	if (!kdb_check_flags(KDB_ENABLE_MEM_READ | KDB_ENABLE_FLOW_CTRL,
513 			     kdb_cmd_enabled, false))
514 		return KDB_NOPERM;
515 
516 	/*
517 	 * Process arguments which follow the following syntax:
518 	 *
519 	 *  symbol | numeric-address [+/- numeric-offset]
520 	 *  %register
521 	 *  $environment-variable
522 	 */
523 
524 	if (*nextarg > argc)
525 		return KDB_ARGCOUNT;
526 
527 	symname = (char *)argv[*nextarg];
528 
529 	/*
530 	 * If there is no whitespace between the symbol
531 	 * or address and the '+' or '-' symbols, we
532 	 * remember the character and replace it with a
533 	 * null so the symbol/value can be properly parsed
534 	 */
535 	cp = strpbrk(symname, "+-");
536 	if (cp != NULL) {
537 		symbol = *cp;
538 		*cp++ = '\0';
539 	}
540 
541 	if (symname[0] == '$') {
542 		diag = kdbgetulenv(&symname[1], &addr);
543 		if (diag)
544 			return diag;
545 	} else if (symname[0] == '%') {
546 		diag = kdb_check_regs();
547 		if (diag)
548 			return diag;
549 		/* Implement register values with % at a later time as it is
550 		 * arch optional.
551 		 */
552 		return KDB_NOTIMP;
553 	} else {
554 		found = kdbgetsymval(symname, &symtab);
555 		if (found) {
556 			addr = symtab.sym_start;
557 		} else {
558 			diag = kdbgetularg(argv[*nextarg], &addr);
559 			if (diag)
560 				return diag;
561 		}
562 	}
563 
564 	if (!found)
565 		found = kdbnearsym(addr, &symtab);
566 
567 	(*nextarg)++;
568 
569 	if (name)
570 		*name = symname;
571 	if (value)
572 		*value = addr;
573 	if (offset && name && *name)
574 		*offset = addr - symtab.sym_start;
575 
576 	if ((*nextarg > argc)
577 	 && (symbol == '\0'))
578 		return 0;
579 
580 	/*
581 	 * check for +/- and offset
582 	 */
583 
584 	if (symbol == '\0') {
585 		if ((argv[*nextarg][0] != '+')
586 		 && (argv[*nextarg][0] != '-')) {
587 			/*
588 			 * Not our argument.  Return.
589 			 */
590 			return 0;
591 		} else {
592 			positive = (argv[*nextarg][0] == '+');
593 			(*nextarg)++;
594 		}
595 	} else
596 		positive = (symbol == '+');
597 
598 	/*
599 	 * Now there must be an offset!
600 	 */
601 	if ((*nextarg > argc)
602 	 && (symbol == '\0')) {
603 		return KDB_INVADDRFMT;
604 	}
605 
606 	if (!symbol) {
607 		cp = (char *)argv[*nextarg];
608 		(*nextarg)++;
609 	}
610 
611 	diag = kdbgetularg(cp, &off);
612 	if (diag)
613 		return diag;
614 
615 	if (!positive)
616 		off = -off;
617 
618 	if (offset)
619 		*offset += off;
620 
621 	if (value)
622 		*value += off;
623 
624 	return 0;
625 }
626 
627 static void kdb_cmderror(int diag)
628 {
629 	int i;
630 
631 	if (diag >= 0) {
632 		kdb_printf("no error detected (diagnostic is %d)\n", diag);
633 		return;
634 	}
635 
636 	for (i = 0; i < __nkdb_err; i++) {
637 		if (kdbmsgs[i].km_diag == diag) {
638 			kdb_printf("diag: %d: %s\n", diag, kdbmsgs[i].km_msg);
639 			return;
640 		}
641 	}
642 
643 	kdb_printf("Unknown diag %d\n", -diag);
644 }
645 
646 /*
647  * kdb_defcmd, kdb_defcmd2 - This function implements the 'defcmd'
648  *	command which defines one command as a set of other commands,
649  *	terminated by endefcmd.  kdb_defcmd processes the initial
650  *	'defcmd' command, kdb_defcmd2 is invoked from kdb_parse for
651  *	the following commands until 'endefcmd'.
652  * Inputs:
653  *	argc	argument count
654  *	argv	argument vector
655  * Returns:
656  *	zero for success, a kdb diagnostic if error
657  */
658 struct defcmd_set {
659 	int count;
660 	bool usable;
661 	char *name;
662 	char *usage;
663 	char *help;
664 	char **command;
665 };
666 static struct defcmd_set *defcmd_set;
667 static int defcmd_set_count;
668 static bool defcmd_in_progress;
669 
670 /* Forward references */
671 static int kdb_exec_defcmd(int argc, const char **argv);
672 
673 static int kdb_defcmd2(const char *cmdstr, const char *argv0)
674 {
675 	struct defcmd_set *s = defcmd_set + defcmd_set_count - 1;
676 	char **save_command = s->command;
677 	if (strcmp(argv0, "endefcmd") == 0) {
678 		defcmd_in_progress = false;
679 		if (!s->count)
680 			s->usable = false;
681 		if (s->usable)
682 			/* macros are always safe because when executed each
683 			 * internal command re-enters kdb_parse() and is
684 			 * safety checked individually.
685 			 */
686 			kdb_register_flags(s->name, kdb_exec_defcmd, s->usage,
687 					   s->help, 0,
688 					   KDB_ENABLE_ALWAYS_SAFE);
689 		return 0;
690 	}
691 	if (!s->usable)
692 		return KDB_NOTIMP;
693 	s->command = kcalloc(s->count + 1, sizeof(*(s->command)), GFP_KDB);
694 	if (!s->command) {
695 		kdb_printf("Could not allocate new kdb_defcmd table for %s\n",
696 			   cmdstr);
697 		s->usable = false;
698 		return KDB_NOTIMP;
699 	}
700 	memcpy(s->command, save_command, s->count * sizeof(*(s->command)));
701 	s->command[s->count++] = kdb_strdup(cmdstr, GFP_KDB);
702 	kfree(save_command);
703 	return 0;
704 }
705 
706 static int kdb_defcmd(int argc, const char **argv)
707 {
708 	struct defcmd_set *save_defcmd_set = defcmd_set, *s;
709 	if (defcmd_in_progress) {
710 		kdb_printf("kdb: nested defcmd detected, assuming missing "
711 			   "endefcmd\n");
712 		kdb_defcmd2("endefcmd", "endefcmd");
713 	}
714 	if (argc == 0) {
715 		int i;
716 		for (s = defcmd_set; s < defcmd_set + defcmd_set_count; ++s) {
717 			kdb_printf("defcmd %s \"%s\" \"%s\"\n", s->name,
718 				   s->usage, s->help);
719 			for (i = 0; i < s->count; ++i)
720 				kdb_printf("%s", s->command[i]);
721 			kdb_printf("endefcmd\n");
722 		}
723 		return 0;
724 	}
725 	if (argc != 3)
726 		return KDB_ARGCOUNT;
727 	if (in_dbg_master()) {
728 		kdb_printf("Command only available during kdb_init()\n");
729 		return KDB_NOTIMP;
730 	}
731 	defcmd_set = kmalloc_array(defcmd_set_count + 1, sizeof(*defcmd_set),
732 				   GFP_KDB);
733 	if (!defcmd_set)
734 		goto fail_defcmd;
735 	memcpy(defcmd_set, save_defcmd_set,
736 	       defcmd_set_count * sizeof(*defcmd_set));
737 	s = defcmd_set + defcmd_set_count;
738 	memset(s, 0, sizeof(*s));
739 	s->usable = true;
740 	s->name = kdb_strdup(argv[1], GFP_KDB);
741 	if (!s->name)
742 		goto fail_name;
743 	s->usage = kdb_strdup(argv[2], GFP_KDB);
744 	if (!s->usage)
745 		goto fail_usage;
746 	s->help = kdb_strdup(argv[3], GFP_KDB);
747 	if (!s->help)
748 		goto fail_help;
749 	if (s->usage[0] == '"') {
750 		strcpy(s->usage, argv[2]+1);
751 		s->usage[strlen(s->usage)-1] = '\0';
752 	}
753 	if (s->help[0] == '"') {
754 		strcpy(s->help, argv[3]+1);
755 		s->help[strlen(s->help)-1] = '\0';
756 	}
757 	++defcmd_set_count;
758 	defcmd_in_progress = true;
759 	kfree(save_defcmd_set);
760 	return 0;
761 fail_help:
762 	kfree(s->usage);
763 fail_usage:
764 	kfree(s->name);
765 fail_name:
766 	kfree(defcmd_set);
767 fail_defcmd:
768 	kdb_printf("Could not allocate new defcmd_set entry for %s\n", argv[1]);
769 	defcmd_set = save_defcmd_set;
770 	return KDB_NOTIMP;
771 }
772 
773 /*
774  * kdb_exec_defcmd - Execute the set of commands associated with this
775  *	defcmd name.
776  * Inputs:
777  *	argc	argument count
778  *	argv	argument vector
779  * Returns:
780  *	zero for success, a kdb diagnostic if error
781  */
782 static int kdb_exec_defcmd(int argc, const char **argv)
783 {
784 	int i, ret;
785 	struct defcmd_set *s;
786 	if (argc != 0)
787 		return KDB_ARGCOUNT;
788 	for (s = defcmd_set, i = 0; i < defcmd_set_count; ++i, ++s) {
789 		if (strcmp(s->name, argv[0]) == 0)
790 			break;
791 	}
792 	if (i == defcmd_set_count) {
793 		kdb_printf("kdb_exec_defcmd: could not find commands for %s\n",
794 			   argv[0]);
795 		return KDB_NOTIMP;
796 	}
797 	for (i = 0; i < s->count; ++i) {
798 		/* Recursive use of kdb_parse, do not use argv after
799 		 * this point */
800 		argv = NULL;
801 		kdb_printf("[%s]kdb> %s\n", s->name, s->command[i]);
802 		ret = kdb_parse(s->command[i]);
803 		if (ret)
804 			return ret;
805 	}
806 	return 0;
807 }
808 
809 /* Command history */
810 #define KDB_CMD_HISTORY_COUNT	32
811 #define CMD_BUFLEN		200	/* kdb_printf: max printline
812 					 * size == 256 */
813 static unsigned int cmd_head, cmd_tail;
814 static unsigned int cmdptr;
815 static char cmd_hist[KDB_CMD_HISTORY_COUNT][CMD_BUFLEN];
816 static char cmd_cur[CMD_BUFLEN];
817 
818 /*
819  * The "str" argument may point to something like  | grep xyz
820  */
821 static void parse_grep(const char *str)
822 {
823 	int	len;
824 	char	*cp = (char *)str, *cp2;
825 
826 	/* sanity check: we should have been called with the \ first */
827 	if (*cp != '|')
828 		return;
829 	cp++;
830 	while (isspace(*cp))
831 		cp++;
832 	if (!str_has_prefix(cp, "grep ")) {
833 		kdb_printf("invalid 'pipe', see grephelp\n");
834 		return;
835 	}
836 	cp += 5;
837 	while (isspace(*cp))
838 		cp++;
839 	cp2 = strchr(cp, '\n');
840 	if (cp2)
841 		*cp2 = '\0'; /* remove the trailing newline */
842 	len = strlen(cp);
843 	if (len == 0) {
844 		kdb_printf("invalid 'pipe', see grephelp\n");
845 		return;
846 	}
847 	/* now cp points to a nonzero length search string */
848 	if (*cp == '"') {
849 		/* allow it be "x y z" by removing the "'s - there must
850 		   be two of them */
851 		cp++;
852 		cp2 = strchr(cp, '"');
853 		if (!cp2) {
854 			kdb_printf("invalid quoted string, see grephelp\n");
855 			return;
856 		}
857 		*cp2 = '\0'; /* end the string where the 2nd " was */
858 	}
859 	kdb_grep_leading = 0;
860 	if (*cp == '^') {
861 		kdb_grep_leading = 1;
862 		cp++;
863 	}
864 	len = strlen(cp);
865 	kdb_grep_trailing = 0;
866 	if (*(cp+len-1) == '$') {
867 		kdb_grep_trailing = 1;
868 		*(cp+len-1) = '\0';
869 	}
870 	len = strlen(cp);
871 	if (!len)
872 		return;
873 	if (len >= KDB_GREP_STRLEN) {
874 		kdb_printf("search string too long\n");
875 		return;
876 	}
877 	strcpy(kdb_grep_string, cp);
878 	kdb_grepping_flag++;
879 	return;
880 }
881 
882 /*
883  * kdb_parse - Parse the command line, search the command table for a
884  *	matching command and invoke the command function.  This
885  *	function may be called recursively, if it is, the second call
886  *	will overwrite argv and cbuf.  It is the caller's
887  *	responsibility to save their argv if they recursively call
888  *	kdb_parse().
889  * Parameters:
890  *      cmdstr	The input command line to be parsed.
891  *	regs	The registers at the time kdb was entered.
892  * Returns:
893  *	Zero for success, a kdb diagnostic if failure.
894  * Remarks:
895  *	Limited to 20 tokens.
896  *
897  *	Real rudimentary tokenization. Basically only whitespace
898  *	is considered a token delimeter (but special consideration
899  *	is taken of the '=' sign as used by the 'set' command).
900  *
901  *	The algorithm used to tokenize the input string relies on
902  *	there being at least one whitespace (or otherwise useless)
903  *	character between tokens as the character immediately following
904  *	the token is altered in-place to a null-byte to terminate the
905  *	token string.
906  */
907 
908 #define MAXARGC	20
909 
910 int kdb_parse(const char *cmdstr)
911 {
912 	static char *argv[MAXARGC];
913 	static int argc;
914 	static char cbuf[CMD_BUFLEN+2];
915 	char *cp;
916 	char *cpp, quoted;
917 	kdbtab_t *tp;
918 	int i, escaped, ignore_errors = 0, check_grep = 0;
919 
920 	/*
921 	 * First tokenize the command string.
922 	 */
923 	cp = (char *)cmdstr;
924 
925 	if (KDB_FLAG(CMD_INTERRUPT)) {
926 		/* Previous command was interrupted, newline must not
927 		 * repeat the command */
928 		KDB_FLAG_CLEAR(CMD_INTERRUPT);
929 		KDB_STATE_SET(PAGER);
930 		argc = 0;	/* no repeat */
931 	}
932 
933 	if (*cp != '\n' && *cp != '\0') {
934 		argc = 0;
935 		cpp = cbuf;
936 		while (*cp) {
937 			/* skip whitespace */
938 			while (isspace(*cp))
939 				cp++;
940 			if ((*cp == '\0') || (*cp == '\n') ||
941 			    (*cp == '#' && !defcmd_in_progress))
942 				break;
943 			/* special case: check for | grep pattern */
944 			if (*cp == '|') {
945 				check_grep++;
946 				break;
947 			}
948 			if (cpp >= cbuf + CMD_BUFLEN) {
949 				kdb_printf("kdb_parse: command buffer "
950 					   "overflow, command ignored\n%s\n",
951 					   cmdstr);
952 				return KDB_NOTFOUND;
953 			}
954 			if (argc >= MAXARGC - 1) {
955 				kdb_printf("kdb_parse: too many arguments, "
956 					   "command ignored\n%s\n", cmdstr);
957 				return KDB_NOTFOUND;
958 			}
959 			argv[argc++] = cpp;
960 			escaped = 0;
961 			quoted = '\0';
962 			/* Copy to next unquoted and unescaped
963 			 * whitespace or '=' */
964 			while (*cp && *cp != '\n' &&
965 			       (escaped || quoted || !isspace(*cp))) {
966 				if (cpp >= cbuf + CMD_BUFLEN)
967 					break;
968 				if (escaped) {
969 					escaped = 0;
970 					*cpp++ = *cp++;
971 					continue;
972 				}
973 				if (*cp == '\\') {
974 					escaped = 1;
975 					++cp;
976 					continue;
977 				}
978 				if (*cp == quoted)
979 					quoted = '\0';
980 				else if (*cp == '\'' || *cp == '"')
981 					quoted = *cp;
982 				*cpp = *cp++;
983 				if (*cpp == '=' && !quoted)
984 					break;
985 				++cpp;
986 			}
987 			*cpp++ = '\0';	/* Squash a ws or '=' character */
988 		}
989 	}
990 	if (!argc)
991 		return 0;
992 	if (check_grep)
993 		parse_grep(cp);
994 	if (defcmd_in_progress) {
995 		int result = kdb_defcmd2(cmdstr, argv[0]);
996 		if (!defcmd_in_progress) {
997 			argc = 0;	/* avoid repeat on endefcmd */
998 			*(argv[0]) = '\0';
999 		}
1000 		return result;
1001 	}
1002 	if (argv[0][0] == '-' && argv[0][1] &&
1003 	    (argv[0][1] < '0' || argv[0][1] > '9')) {
1004 		ignore_errors = 1;
1005 		++argv[0];
1006 	}
1007 
1008 	for_each_kdbcmd(tp, i) {
1009 		if (tp->cmd_name) {
1010 			/*
1011 			 * If this command is allowed to be abbreviated,
1012 			 * check to see if this is it.
1013 			 */
1014 
1015 			if (tp->cmd_minlen
1016 			 && (strlen(argv[0]) <= tp->cmd_minlen)) {
1017 				if (strncmp(argv[0],
1018 					    tp->cmd_name,
1019 					    tp->cmd_minlen) == 0) {
1020 					break;
1021 				}
1022 			}
1023 
1024 			if (strcmp(argv[0], tp->cmd_name) == 0)
1025 				break;
1026 		}
1027 	}
1028 
1029 	/*
1030 	 * If we don't find a command by this name, see if the first
1031 	 * few characters of this match any of the known commands.
1032 	 * e.g., md1c20 should match md.
1033 	 */
1034 	if (i == kdb_max_commands) {
1035 		for_each_kdbcmd(tp, i) {
1036 			if (tp->cmd_name) {
1037 				if (strncmp(argv[0],
1038 					    tp->cmd_name,
1039 					    strlen(tp->cmd_name)) == 0) {
1040 					break;
1041 				}
1042 			}
1043 		}
1044 	}
1045 
1046 	if (i < kdb_max_commands) {
1047 		int result;
1048 
1049 		if (!kdb_check_flags(tp->cmd_flags, kdb_cmd_enabled, argc <= 1))
1050 			return KDB_NOPERM;
1051 
1052 		KDB_STATE_SET(CMD);
1053 		result = (*tp->cmd_func)(argc-1, (const char **)argv);
1054 		if (result && ignore_errors && result > KDB_CMD_GO)
1055 			result = 0;
1056 		KDB_STATE_CLEAR(CMD);
1057 
1058 		if (tp->cmd_flags & KDB_REPEAT_WITH_ARGS)
1059 			return result;
1060 
1061 		argc = tp->cmd_flags & KDB_REPEAT_NO_ARGS ? 1 : 0;
1062 		if (argv[argc])
1063 			*(argv[argc]) = '\0';
1064 		return result;
1065 	}
1066 
1067 	/*
1068 	 * If the input with which we were presented does not
1069 	 * map to an existing command, attempt to parse it as an
1070 	 * address argument and display the result.   Useful for
1071 	 * obtaining the address of a variable, or the nearest symbol
1072 	 * to an address contained in a register.
1073 	 */
1074 	{
1075 		unsigned long value;
1076 		char *name = NULL;
1077 		long offset;
1078 		int nextarg = 0;
1079 
1080 		if (kdbgetaddrarg(0, (const char **)argv, &nextarg,
1081 				  &value, &offset, &name)) {
1082 			return KDB_NOTFOUND;
1083 		}
1084 
1085 		kdb_printf("%s = ", argv[0]);
1086 		kdb_symbol_print(value, NULL, KDB_SP_DEFAULT);
1087 		kdb_printf("\n");
1088 		return 0;
1089 	}
1090 }
1091 
1092 
1093 static int handle_ctrl_cmd(char *cmd)
1094 {
1095 #define CTRL_P	16
1096 #define CTRL_N	14
1097 
1098 	/* initial situation */
1099 	if (cmd_head == cmd_tail)
1100 		return 0;
1101 	switch (*cmd) {
1102 	case CTRL_P:
1103 		if (cmdptr != cmd_tail)
1104 			cmdptr = (cmdptr-1) % KDB_CMD_HISTORY_COUNT;
1105 		strncpy(cmd_cur, cmd_hist[cmdptr], CMD_BUFLEN);
1106 		return 1;
1107 	case CTRL_N:
1108 		if (cmdptr != cmd_head)
1109 			cmdptr = (cmdptr+1) % KDB_CMD_HISTORY_COUNT;
1110 		strncpy(cmd_cur, cmd_hist[cmdptr], CMD_BUFLEN);
1111 		return 1;
1112 	}
1113 	return 0;
1114 }
1115 
1116 /*
1117  * kdb_reboot - This function implements the 'reboot' command.  Reboot
1118  *	the system immediately, or loop for ever on failure.
1119  */
1120 static int kdb_reboot(int argc, const char **argv)
1121 {
1122 	emergency_restart();
1123 	kdb_printf("Hmm, kdb_reboot did not reboot, spinning here\n");
1124 	while (1)
1125 		cpu_relax();
1126 	/* NOTREACHED */
1127 	return 0;
1128 }
1129 
1130 static void kdb_dumpregs(struct pt_regs *regs)
1131 {
1132 	int old_lvl = console_loglevel;
1133 	console_loglevel = CONSOLE_LOGLEVEL_MOTORMOUTH;
1134 	kdb_trap_printk++;
1135 	show_regs(regs);
1136 	kdb_trap_printk--;
1137 	kdb_printf("\n");
1138 	console_loglevel = old_lvl;
1139 }
1140 
1141 static void kdb_set_current_task(struct task_struct *p)
1142 {
1143 	kdb_current_task = p;
1144 
1145 	if (kdb_task_has_cpu(p)) {
1146 		kdb_current_regs = KDB_TSKREGS(kdb_process_cpu(p));
1147 		return;
1148 	}
1149 	kdb_current_regs = NULL;
1150 }
1151 
1152 static void drop_newline(char *buf)
1153 {
1154 	size_t len = strlen(buf);
1155 
1156 	if (len == 0)
1157 		return;
1158 	if (*(buf + len - 1) == '\n')
1159 		*(buf + len - 1) = '\0';
1160 }
1161 
1162 /*
1163  * kdb_local - The main code for kdb.  This routine is invoked on a
1164  *	specific processor, it is not global.  The main kdb() routine
1165  *	ensures that only one processor at a time is in this routine.
1166  *	This code is called with the real reason code on the first
1167  *	entry to a kdb session, thereafter it is called with reason
1168  *	SWITCH, even if the user goes back to the original cpu.
1169  * Inputs:
1170  *	reason		The reason KDB was invoked
1171  *	error		The hardware-defined error code
1172  *	regs		The exception frame at time of fault/breakpoint.
1173  *	db_result	Result code from the break or debug point.
1174  * Returns:
1175  *	0	KDB was invoked for an event which it wasn't responsible
1176  *	1	KDB handled the event for which it was invoked.
1177  *	KDB_CMD_GO	User typed 'go'.
1178  *	KDB_CMD_CPU	User switched to another cpu.
1179  *	KDB_CMD_SS	Single step.
1180  */
1181 static int kdb_local(kdb_reason_t reason, int error, struct pt_regs *regs,
1182 		     kdb_dbtrap_t db_result)
1183 {
1184 	char *cmdbuf;
1185 	int diag;
1186 	struct task_struct *kdb_current =
1187 		kdb_curr_task(raw_smp_processor_id());
1188 
1189 	KDB_DEBUG_STATE("kdb_local 1", reason);
1190 	kdb_go_count = 0;
1191 	if (reason == KDB_REASON_DEBUG) {
1192 		/* special case below */
1193 	} else {
1194 		kdb_printf("\nEntering kdb (current=0x%px, pid %d) ",
1195 			   kdb_current, kdb_current ? kdb_current->pid : 0);
1196 #if defined(CONFIG_SMP)
1197 		kdb_printf("on processor %d ", raw_smp_processor_id());
1198 #endif
1199 	}
1200 
1201 	switch (reason) {
1202 	case KDB_REASON_DEBUG:
1203 	{
1204 		/*
1205 		 * If re-entering kdb after a single step
1206 		 * command, don't print the message.
1207 		 */
1208 		switch (db_result) {
1209 		case KDB_DB_BPT:
1210 			kdb_printf("\nEntering kdb (0x%px, pid %d) ",
1211 				   kdb_current, kdb_current->pid);
1212 #if defined(CONFIG_SMP)
1213 			kdb_printf("on processor %d ", raw_smp_processor_id());
1214 #endif
1215 			kdb_printf("due to Debug @ " kdb_machreg_fmt "\n",
1216 				   instruction_pointer(regs));
1217 			break;
1218 		case KDB_DB_SS:
1219 			break;
1220 		case KDB_DB_SSBPT:
1221 			KDB_DEBUG_STATE("kdb_local 4", reason);
1222 			return 1;	/* kdba_db_trap did the work */
1223 		default:
1224 			kdb_printf("kdb: Bad result from kdba_db_trap: %d\n",
1225 				   db_result);
1226 			break;
1227 		}
1228 
1229 	}
1230 		break;
1231 	case KDB_REASON_ENTER:
1232 		if (KDB_STATE(KEYBOARD))
1233 			kdb_printf("due to Keyboard Entry\n");
1234 		else
1235 			kdb_printf("due to KDB_ENTER()\n");
1236 		break;
1237 	case KDB_REASON_KEYBOARD:
1238 		KDB_STATE_SET(KEYBOARD);
1239 		kdb_printf("due to Keyboard Entry\n");
1240 		break;
1241 	case KDB_REASON_ENTER_SLAVE:
1242 		/* drop through, slaves only get released via cpu switch */
1243 	case KDB_REASON_SWITCH:
1244 		kdb_printf("due to cpu switch\n");
1245 		break;
1246 	case KDB_REASON_OOPS:
1247 		kdb_printf("Oops: %s\n", kdb_diemsg);
1248 		kdb_printf("due to oops @ " kdb_machreg_fmt "\n",
1249 			   instruction_pointer(regs));
1250 		kdb_dumpregs(regs);
1251 		break;
1252 	case KDB_REASON_SYSTEM_NMI:
1253 		kdb_printf("due to System NonMaskable Interrupt\n");
1254 		break;
1255 	case KDB_REASON_NMI:
1256 		kdb_printf("due to NonMaskable Interrupt @ "
1257 			   kdb_machreg_fmt "\n",
1258 			   instruction_pointer(regs));
1259 		break;
1260 	case KDB_REASON_SSTEP:
1261 	case KDB_REASON_BREAK:
1262 		kdb_printf("due to %s @ " kdb_machreg_fmt "\n",
1263 			   reason == KDB_REASON_BREAK ?
1264 			   "Breakpoint" : "SS trap", instruction_pointer(regs));
1265 		/*
1266 		 * Determine if this breakpoint is one that we
1267 		 * are interested in.
1268 		 */
1269 		if (db_result != KDB_DB_BPT) {
1270 			kdb_printf("kdb: error return from kdba_bp_trap: %d\n",
1271 				   db_result);
1272 			KDB_DEBUG_STATE("kdb_local 6", reason);
1273 			return 0;	/* Not for us, dismiss it */
1274 		}
1275 		break;
1276 	case KDB_REASON_RECURSE:
1277 		kdb_printf("due to Recursion @ " kdb_machreg_fmt "\n",
1278 			   instruction_pointer(regs));
1279 		break;
1280 	default:
1281 		kdb_printf("kdb: unexpected reason code: %d\n", reason);
1282 		KDB_DEBUG_STATE("kdb_local 8", reason);
1283 		return 0;	/* Not for us, dismiss it */
1284 	}
1285 
1286 	while (1) {
1287 		/*
1288 		 * Initialize pager context.
1289 		 */
1290 		kdb_nextline = 1;
1291 		KDB_STATE_CLEAR(SUPPRESS);
1292 		kdb_grepping_flag = 0;
1293 		/* ensure the old search does not leak into '/' commands */
1294 		kdb_grep_string[0] = '\0';
1295 
1296 		cmdbuf = cmd_cur;
1297 		*cmdbuf = '\0';
1298 		*(cmd_hist[cmd_head]) = '\0';
1299 
1300 do_full_getstr:
1301 #if defined(CONFIG_SMP)
1302 		snprintf(kdb_prompt_str, CMD_BUFLEN, kdbgetenv("PROMPT"),
1303 			 raw_smp_processor_id());
1304 #else
1305 		snprintf(kdb_prompt_str, CMD_BUFLEN, kdbgetenv("PROMPT"));
1306 #endif
1307 		if (defcmd_in_progress)
1308 			strncat(kdb_prompt_str, "[defcmd]", CMD_BUFLEN);
1309 
1310 		/*
1311 		 * Fetch command from keyboard
1312 		 */
1313 		cmdbuf = kdb_getstr(cmdbuf, CMD_BUFLEN, kdb_prompt_str);
1314 		if (*cmdbuf != '\n') {
1315 			if (*cmdbuf < 32) {
1316 				if (cmdptr == cmd_head) {
1317 					strncpy(cmd_hist[cmd_head], cmd_cur,
1318 						CMD_BUFLEN);
1319 					*(cmd_hist[cmd_head] +
1320 					  strlen(cmd_hist[cmd_head])-1) = '\0';
1321 				}
1322 				if (!handle_ctrl_cmd(cmdbuf))
1323 					*(cmd_cur+strlen(cmd_cur)-1) = '\0';
1324 				cmdbuf = cmd_cur;
1325 				goto do_full_getstr;
1326 			} else {
1327 				strncpy(cmd_hist[cmd_head], cmd_cur,
1328 					CMD_BUFLEN);
1329 			}
1330 
1331 			cmd_head = (cmd_head+1) % KDB_CMD_HISTORY_COUNT;
1332 			if (cmd_head == cmd_tail)
1333 				cmd_tail = (cmd_tail+1) % KDB_CMD_HISTORY_COUNT;
1334 		}
1335 
1336 		cmdptr = cmd_head;
1337 		diag = kdb_parse(cmdbuf);
1338 		if (diag == KDB_NOTFOUND) {
1339 			drop_newline(cmdbuf);
1340 			kdb_printf("Unknown kdb command: '%s'\n", cmdbuf);
1341 			diag = 0;
1342 		}
1343 		if (diag == KDB_CMD_GO
1344 		 || diag == KDB_CMD_CPU
1345 		 || diag == KDB_CMD_SS
1346 		 || diag == KDB_CMD_KGDB)
1347 			break;
1348 
1349 		if (diag)
1350 			kdb_cmderror(diag);
1351 	}
1352 	KDB_DEBUG_STATE("kdb_local 9", diag);
1353 	return diag;
1354 }
1355 
1356 
1357 /*
1358  * kdb_print_state - Print the state data for the current processor
1359  *	for debugging.
1360  * Inputs:
1361  *	text		Identifies the debug point
1362  *	value		Any integer value to be printed, e.g. reason code.
1363  */
1364 void kdb_print_state(const char *text, int value)
1365 {
1366 	kdb_printf("state: %s cpu %d value %d initial %d state %x\n",
1367 		   text, raw_smp_processor_id(), value, kdb_initial_cpu,
1368 		   kdb_state);
1369 }
1370 
1371 /*
1372  * kdb_main_loop - After initial setup and assignment of the
1373  *	controlling cpu, all cpus are in this loop.  One cpu is in
1374  *	control and will issue the kdb prompt, the others will spin
1375  *	until 'go' or cpu switch.
1376  *
1377  *	To get a consistent view of the kernel stacks for all
1378  *	processes, this routine is invoked from the main kdb code via
1379  *	an architecture specific routine.  kdba_main_loop is
1380  *	responsible for making the kernel stacks consistent for all
1381  *	processes, there should be no difference between a blocked
1382  *	process and a running process as far as kdb is concerned.
1383  * Inputs:
1384  *	reason		The reason KDB was invoked
1385  *	error		The hardware-defined error code
1386  *	reason2		kdb's current reason code.
1387  *			Initially error but can change
1388  *			according to kdb state.
1389  *	db_result	Result code from break or debug point.
1390  *	regs		The exception frame at time of fault/breakpoint.
1391  *			should always be valid.
1392  * Returns:
1393  *	0	KDB was invoked for an event which it wasn't responsible
1394  *	1	KDB handled the event for which it was invoked.
1395  */
1396 int kdb_main_loop(kdb_reason_t reason, kdb_reason_t reason2, int error,
1397 	      kdb_dbtrap_t db_result, struct pt_regs *regs)
1398 {
1399 	int result = 1;
1400 	/* Stay in kdb() until 'go', 'ss[b]' or an error */
1401 	while (1) {
1402 		/*
1403 		 * All processors except the one that is in control
1404 		 * will spin here.
1405 		 */
1406 		KDB_DEBUG_STATE("kdb_main_loop 1", reason);
1407 		while (KDB_STATE(HOLD_CPU)) {
1408 			/* state KDB is turned off by kdb_cpu to see if the
1409 			 * other cpus are still live, each cpu in this loop
1410 			 * turns it back on.
1411 			 */
1412 			if (!KDB_STATE(KDB))
1413 				KDB_STATE_SET(KDB);
1414 		}
1415 
1416 		KDB_STATE_CLEAR(SUPPRESS);
1417 		KDB_DEBUG_STATE("kdb_main_loop 2", reason);
1418 		if (KDB_STATE(LEAVING))
1419 			break;	/* Another cpu said 'go' */
1420 		/* Still using kdb, this processor is in control */
1421 		result = kdb_local(reason2, error, regs, db_result);
1422 		KDB_DEBUG_STATE("kdb_main_loop 3", result);
1423 
1424 		if (result == KDB_CMD_CPU)
1425 			break;
1426 
1427 		if (result == KDB_CMD_SS) {
1428 			KDB_STATE_SET(DOING_SS);
1429 			break;
1430 		}
1431 
1432 		if (result == KDB_CMD_KGDB) {
1433 			if (!KDB_STATE(DOING_KGDB))
1434 				kdb_printf("Entering please attach debugger "
1435 					   "or use $D#44+ or $3#33\n");
1436 			break;
1437 		}
1438 		if (result && result != 1 && result != KDB_CMD_GO)
1439 			kdb_printf("\nUnexpected kdb_local return code %d\n",
1440 				   result);
1441 		KDB_DEBUG_STATE("kdb_main_loop 4", reason);
1442 		break;
1443 	}
1444 	if (KDB_STATE(DOING_SS))
1445 		KDB_STATE_CLEAR(SSBPT);
1446 
1447 	/* Clean up any keyboard devices before leaving */
1448 	kdb_kbd_cleanup_state();
1449 
1450 	return result;
1451 }
1452 
1453 /*
1454  * kdb_mdr - This function implements the guts of the 'mdr', memory
1455  * read command.
1456  *	mdr  <addr arg>,<byte count>
1457  * Inputs:
1458  *	addr	Start address
1459  *	count	Number of bytes
1460  * Returns:
1461  *	Always 0.  Any errors are detected and printed by kdb_getarea.
1462  */
1463 static int kdb_mdr(unsigned long addr, unsigned int count)
1464 {
1465 	unsigned char c;
1466 	while (count--) {
1467 		if (kdb_getarea(c, addr))
1468 			return 0;
1469 		kdb_printf("%02x", c);
1470 		addr++;
1471 	}
1472 	kdb_printf("\n");
1473 	return 0;
1474 }
1475 
1476 /*
1477  * kdb_md - This function implements the 'md', 'md1', 'md2', 'md4',
1478  *	'md8' 'mdr' and 'mds' commands.
1479  *
1480  *	md|mds  [<addr arg> [<line count> [<radix>]]]
1481  *	mdWcN	[<addr arg> [<line count> [<radix>]]]
1482  *		where W = is the width (1, 2, 4 or 8) and N is the count.
1483  *		for eg., md1c20 reads 20 bytes, 1 at a time.
1484  *	mdr  <addr arg>,<byte count>
1485  */
1486 static void kdb_md_line(const char *fmtstr, unsigned long addr,
1487 			int symbolic, int nosect, int bytesperword,
1488 			int num, int repeat, int phys)
1489 {
1490 	/* print just one line of data */
1491 	kdb_symtab_t symtab;
1492 	char cbuf[32];
1493 	char *c = cbuf;
1494 	int i;
1495 	int j;
1496 	unsigned long word;
1497 
1498 	memset(cbuf, '\0', sizeof(cbuf));
1499 	if (phys)
1500 		kdb_printf("phys " kdb_machreg_fmt0 " ", addr);
1501 	else
1502 		kdb_printf(kdb_machreg_fmt0 " ", addr);
1503 
1504 	for (i = 0; i < num && repeat--; i++) {
1505 		if (phys) {
1506 			if (kdb_getphysword(&word, addr, bytesperword))
1507 				break;
1508 		} else if (kdb_getword(&word, addr, bytesperword))
1509 			break;
1510 		kdb_printf(fmtstr, word);
1511 		if (symbolic)
1512 			kdbnearsym(word, &symtab);
1513 		else
1514 			memset(&symtab, 0, sizeof(symtab));
1515 		if (symtab.sym_name) {
1516 			kdb_symbol_print(word, &symtab, 0);
1517 			if (!nosect) {
1518 				kdb_printf("\n");
1519 				kdb_printf("                       %s %s "
1520 					   kdb_machreg_fmt " "
1521 					   kdb_machreg_fmt " "
1522 					   kdb_machreg_fmt, symtab.mod_name,
1523 					   symtab.sec_name, symtab.sec_start,
1524 					   symtab.sym_start, symtab.sym_end);
1525 			}
1526 			addr += bytesperword;
1527 		} else {
1528 			union {
1529 				u64 word;
1530 				unsigned char c[8];
1531 			} wc;
1532 			unsigned char *cp;
1533 #ifdef	__BIG_ENDIAN
1534 			cp = wc.c + 8 - bytesperword;
1535 #else
1536 			cp = wc.c;
1537 #endif
1538 			wc.word = word;
1539 #define printable_char(c) \
1540 	({unsigned char __c = c; isascii(__c) && isprint(__c) ? __c : '.'; })
1541 			for (j = 0; j < bytesperword; j++)
1542 				*c++ = printable_char(*cp++);
1543 			addr += bytesperword;
1544 #undef printable_char
1545 		}
1546 	}
1547 	kdb_printf("%*s %s\n", (int)((num-i)*(2*bytesperword + 1)+1),
1548 		   " ", cbuf);
1549 }
1550 
1551 static int kdb_md(int argc, const char **argv)
1552 {
1553 	static unsigned long last_addr;
1554 	static int last_radix, last_bytesperword, last_repeat;
1555 	int radix = 16, mdcount = 8, bytesperword = KDB_WORD_SIZE, repeat;
1556 	int nosect = 0;
1557 	char fmtchar, fmtstr[64];
1558 	unsigned long addr;
1559 	unsigned long word;
1560 	long offset = 0;
1561 	int symbolic = 0;
1562 	int valid = 0;
1563 	int phys = 0;
1564 	int raw = 0;
1565 
1566 	kdbgetintenv("MDCOUNT", &mdcount);
1567 	kdbgetintenv("RADIX", &radix);
1568 	kdbgetintenv("BYTESPERWORD", &bytesperword);
1569 
1570 	/* Assume 'md <addr>' and start with environment values */
1571 	repeat = mdcount * 16 / bytesperword;
1572 
1573 	if (strcmp(argv[0], "mdr") == 0) {
1574 		if (argc == 2 || (argc == 0 && last_addr != 0))
1575 			valid = raw = 1;
1576 		else
1577 			return KDB_ARGCOUNT;
1578 	} else if (isdigit(argv[0][2])) {
1579 		bytesperword = (int)(argv[0][2] - '0');
1580 		if (bytesperword == 0) {
1581 			bytesperword = last_bytesperword;
1582 			if (bytesperword == 0)
1583 				bytesperword = 4;
1584 		}
1585 		last_bytesperword = bytesperword;
1586 		repeat = mdcount * 16 / bytesperword;
1587 		if (!argv[0][3])
1588 			valid = 1;
1589 		else if (argv[0][3] == 'c' && argv[0][4]) {
1590 			char *p;
1591 			repeat = simple_strtoul(argv[0] + 4, &p, 10);
1592 			mdcount = ((repeat * bytesperword) + 15) / 16;
1593 			valid = !*p;
1594 		}
1595 		last_repeat = repeat;
1596 	} else if (strcmp(argv[0], "md") == 0)
1597 		valid = 1;
1598 	else if (strcmp(argv[0], "mds") == 0)
1599 		valid = 1;
1600 	else if (strcmp(argv[0], "mdp") == 0) {
1601 		phys = valid = 1;
1602 	}
1603 	if (!valid)
1604 		return KDB_NOTFOUND;
1605 
1606 	if (argc == 0) {
1607 		if (last_addr == 0)
1608 			return KDB_ARGCOUNT;
1609 		addr = last_addr;
1610 		radix = last_radix;
1611 		bytesperword = last_bytesperword;
1612 		repeat = last_repeat;
1613 		if (raw)
1614 			mdcount = repeat;
1615 		else
1616 			mdcount = ((repeat * bytesperword) + 15) / 16;
1617 	}
1618 
1619 	if (argc) {
1620 		unsigned long val;
1621 		int diag, nextarg = 1;
1622 		diag = kdbgetaddrarg(argc, argv, &nextarg, &addr,
1623 				     &offset, NULL);
1624 		if (diag)
1625 			return diag;
1626 		if (argc > nextarg+2)
1627 			return KDB_ARGCOUNT;
1628 
1629 		if (argc >= nextarg) {
1630 			diag = kdbgetularg(argv[nextarg], &val);
1631 			if (!diag) {
1632 				mdcount = (int) val;
1633 				if (raw)
1634 					repeat = mdcount;
1635 				else
1636 					repeat = mdcount * 16 / bytesperword;
1637 			}
1638 		}
1639 		if (argc >= nextarg+1) {
1640 			diag = kdbgetularg(argv[nextarg+1], &val);
1641 			if (!diag)
1642 				radix = (int) val;
1643 		}
1644 	}
1645 
1646 	if (strcmp(argv[0], "mdr") == 0) {
1647 		int ret;
1648 		last_addr = addr;
1649 		ret = kdb_mdr(addr, mdcount);
1650 		last_addr += mdcount;
1651 		last_repeat = mdcount;
1652 		last_bytesperword = bytesperword; // to make REPEAT happy
1653 		return ret;
1654 	}
1655 
1656 	switch (radix) {
1657 	case 10:
1658 		fmtchar = 'd';
1659 		break;
1660 	case 16:
1661 		fmtchar = 'x';
1662 		break;
1663 	case 8:
1664 		fmtchar = 'o';
1665 		break;
1666 	default:
1667 		return KDB_BADRADIX;
1668 	}
1669 
1670 	last_radix = radix;
1671 
1672 	if (bytesperword > KDB_WORD_SIZE)
1673 		return KDB_BADWIDTH;
1674 
1675 	switch (bytesperword) {
1676 	case 8:
1677 		sprintf(fmtstr, "%%16.16l%c ", fmtchar);
1678 		break;
1679 	case 4:
1680 		sprintf(fmtstr, "%%8.8l%c ", fmtchar);
1681 		break;
1682 	case 2:
1683 		sprintf(fmtstr, "%%4.4l%c ", fmtchar);
1684 		break;
1685 	case 1:
1686 		sprintf(fmtstr, "%%2.2l%c ", fmtchar);
1687 		break;
1688 	default:
1689 		return KDB_BADWIDTH;
1690 	}
1691 
1692 	last_repeat = repeat;
1693 	last_bytesperword = bytesperword;
1694 
1695 	if (strcmp(argv[0], "mds") == 0) {
1696 		symbolic = 1;
1697 		/* Do not save these changes as last_*, they are temporary mds
1698 		 * overrides.
1699 		 */
1700 		bytesperword = KDB_WORD_SIZE;
1701 		repeat = mdcount;
1702 		kdbgetintenv("NOSECT", &nosect);
1703 	}
1704 
1705 	/* Round address down modulo BYTESPERWORD */
1706 
1707 	addr &= ~(bytesperword-1);
1708 
1709 	while (repeat > 0) {
1710 		unsigned long a;
1711 		int n, z, num = (symbolic ? 1 : (16 / bytesperword));
1712 
1713 		if (KDB_FLAG(CMD_INTERRUPT))
1714 			return 0;
1715 		for (a = addr, z = 0; z < repeat; a += bytesperword, ++z) {
1716 			if (phys) {
1717 				if (kdb_getphysword(&word, a, bytesperword)
1718 						|| word)
1719 					break;
1720 			} else if (kdb_getword(&word, a, bytesperword) || word)
1721 				break;
1722 		}
1723 		n = min(num, repeat);
1724 		kdb_md_line(fmtstr, addr, symbolic, nosect, bytesperword,
1725 			    num, repeat, phys);
1726 		addr += bytesperword * n;
1727 		repeat -= n;
1728 		z = (z + num - 1) / num;
1729 		if (z > 2) {
1730 			int s = num * (z-2);
1731 			kdb_printf(kdb_machreg_fmt0 "-" kdb_machreg_fmt0
1732 				   " zero suppressed\n",
1733 				addr, addr + bytesperword * s - 1);
1734 			addr += bytesperword * s;
1735 			repeat -= s;
1736 		}
1737 	}
1738 	last_addr = addr;
1739 
1740 	return 0;
1741 }
1742 
1743 /*
1744  * kdb_mm - This function implements the 'mm' command.
1745  *	mm address-expression new-value
1746  * Remarks:
1747  *	mm works on machine words, mmW works on bytes.
1748  */
1749 static int kdb_mm(int argc, const char **argv)
1750 {
1751 	int diag;
1752 	unsigned long addr;
1753 	long offset = 0;
1754 	unsigned long contents;
1755 	int nextarg;
1756 	int width;
1757 
1758 	if (argv[0][2] && !isdigit(argv[0][2]))
1759 		return KDB_NOTFOUND;
1760 
1761 	if (argc < 2)
1762 		return KDB_ARGCOUNT;
1763 
1764 	nextarg = 1;
1765 	diag = kdbgetaddrarg(argc, argv, &nextarg, &addr, &offset, NULL);
1766 	if (diag)
1767 		return diag;
1768 
1769 	if (nextarg > argc)
1770 		return KDB_ARGCOUNT;
1771 	diag = kdbgetaddrarg(argc, argv, &nextarg, &contents, NULL, NULL);
1772 	if (diag)
1773 		return diag;
1774 
1775 	if (nextarg != argc + 1)
1776 		return KDB_ARGCOUNT;
1777 
1778 	width = argv[0][2] ? (argv[0][2] - '0') : (KDB_WORD_SIZE);
1779 	diag = kdb_putword(addr, contents, width);
1780 	if (diag)
1781 		return diag;
1782 
1783 	kdb_printf(kdb_machreg_fmt " = " kdb_machreg_fmt "\n", addr, contents);
1784 
1785 	return 0;
1786 }
1787 
1788 /*
1789  * kdb_go - This function implements the 'go' command.
1790  *	go [address-expression]
1791  */
1792 static int kdb_go(int argc, const char **argv)
1793 {
1794 	unsigned long addr;
1795 	int diag;
1796 	int nextarg;
1797 	long offset;
1798 
1799 	if (raw_smp_processor_id() != kdb_initial_cpu) {
1800 		kdb_printf("go must execute on the entry cpu, "
1801 			   "please use \"cpu %d\" and then execute go\n",
1802 			   kdb_initial_cpu);
1803 		return KDB_BADCPUNUM;
1804 	}
1805 	if (argc == 1) {
1806 		nextarg = 1;
1807 		diag = kdbgetaddrarg(argc, argv, &nextarg,
1808 				     &addr, &offset, NULL);
1809 		if (diag)
1810 			return diag;
1811 	} else if (argc) {
1812 		return KDB_ARGCOUNT;
1813 	}
1814 
1815 	diag = KDB_CMD_GO;
1816 	if (KDB_FLAG(CATASTROPHIC)) {
1817 		kdb_printf("Catastrophic error detected\n");
1818 		kdb_printf("kdb_continue_catastrophic=%d, ",
1819 			kdb_continue_catastrophic);
1820 		if (kdb_continue_catastrophic == 0 && kdb_go_count++ == 0) {
1821 			kdb_printf("type go a second time if you really want "
1822 				   "to continue\n");
1823 			return 0;
1824 		}
1825 		if (kdb_continue_catastrophic == 2) {
1826 			kdb_printf("forcing reboot\n");
1827 			kdb_reboot(0, NULL);
1828 		}
1829 		kdb_printf("attempting to continue\n");
1830 	}
1831 	return diag;
1832 }
1833 
1834 /*
1835  * kdb_rd - This function implements the 'rd' command.
1836  */
1837 static int kdb_rd(int argc, const char **argv)
1838 {
1839 	int len = kdb_check_regs();
1840 #if DBG_MAX_REG_NUM > 0
1841 	int i;
1842 	char *rname;
1843 	int rsize;
1844 	u64 reg64;
1845 	u32 reg32;
1846 	u16 reg16;
1847 	u8 reg8;
1848 
1849 	if (len)
1850 		return len;
1851 
1852 	for (i = 0; i < DBG_MAX_REG_NUM; i++) {
1853 		rsize = dbg_reg_def[i].size * 2;
1854 		if (rsize > 16)
1855 			rsize = 2;
1856 		if (len + strlen(dbg_reg_def[i].name) + 4 + rsize > 80) {
1857 			len = 0;
1858 			kdb_printf("\n");
1859 		}
1860 		if (len)
1861 			len += kdb_printf("  ");
1862 		switch(dbg_reg_def[i].size * 8) {
1863 		case 8:
1864 			rname = dbg_get_reg(i, &reg8, kdb_current_regs);
1865 			if (!rname)
1866 				break;
1867 			len += kdb_printf("%s: %02x", rname, reg8);
1868 			break;
1869 		case 16:
1870 			rname = dbg_get_reg(i, &reg16, kdb_current_regs);
1871 			if (!rname)
1872 				break;
1873 			len += kdb_printf("%s: %04x", rname, reg16);
1874 			break;
1875 		case 32:
1876 			rname = dbg_get_reg(i, &reg32, kdb_current_regs);
1877 			if (!rname)
1878 				break;
1879 			len += kdb_printf("%s: %08x", rname, reg32);
1880 			break;
1881 		case 64:
1882 			rname = dbg_get_reg(i, &reg64, kdb_current_regs);
1883 			if (!rname)
1884 				break;
1885 			len += kdb_printf("%s: %016llx", rname, reg64);
1886 			break;
1887 		default:
1888 			len += kdb_printf("%s: ??", dbg_reg_def[i].name);
1889 		}
1890 	}
1891 	kdb_printf("\n");
1892 #else
1893 	if (len)
1894 		return len;
1895 
1896 	kdb_dumpregs(kdb_current_regs);
1897 #endif
1898 	return 0;
1899 }
1900 
1901 /*
1902  * kdb_rm - This function implements the 'rm' (register modify)  command.
1903  *	rm register-name new-contents
1904  * Remarks:
1905  *	Allows register modification with the same restrictions as gdb
1906  */
1907 static int kdb_rm(int argc, const char **argv)
1908 {
1909 #if DBG_MAX_REG_NUM > 0
1910 	int diag;
1911 	const char *rname;
1912 	int i;
1913 	u64 reg64;
1914 	u32 reg32;
1915 	u16 reg16;
1916 	u8 reg8;
1917 
1918 	if (argc != 2)
1919 		return KDB_ARGCOUNT;
1920 	/*
1921 	 * Allow presence or absence of leading '%' symbol.
1922 	 */
1923 	rname = argv[1];
1924 	if (*rname == '%')
1925 		rname++;
1926 
1927 	diag = kdbgetu64arg(argv[2], &reg64);
1928 	if (diag)
1929 		return diag;
1930 
1931 	diag = kdb_check_regs();
1932 	if (diag)
1933 		return diag;
1934 
1935 	diag = KDB_BADREG;
1936 	for (i = 0; i < DBG_MAX_REG_NUM; i++) {
1937 		if (strcmp(rname, dbg_reg_def[i].name) == 0) {
1938 			diag = 0;
1939 			break;
1940 		}
1941 	}
1942 	if (!diag) {
1943 		switch(dbg_reg_def[i].size * 8) {
1944 		case 8:
1945 			reg8 = reg64;
1946 			dbg_set_reg(i, &reg8, kdb_current_regs);
1947 			break;
1948 		case 16:
1949 			reg16 = reg64;
1950 			dbg_set_reg(i, &reg16, kdb_current_regs);
1951 			break;
1952 		case 32:
1953 			reg32 = reg64;
1954 			dbg_set_reg(i, &reg32, kdb_current_regs);
1955 			break;
1956 		case 64:
1957 			dbg_set_reg(i, &reg64, kdb_current_regs);
1958 			break;
1959 		}
1960 	}
1961 	return diag;
1962 #else
1963 	kdb_printf("ERROR: Register set currently not implemented\n");
1964     return 0;
1965 #endif
1966 }
1967 
1968 #if defined(CONFIG_MAGIC_SYSRQ)
1969 /*
1970  * kdb_sr - This function implements the 'sr' (SYSRQ key) command
1971  *	which interfaces to the soi-disant MAGIC SYSRQ functionality.
1972  *		sr <magic-sysrq-code>
1973  */
1974 static int kdb_sr(int argc, const char **argv)
1975 {
1976 	bool check_mask =
1977 	    !kdb_check_flags(KDB_ENABLE_ALL, kdb_cmd_enabled, false);
1978 
1979 	if (argc != 1)
1980 		return KDB_ARGCOUNT;
1981 
1982 	kdb_trap_printk++;
1983 	__handle_sysrq(*argv[1], check_mask);
1984 	kdb_trap_printk--;
1985 
1986 	return 0;
1987 }
1988 #endif	/* CONFIG_MAGIC_SYSRQ */
1989 
1990 /*
1991  * kdb_ef - This function implements the 'regs' (display exception
1992  *	frame) command.  This command takes an address and expects to
1993  *	find an exception frame at that address, formats and prints
1994  *	it.
1995  *		regs address-expression
1996  * Remarks:
1997  *	Not done yet.
1998  */
1999 static int kdb_ef(int argc, const char **argv)
2000 {
2001 	int diag;
2002 	unsigned long addr;
2003 	long offset;
2004 	int nextarg;
2005 
2006 	if (argc != 1)
2007 		return KDB_ARGCOUNT;
2008 
2009 	nextarg = 1;
2010 	diag = kdbgetaddrarg(argc, argv, &nextarg, &addr, &offset, NULL);
2011 	if (diag)
2012 		return diag;
2013 	show_regs((struct pt_regs *)addr);
2014 	return 0;
2015 }
2016 
2017 #if defined(CONFIG_MODULES)
2018 /*
2019  * kdb_lsmod - This function implements the 'lsmod' command.  Lists
2020  *	currently loaded kernel modules.
2021  *	Mostly taken from userland lsmod.
2022  */
2023 static int kdb_lsmod(int argc, const char **argv)
2024 {
2025 	struct module *mod;
2026 
2027 	if (argc != 0)
2028 		return KDB_ARGCOUNT;
2029 
2030 	kdb_printf("Module                  Size  modstruct     Used by\n");
2031 	list_for_each_entry(mod, kdb_modules, list) {
2032 		if (mod->state == MODULE_STATE_UNFORMED)
2033 			continue;
2034 
2035 		kdb_printf("%-20s%8u  0x%px ", mod->name,
2036 			   mod->core_layout.size, (void *)mod);
2037 #ifdef CONFIG_MODULE_UNLOAD
2038 		kdb_printf("%4d ", module_refcount(mod));
2039 #endif
2040 		if (mod->state == MODULE_STATE_GOING)
2041 			kdb_printf(" (Unloading)");
2042 		else if (mod->state == MODULE_STATE_COMING)
2043 			kdb_printf(" (Loading)");
2044 		else
2045 			kdb_printf(" (Live)");
2046 		kdb_printf(" 0x%px", mod->core_layout.base);
2047 
2048 #ifdef CONFIG_MODULE_UNLOAD
2049 		{
2050 			struct module_use *use;
2051 			kdb_printf(" [ ");
2052 			list_for_each_entry(use, &mod->source_list,
2053 					    source_list)
2054 				kdb_printf("%s ", use->target->name);
2055 			kdb_printf("]\n");
2056 		}
2057 #endif
2058 	}
2059 
2060 	return 0;
2061 }
2062 
2063 #endif	/* CONFIG_MODULES */
2064 
2065 /*
2066  * kdb_env - This function implements the 'env' command.  Display the
2067  *	current environment variables.
2068  */
2069 
2070 static int kdb_env(int argc, const char **argv)
2071 {
2072 	int i;
2073 
2074 	for (i = 0; i < __nenv; i++) {
2075 		if (__env[i])
2076 			kdb_printf("%s\n", __env[i]);
2077 	}
2078 
2079 	if (KDB_DEBUG(MASK))
2080 		kdb_printf("KDBFLAGS=0x%x\n", kdb_flags);
2081 
2082 	return 0;
2083 }
2084 
2085 #ifdef CONFIG_PRINTK
2086 /*
2087  * kdb_dmesg - This function implements the 'dmesg' command to display
2088  *	the contents of the syslog buffer.
2089  *		dmesg [lines] [adjust]
2090  */
2091 static int kdb_dmesg(int argc, const char **argv)
2092 {
2093 	int diag;
2094 	int logging;
2095 	int lines = 0;
2096 	int adjust = 0;
2097 	int n = 0;
2098 	int skip = 0;
2099 	struct kmsg_dumper dumper = { .active = 1 };
2100 	size_t len;
2101 	char buf[201];
2102 
2103 	if (argc > 2)
2104 		return KDB_ARGCOUNT;
2105 	if (argc) {
2106 		char *cp;
2107 		lines = simple_strtol(argv[1], &cp, 0);
2108 		if (*cp)
2109 			lines = 0;
2110 		if (argc > 1) {
2111 			adjust = simple_strtoul(argv[2], &cp, 0);
2112 			if (*cp || adjust < 0)
2113 				adjust = 0;
2114 		}
2115 	}
2116 
2117 	/* disable LOGGING if set */
2118 	diag = kdbgetintenv("LOGGING", &logging);
2119 	if (!diag && logging) {
2120 		const char *setargs[] = { "set", "LOGGING", "0" };
2121 		kdb_set(2, setargs);
2122 	}
2123 
2124 	kmsg_dump_rewind_nolock(&dumper);
2125 	while (kmsg_dump_get_line_nolock(&dumper, 1, NULL, 0, NULL))
2126 		n++;
2127 
2128 	if (lines < 0) {
2129 		if (adjust >= n)
2130 			kdb_printf("buffer only contains %d lines, nothing "
2131 				   "printed\n", n);
2132 		else if (adjust - lines >= n)
2133 			kdb_printf("buffer only contains %d lines, last %d "
2134 				   "lines printed\n", n, n - adjust);
2135 		skip = adjust;
2136 		lines = abs(lines);
2137 	} else if (lines > 0) {
2138 		skip = n - lines - adjust;
2139 		lines = abs(lines);
2140 		if (adjust >= n) {
2141 			kdb_printf("buffer only contains %d lines, "
2142 				   "nothing printed\n", n);
2143 			skip = n;
2144 		} else if (skip < 0) {
2145 			lines += skip;
2146 			skip = 0;
2147 			kdb_printf("buffer only contains %d lines, first "
2148 				   "%d lines printed\n", n, lines);
2149 		}
2150 	} else {
2151 		lines = n;
2152 	}
2153 
2154 	if (skip >= n || skip < 0)
2155 		return 0;
2156 
2157 	kmsg_dump_rewind_nolock(&dumper);
2158 	while (kmsg_dump_get_line_nolock(&dumper, 1, buf, sizeof(buf), &len)) {
2159 		if (skip) {
2160 			skip--;
2161 			continue;
2162 		}
2163 		if (!lines--)
2164 			break;
2165 		if (KDB_FLAG(CMD_INTERRUPT))
2166 			return 0;
2167 
2168 		kdb_printf("%.*s\n", (int)len - 1, buf);
2169 	}
2170 
2171 	return 0;
2172 }
2173 #endif /* CONFIG_PRINTK */
2174 
2175 /* Make sure we balance enable/disable calls, must disable first. */
2176 static atomic_t kdb_nmi_disabled;
2177 
2178 static int kdb_disable_nmi(int argc, const char *argv[])
2179 {
2180 	if (atomic_read(&kdb_nmi_disabled))
2181 		return 0;
2182 	atomic_set(&kdb_nmi_disabled, 1);
2183 	arch_kgdb_ops.enable_nmi(0);
2184 	return 0;
2185 }
2186 
2187 static int kdb_param_enable_nmi(const char *val, const struct kernel_param *kp)
2188 {
2189 	if (!atomic_add_unless(&kdb_nmi_disabled, -1, 0))
2190 		return -EINVAL;
2191 	arch_kgdb_ops.enable_nmi(1);
2192 	return 0;
2193 }
2194 
2195 static const struct kernel_param_ops kdb_param_ops_enable_nmi = {
2196 	.set = kdb_param_enable_nmi,
2197 };
2198 module_param_cb(enable_nmi, &kdb_param_ops_enable_nmi, NULL, 0600);
2199 
2200 /*
2201  * kdb_cpu - This function implements the 'cpu' command.
2202  *	cpu	[<cpunum>]
2203  * Returns:
2204  *	KDB_CMD_CPU for success, a kdb diagnostic if error
2205  */
2206 static void kdb_cpu_status(void)
2207 {
2208 	int i, start_cpu, first_print = 1;
2209 	char state, prev_state = '?';
2210 
2211 	kdb_printf("Currently on cpu %d\n", raw_smp_processor_id());
2212 	kdb_printf("Available cpus: ");
2213 	for (start_cpu = -1, i = 0; i < NR_CPUS; i++) {
2214 		if (!cpu_online(i)) {
2215 			state = 'F';	/* cpu is offline */
2216 		} else if (!kgdb_info[i].enter_kgdb) {
2217 			state = 'D';	/* cpu is online but unresponsive */
2218 		} else {
2219 			state = ' ';	/* cpu is responding to kdb */
2220 			if (kdb_task_state_char(KDB_TSK(i)) == 'I')
2221 				state = 'I';	/* idle task */
2222 		}
2223 		if (state != prev_state) {
2224 			if (prev_state != '?') {
2225 				if (!first_print)
2226 					kdb_printf(", ");
2227 				first_print = 0;
2228 				kdb_printf("%d", start_cpu);
2229 				if (start_cpu < i-1)
2230 					kdb_printf("-%d", i-1);
2231 				if (prev_state != ' ')
2232 					kdb_printf("(%c)", prev_state);
2233 			}
2234 			prev_state = state;
2235 			start_cpu = i;
2236 		}
2237 	}
2238 	/* print the trailing cpus, ignoring them if they are all offline */
2239 	if (prev_state != 'F') {
2240 		if (!first_print)
2241 			kdb_printf(", ");
2242 		kdb_printf("%d", start_cpu);
2243 		if (start_cpu < i-1)
2244 			kdb_printf("-%d", i-1);
2245 		if (prev_state != ' ')
2246 			kdb_printf("(%c)", prev_state);
2247 	}
2248 	kdb_printf("\n");
2249 }
2250 
2251 static int kdb_cpu(int argc, const char **argv)
2252 {
2253 	unsigned long cpunum;
2254 	int diag;
2255 
2256 	if (argc == 0) {
2257 		kdb_cpu_status();
2258 		return 0;
2259 	}
2260 
2261 	if (argc != 1)
2262 		return KDB_ARGCOUNT;
2263 
2264 	diag = kdbgetularg(argv[1], &cpunum);
2265 	if (diag)
2266 		return diag;
2267 
2268 	/*
2269 	 * Validate cpunum
2270 	 */
2271 	if ((cpunum >= CONFIG_NR_CPUS) || !kgdb_info[cpunum].enter_kgdb)
2272 		return KDB_BADCPUNUM;
2273 
2274 	dbg_switch_cpu = cpunum;
2275 
2276 	/*
2277 	 * Switch to other cpu
2278 	 */
2279 	return KDB_CMD_CPU;
2280 }
2281 
2282 /* The user may not realize that ps/bta with no parameters does not print idle
2283  * or sleeping system daemon processes, so tell them how many were suppressed.
2284  */
2285 void kdb_ps_suppressed(void)
2286 {
2287 	int idle = 0, daemon = 0;
2288 	unsigned long mask_I = kdb_task_state_string("I"),
2289 		      mask_M = kdb_task_state_string("M");
2290 	unsigned long cpu;
2291 	const struct task_struct *p, *g;
2292 	for_each_online_cpu(cpu) {
2293 		p = kdb_curr_task(cpu);
2294 		if (kdb_task_state(p, mask_I))
2295 			++idle;
2296 	}
2297 	kdb_do_each_thread(g, p) {
2298 		if (kdb_task_state(p, mask_M))
2299 			++daemon;
2300 	} kdb_while_each_thread(g, p);
2301 	if (idle || daemon) {
2302 		if (idle)
2303 			kdb_printf("%d idle process%s (state I)%s\n",
2304 				   idle, idle == 1 ? "" : "es",
2305 				   daemon ? " and " : "");
2306 		if (daemon)
2307 			kdb_printf("%d sleeping system daemon (state M) "
2308 				   "process%s", daemon,
2309 				   daemon == 1 ? "" : "es");
2310 		kdb_printf(" suppressed,\nuse 'ps A' to see all.\n");
2311 	}
2312 }
2313 
2314 /*
2315  * kdb_ps - This function implements the 'ps' command which shows a
2316  *	list of the active processes.
2317  *		ps [DRSTCZEUIMA]   All processes, optionally filtered by state
2318  */
2319 void kdb_ps1(const struct task_struct *p)
2320 {
2321 	int cpu;
2322 	unsigned long tmp;
2323 
2324 	if (!p || probe_kernel_read(&tmp, (char *)p, sizeof(unsigned long)))
2325 		return;
2326 
2327 	cpu = kdb_process_cpu(p);
2328 	kdb_printf("0x%px %8d %8d  %d %4d   %c  0x%px %c%s\n",
2329 		   (void *)p, p->pid, p->parent->pid,
2330 		   kdb_task_has_cpu(p), kdb_process_cpu(p),
2331 		   kdb_task_state_char(p),
2332 		   (void *)(&p->thread),
2333 		   p == kdb_curr_task(raw_smp_processor_id()) ? '*' : ' ',
2334 		   p->comm);
2335 	if (kdb_task_has_cpu(p)) {
2336 		if (!KDB_TSK(cpu)) {
2337 			kdb_printf("  Error: no saved data for this cpu\n");
2338 		} else {
2339 			if (KDB_TSK(cpu) != p)
2340 				kdb_printf("  Error: does not match running "
2341 				   "process table (0x%px)\n", KDB_TSK(cpu));
2342 		}
2343 	}
2344 }
2345 
2346 static int kdb_ps(int argc, const char **argv)
2347 {
2348 	struct task_struct *g, *p;
2349 	unsigned long mask, cpu;
2350 
2351 	if (argc == 0)
2352 		kdb_ps_suppressed();
2353 	kdb_printf("%-*s      Pid   Parent [*] cpu State %-*s Command\n",
2354 		(int)(2*sizeof(void *))+2, "Task Addr",
2355 		(int)(2*sizeof(void *))+2, "Thread");
2356 	mask = kdb_task_state_string(argc ? argv[1] : NULL);
2357 	/* Run the active tasks first */
2358 	for_each_online_cpu(cpu) {
2359 		if (KDB_FLAG(CMD_INTERRUPT))
2360 			return 0;
2361 		p = kdb_curr_task(cpu);
2362 		if (kdb_task_state(p, mask))
2363 			kdb_ps1(p);
2364 	}
2365 	kdb_printf("\n");
2366 	/* Now the real tasks */
2367 	kdb_do_each_thread(g, p) {
2368 		if (KDB_FLAG(CMD_INTERRUPT))
2369 			return 0;
2370 		if (kdb_task_state(p, mask))
2371 			kdb_ps1(p);
2372 	} kdb_while_each_thread(g, p);
2373 
2374 	return 0;
2375 }
2376 
2377 /*
2378  * kdb_pid - This function implements the 'pid' command which switches
2379  *	the currently active process.
2380  *		pid [<pid> | R]
2381  */
2382 static int kdb_pid(int argc, const char **argv)
2383 {
2384 	struct task_struct *p;
2385 	unsigned long val;
2386 	int diag;
2387 
2388 	if (argc > 1)
2389 		return KDB_ARGCOUNT;
2390 
2391 	if (argc) {
2392 		if (strcmp(argv[1], "R") == 0) {
2393 			p = KDB_TSK(kdb_initial_cpu);
2394 		} else {
2395 			diag = kdbgetularg(argv[1], &val);
2396 			if (diag)
2397 				return KDB_BADINT;
2398 
2399 			p = find_task_by_pid_ns((pid_t)val,	&init_pid_ns);
2400 			if (!p) {
2401 				kdb_printf("No task with pid=%d\n", (pid_t)val);
2402 				return 0;
2403 			}
2404 		}
2405 		kdb_set_current_task(p);
2406 	}
2407 	kdb_printf("KDB current process is %s(pid=%d)\n",
2408 		   kdb_current_task->comm,
2409 		   kdb_current_task->pid);
2410 
2411 	return 0;
2412 }
2413 
2414 static int kdb_kgdb(int argc, const char **argv)
2415 {
2416 	return KDB_CMD_KGDB;
2417 }
2418 
2419 /*
2420  * kdb_help - This function implements the 'help' and '?' commands.
2421  */
2422 static int kdb_help(int argc, const char **argv)
2423 {
2424 	kdbtab_t *kt;
2425 	int i;
2426 
2427 	kdb_printf("%-15.15s %-20.20s %s\n", "Command", "Usage", "Description");
2428 	kdb_printf("-----------------------------"
2429 		   "-----------------------------\n");
2430 	for_each_kdbcmd(kt, i) {
2431 		char *space = "";
2432 		if (KDB_FLAG(CMD_INTERRUPT))
2433 			return 0;
2434 		if (!kt->cmd_name)
2435 			continue;
2436 		if (!kdb_check_flags(kt->cmd_flags, kdb_cmd_enabled, true))
2437 			continue;
2438 		if (strlen(kt->cmd_usage) > 20)
2439 			space = "\n                                    ";
2440 		kdb_printf("%-15.15s %-20s%s%s\n", kt->cmd_name,
2441 			   kt->cmd_usage, space, kt->cmd_help);
2442 	}
2443 	return 0;
2444 }
2445 
2446 /*
2447  * kdb_kill - This function implements the 'kill' commands.
2448  */
2449 static int kdb_kill(int argc, const char **argv)
2450 {
2451 	long sig, pid;
2452 	char *endp;
2453 	struct task_struct *p;
2454 
2455 	if (argc != 2)
2456 		return KDB_ARGCOUNT;
2457 
2458 	sig = simple_strtol(argv[1], &endp, 0);
2459 	if (*endp)
2460 		return KDB_BADINT;
2461 	if ((sig >= 0) || !valid_signal(-sig)) {
2462 		kdb_printf("Invalid signal parameter.<-signal>\n");
2463 		return 0;
2464 	}
2465 	sig = -sig;
2466 
2467 	pid = simple_strtol(argv[2], &endp, 0);
2468 	if (*endp)
2469 		return KDB_BADINT;
2470 	if (pid <= 0) {
2471 		kdb_printf("Process ID must be large than 0.\n");
2472 		return 0;
2473 	}
2474 
2475 	/* Find the process. */
2476 	p = find_task_by_pid_ns(pid, &init_pid_ns);
2477 	if (!p) {
2478 		kdb_printf("The specified process isn't found.\n");
2479 		return 0;
2480 	}
2481 	p = p->group_leader;
2482 	kdb_send_sig(p, sig);
2483 	return 0;
2484 }
2485 
2486 /*
2487  * Most of this code has been lifted from kernel/timer.c::sys_sysinfo().
2488  * I cannot call that code directly from kdb, it has an unconditional
2489  * cli()/sti() and calls routines that take locks which can stop the debugger.
2490  */
2491 static void kdb_sysinfo(struct sysinfo *val)
2492 {
2493 	u64 uptime = ktime_get_mono_fast_ns();
2494 
2495 	memset(val, 0, sizeof(*val));
2496 	val->uptime = div_u64(uptime, NSEC_PER_SEC);
2497 	val->loads[0] = avenrun[0];
2498 	val->loads[1] = avenrun[1];
2499 	val->loads[2] = avenrun[2];
2500 	val->procs = nr_threads-1;
2501 	si_meminfo(val);
2502 
2503 	return;
2504 }
2505 
2506 /*
2507  * kdb_summary - This function implements the 'summary' command.
2508  */
2509 static int kdb_summary(int argc, const char **argv)
2510 {
2511 	time64_t now;
2512 	struct tm tm;
2513 	struct sysinfo val;
2514 
2515 	if (argc)
2516 		return KDB_ARGCOUNT;
2517 
2518 	kdb_printf("sysname    %s\n", init_uts_ns.name.sysname);
2519 	kdb_printf("release    %s\n", init_uts_ns.name.release);
2520 	kdb_printf("version    %s\n", init_uts_ns.name.version);
2521 	kdb_printf("machine    %s\n", init_uts_ns.name.machine);
2522 	kdb_printf("nodename   %s\n", init_uts_ns.name.nodename);
2523 	kdb_printf("domainname %s\n", init_uts_ns.name.domainname);
2524 
2525 	now = __ktime_get_real_seconds();
2526 	time64_to_tm(now, 0, &tm);
2527 	kdb_printf("date       %04ld-%02d-%02d %02d:%02d:%02d "
2528 		   "tz_minuteswest %d\n",
2529 		1900+tm.tm_year, tm.tm_mon+1, tm.tm_mday,
2530 		tm.tm_hour, tm.tm_min, tm.tm_sec,
2531 		sys_tz.tz_minuteswest);
2532 
2533 	kdb_sysinfo(&val);
2534 	kdb_printf("uptime     ");
2535 	if (val.uptime > (24*60*60)) {
2536 		int days = val.uptime / (24*60*60);
2537 		val.uptime %= (24*60*60);
2538 		kdb_printf("%d day%s ", days, days == 1 ? "" : "s");
2539 	}
2540 	kdb_printf("%02ld:%02ld\n", val.uptime/(60*60), (val.uptime/60)%60);
2541 
2542 	kdb_printf("load avg   %ld.%02ld %ld.%02ld %ld.%02ld\n",
2543 		LOAD_INT(val.loads[0]), LOAD_FRAC(val.loads[0]),
2544 		LOAD_INT(val.loads[1]), LOAD_FRAC(val.loads[1]),
2545 		LOAD_INT(val.loads[2]), LOAD_FRAC(val.loads[2]));
2546 
2547 	/* Display in kilobytes */
2548 #define K(x) ((x) << (PAGE_SHIFT - 10))
2549 	kdb_printf("\nMemTotal:       %8lu kB\nMemFree:        %8lu kB\n"
2550 		   "Buffers:        %8lu kB\n",
2551 		   K(val.totalram), K(val.freeram), K(val.bufferram));
2552 	return 0;
2553 }
2554 
2555 /*
2556  * kdb_per_cpu - This function implements the 'per_cpu' command.
2557  */
2558 static int kdb_per_cpu(int argc, const char **argv)
2559 {
2560 	char fmtstr[64];
2561 	int cpu, diag, nextarg = 1;
2562 	unsigned long addr, symaddr, val, bytesperword = 0, whichcpu = ~0UL;
2563 
2564 	if (argc < 1 || argc > 3)
2565 		return KDB_ARGCOUNT;
2566 
2567 	diag = kdbgetaddrarg(argc, argv, &nextarg, &symaddr, NULL, NULL);
2568 	if (diag)
2569 		return diag;
2570 
2571 	if (argc >= 2) {
2572 		diag = kdbgetularg(argv[2], &bytesperword);
2573 		if (diag)
2574 			return diag;
2575 	}
2576 	if (!bytesperword)
2577 		bytesperword = KDB_WORD_SIZE;
2578 	else if (bytesperword > KDB_WORD_SIZE)
2579 		return KDB_BADWIDTH;
2580 	sprintf(fmtstr, "%%0%dlx ", (int)(2*bytesperword));
2581 	if (argc >= 3) {
2582 		diag = kdbgetularg(argv[3], &whichcpu);
2583 		if (diag)
2584 			return diag;
2585 		if (whichcpu >= nr_cpu_ids || !cpu_online(whichcpu)) {
2586 			kdb_printf("cpu %ld is not online\n", whichcpu);
2587 			return KDB_BADCPUNUM;
2588 		}
2589 	}
2590 
2591 	/* Most architectures use __per_cpu_offset[cpu], some use
2592 	 * __per_cpu_offset(cpu), smp has no __per_cpu_offset.
2593 	 */
2594 #ifdef	__per_cpu_offset
2595 #define KDB_PCU(cpu) __per_cpu_offset(cpu)
2596 #else
2597 #ifdef	CONFIG_SMP
2598 #define KDB_PCU(cpu) __per_cpu_offset[cpu]
2599 #else
2600 #define KDB_PCU(cpu) 0
2601 #endif
2602 #endif
2603 	for_each_online_cpu(cpu) {
2604 		if (KDB_FLAG(CMD_INTERRUPT))
2605 			return 0;
2606 
2607 		if (whichcpu != ~0UL && whichcpu != cpu)
2608 			continue;
2609 		addr = symaddr + KDB_PCU(cpu);
2610 		diag = kdb_getword(&val, addr, bytesperword);
2611 		if (diag) {
2612 			kdb_printf("%5d " kdb_bfd_vma_fmt0 " - unable to "
2613 				   "read, diag=%d\n", cpu, addr, diag);
2614 			continue;
2615 		}
2616 		kdb_printf("%5d ", cpu);
2617 		kdb_md_line(fmtstr, addr,
2618 			bytesperword == KDB_WORD_SIZE,
2619 			1, bytesperword, 1, 1, 0);
2620 	}
2621 #undef KDB_PCU
2622 	return 0;
2623 }
2624 
2625 /*
2626  * display help for the use of cmd | grep pattern
2627  */
2628 static int kdb_grep_help(int argc, const char **argv)
2629 {
2630 	kdb_printf("Usage of  cmd args | grep pattern:\n");
2631 	kdb_printf("  Any command's output may be filtered through an ");
2632 	kdb_printf("emulated 'pipe'.\n");
2633 	kdb_printf("  'grep' is just a key word.\n");
2634 	kdb_printf("  The pattern may include a very limited set of "
2635 		   "metacharacters:\n");
2636 	kdb_printf("   pattern or ^pattern or pattern$ or ^pattern$\n");
2637 	kdb_printf("  And if there are spaces in the pattern, you may "
2638 		   "quote it:\n");
2639 	kdb_printf("   \"pat tern\" or \"^pat tern\" or \"pat tern$\""
2640 		   " or \"^pat tern$\"\n");
2641 	return 0;
2642 }
2643 
2644 /*
2645  * kdb_register_flags - This function is used to register a kernel
2646  * 	debugger command.
2647  * Inputs:
2648  *	cmd	Command name
2649  *	func	Function to execute the command
2650  *	usage	A simple usage string showing arguments
2651  *	help	A simple help string describing command
2652  *	repeat	Does the command auto repeat on enter?
2653  * Returns:
2654  *	zero for success, one if a duplicate command.
2655  */
2656 #define kdb_command_extend 50	/* arbitrary */
2657 int kdb_register_flags(char *cmd,
2658 		       kdb_func_t func,
2659 		       char *usage,
2660 		       char *help,
2661 		       short minlen,
2662 		       kdb_cmdflags_t flags)
2663 {
2664 	int i;
2665 	kdbtab_t *kp;
2666 
2667 	/*
2668 	 *  Brute force method to determine duplicates
2669 	 */
2670 	for_each_kdbcmd(kp, i) {
2671 		if (kp->cmd_name && (strcmp(kp->cmd_name, cmd) == 0)) {
2672 			kdb_printf("Duplicate kdb command registered: "
2673 				"%s, func %px help %s\n", cmd, func, help);
2674 			return 1;
2675 		}
2676 	}
2677 
2678 	/*
2679 	 * Insert command into first available location in table
2680 	 */
2681 	for_each_kdbcmd(kp, i) {
2682 		if (kp->cmd_name == NULL)
2683 			break;
2684 	}
2685 
2686 	if (i >= kdb_max_commands) {
2687 		kdbtab_t *new = kmalloc_array(kdb_max_commands -
2688 						KDB_BASE_CMD_MAX +
2689 						kdb_command_extend,
2690 					      sizeof(*new),
2691 					      GFP_KDB);
2692 		if (!new) {
2693 			kdb_printf("Could not allocate new kdb_command "
2694 				   "table\n");
2695 			return 1;
2696 		}
2697 		if (kdb_commands) {
2698 			memcpy(new, kdb_commands,
2699 			  (kdb_max_commands - KDB_BASE_CMD_MAX) * sizeof(*new));
2700 			kfree(kdb_commands);
2701 		}
2702 		memset(new + kdb_max_commands - KDB_BASE_CMD_MAX, 0,
2703 		       kdb_command_extend * sizeof(*new));
2704 		kdb_commands = new;
2705 		kp = kdb_commands + kdb_max_commands - KDB_BASE_CMD_MAX;
2706 		kdb_max_commands += kdb_command_extend;
2707 	}
2708 
2709 	kp->cmd_name   = cmd;
2710 	kp->cmd_func   = func;
2711 	kp->cmd_usage  = usage;
2712 	kp->cmd_help   = help;
2713 	kp->cmd_minlen = minlen;
2714 	kp->cmd_flags  = flags;
2715 
2716 	return 0;
2717 }
2718 EXPORT_SYMBOL_GPL(kdb_register_flags);
2719 
2720 
2721 /*
2722  * kdb_register - Compatibility register function for commands that do
2723  *	not need to specify a repeat state.  Equivalent to
2724  *	kdb_register_flags with flags set to 0.
2725  * Inputs:
2726  *	cmd	Command name
2727  *	func	Function to execute the command
2728  *	usage	A simple usage string showing arguments
2729  *	help	A simple help string describing command
2730  * Returns:
2731  *	zero for success, one if a duplicate command.
2732  */
2733 int kdb_register(char *cmd,
2734 	     kdb_func_t func,
2735 	     char *usage,
2736 	     char *help,
2737 	     short minlen)
2738 {
2739 	return kdb_register_flags(cmd, func, usage, help, minlen, 0);
2740 }
2741 EXPORT_SYMBOL_GPL(kdb_register);
2742 
2743 /*
2744  * kdb_unregister - This function is used to unregister a kernel
2745  *	debugger command.  It is generally called when a module which
2746  *	implements kdb commands is unloaded.
2747  * Inputs:
2748  *	cmd	Command name
2749  * Returns:
2750  *	zero for success, one command not registered.
2751  */
2752 int kdb_unregister(char *cmd)
2753 {
2754 	int i;
2755 	kdbtab_t *kp;
2756 
2757 	/*
2758 	 *  find the command.
2759 	 */
2760 	for_each_kdbcmd(kp, i) {
2761 		if (kp->cmd_name && (strcmp(kp->cmd_name, cmd) == 0)) {
2762 			kp->cmd_name = NULL;
2763 			return 0;
2764 		}
2765 	}
2766 
2767 	/* Couldn't find it.  */
2768 	return 1;
2769 }
2770 EXPORT_SYMBOL_GPL(kdb_unregister);
2771 
2772 /* Initialize the kdb command table. */
2773 static void __init kdb_inittab(void)
2774 {
2775 	int i;
2776 	kdbtab_t *kp;
2777 
2778 	for_each_kdbcmd(kp, i)
2779 		kp->cmd_name = NULL;
2780 
2781 	kdb_register_flags("md", kdb_md, "<vaddr>",
2782 	  "Display Memory Contents, also mdWcN, e.g. md8c1", 1,
2783 	  KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS);
2784 	kdb_register_flags("mdr", kdb_md, "<vaddr> <bytes>",
2785 	  "Display Raw Memory", 0,
2786 	  KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS);
2787 	kdb_register_flags("mdp", kdb_md, "<paddr> <bytes>",
2788 	  "Display Physical Memory", 0,
2789 	  KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS);
2790 	kdb_register_flags("mds", kdb_md, "<vaddr>",
2791 	  "Display Memory Symbolically", 0,
2792 	  KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS);
2793 	kdb_register_flags("mm", kdb_mm, "<vaddr> <contents>",
2794 	  "Modify Memory Contents", 0,
2795 	  KDB_ENABLE_MEM_WRITE | KDB_REPEAT_NO_ARGS);
2796 	kdb_register_flags("go", kdb_go, "[<vaddr>]",
2797 	  "Continue Execution", 1,
2798 	  KDB_ENABLE_REG_WRITE | KDB_ENABLE_ALWAYS_SAFE_NO_ARGS);
2799 	kdb_register_flags("rd", kdb_rd, "",
2800 	  "Display Registers", 0,
2801 	  KDB_ENABLE_REG_READ);
2802 	kdb_register_flags("rm", kdb_rm, "<reg> <contents>",
2803 	  "Modify Registers", 0,
2804 	  KDB_ENABLE_REG_WRITE);
2805 	kdb_register_flags("ef", kdb_ef, "<vaddr>",
2806 	  "Display exception frame", 0,
2807 	  KDB_ENABLE_MEM_READ);
2808 	kdb_register_flags("bt", kdb_bt, "[<vaddr>]",
2809 	  "Stack traceback", 1,
2810 	  KDB_ENABLE_MEM_READ | KDB_ENABLE_INSPECT_NO_ARGS);
2811 	kdb_register_flags("btp", kdb_bt, "<pid>",
2812 	  "Display stack for process <pid>", 0,
2813 	  KDB_ENABLE_INSPECT);
2814 	kdb_register_flags("bta", kdb_bt, "[D|R|S|T|C|Z|E|U|I|M|A]",
2815 	  "Backtrace all processes matching state flag", 0,
2816 	  KDB_ENABLE_INSPECT);
2817 	kdb_register_flags("btc", kdb_bt, "",
2818 	  "Backtrace current process on each cpu", 0,
2819 	  KDB_ENABLE_INSPECT);
2820 	kdb_register_flags("btt", kdb_bt, "<vaddr>",
2821 	  "Backtrace process given its struct task address", 0,
2822 	  KDB_ENABLE_MEM_READ | KDB_ENABLE_INSPECT_NO_ARGS);
2823 	kdb_register_flags("env", kdb_env, "",
2824 	  "Show environment variables", 0,
2825 	  KDB_ENABLE_ALWAYS_SAFE);
2826 	kdb_register_flags("set", kdb_set, "",
2827 	  "Set environment variables", 0,
2828 	  KDB_ENABLE_ALWAYS_SAFE);
2829 	kdb_register_flags("help", kdb_help, "",
2830 	  "Display Help Message", 1,
2831 	  KDB_ENABLE_ALWAYS_SAFE);
2832 	kdb_register_flags("?", kdb_help, "",
2833 	  "Display Help Message", 0,
2834 	  KDB_ENABLE_ALWAYS_SAFE);
2835 	kdb_register_flags("cpu", kdb_cpu, "<cpunum>",
2836 	  "Switch to new cpu", 0,
2837 	  KDB_ENABLE_ALWAYS_SAFE_NO_ARGS);
2838 	kdb_register_flags("kgdb", kdb_kgdb, "",
2839 	  "Enter kgdb mode", 0, 0);
2840 	kdb_register_flags("ps", kdb_ps, "[<flags>|A]",
2841 	  "Display active task list", 0,
2842 	  KDB_ENABLE_INSPECT);
2843 	kdb_register_flags("pid", kdb_pid, "<pidnum>",
2844 	  "Switch to another task", 0,
2845 	  KDB_ENABLE_INSPECT);
2846 	kdb_register_flags("reboot", kdb_reboot, "",
2847 	  "Reboot the machine immediately", 0,
2848 	  KDB_ENABLE_REBOOT);
2849 #if defined(CONFIG_MODULES)
2850 	kdb_register_flags("lsmod", kdb_lsmod, "",
2851 	  "List loaded kernel modules", 0,
2852 	  KDB_ENABLE_INSPECT);
2853 #endif
2854 #if defined(CONFIG_MAGIC_SYSRQ)
2855 	kdb_register_flags("sr", kdb_sr, "<key>",
2856 	  "Magic SysRq key", 0,
2857 	  KDB_ENABLE_ALWAYS_SAFE);
2858 #endif
2859 #if defined(CONFIG_PRINTK)
2860 	kdb_register_flags("dmesg", kdb_dmesg, "[lines]",
2861 	  "Display syslog buffer", 0,
2862 	  KDB_ENABLE_ALWAYS_SAFE);
2863 #endif
2864 	if (arch_kgdb_ops.enable_nmi) {
2865 		kdb_register_flags("disable_nmi", kdb_disable_nmi, "",
2866 		  "Disable NMI entry to KDB", 0,
2867 		  KDB_ENABLE_ALWAYS_SAFE);
2868 	}
2869 	kdb_register_flags("defcmd", kdb_defcmd, "name \"usage\" \"help\"",
2870 	  "Define a set of commands, down to endefcmd", 0,
2871 	  KDB_ENABLE_ALWAYS_SAFE);
2872 	kdb_register_flags("kill", kdb_kill, "<-signal> <pid>",
2873 	  "Send a signal to a process", 0,
2874 	  KDB_ENABLE_SIGNAL);
2875 	kdb_register_flags("summary", kdb_summary, "",
2876 	  "Summarize the system", 4,
2877 	  KDB_ENABLE_ALWAYS_SAFE);
2878 	kdb_register_flags("per_cpu", kdb_per_cpu, "<sym> [<bytes>] [<cpu>]",
2879 	  "Display per_cpu variables", 3,
2880 	  KDB_ENABLE_MEM_READ);
2881 	kdb_register_flags("grephelp", kdb_grep_help, "",
2882 	  "Display help on | grep", 0,
2883 	  KDB_ENABLE_ALWAYS_SAFE);
2884 }
2885 
2886 /* Execute any commands defined in kdb_cmds.  */
2887 static void __init kdb_cmd_init(void)
2888 {
2889 	int i, diag;
2890 	for (i = 0; kdb_cmds[i]; ++i) {
2891 		diag = kdb_parse(kdb_cmds[i]);
2892 		if (diag)
2893 			kdb_printf("kdb command %s failed, kdb diag %d\n",
2894 				kdb_cmds[i], diag);
2895 	}
2896 	if (defcmd_in_progress) {
2897 		kdb_printf("Incomplete 'defcmd' set, forcing endefcmd\n");
2898 		kdb_parse("endefcmd");
2899 	}
2900 }
2901 
2902 /* Initialize kdb_printf, breakpoint tables and kdb state */
2903 void __init kdb_init(int lvl)
2904 {
2905 	static int kdb_init_lvl = KDB_NOT_INITIALIZED;
2906 	int i;
2907 
2908 	if (kdb_init_lvl == KDB_INIT_FULL || lvl <= kdb_init_lvl)
2909 		return;
2910 	for (i = kdb_init_lvl; i < lvl; i++) {
2911 		switch (i) {
2912 		case KDB_NOT_INITIALIZED:
2913 			kdb_inittab();		/* Initialize Command Table */
2914 			kdb_initbptab();	/* Initialize Breakpoints */
2915 			break;
2916 		case KDB_INIT_EARLY:
2917 			kdb_cmd_init();		/* Build kdb_cmds tables */
2918 			break;
2919 		}
2920 	}
2921 	kdb_init_lvl = lvl;
2922 }
2923