xref: /openbmc/linux/kernel/debug/kdb/kdb_io.c (revision 1fa6ac37)
1 /*
2  * Kernel Debugger Architecture Independent Console I/O handler
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-2006 Silicon Graphics, Inc.  All Rights Reserved.
9  * Copyright (c) 2009 Wind River Systems, Inc.  All Rights Reserved.
10  */
11 
12 #include <linux/module.h>
13 #include <linux/types.h>
14 #include <linux/ctype.h>
15 #include <linux/kernel.h>
16 #include <linux/init.h>
17 #include <linux/kdev_t.h>
18 #include <linux/console.h>
19 #include <linux/string.h>
20 #include <linux/sched.h>
21 #include <linux/smp.h>
22 #include <linux/nmi.h>
23 #include <linux/delay.h>
24 #include <linux/kgdb.h>
25 #include <linux/kdb.h>
26 #include <linux/kallsyms.h>
27 #include "kdb_private.h"
28 
29 #define CMD_BUFLEN 256
30 char kdb_prompt_str[CMD_BUFLEN];
31 
32 int kdb_trap_printk;
33 
34 static void kgdb_transition_check(char *buffer)
35 {
36 	int slen = strlen(buffer);
37 	if (strncmp(buffer, "$?#3f", slen) != 0 &&
38 	    strncmp(buffer, "$qSupported#37", slen) != 0 &&
39 	    strncmp(buffer, "+$qSupported#37", slen) != 0) {
40 		KDB_STATE_SET(KGDB_TRANS);
41 		kdb_printf("%s", buffer);
42 	}
43 }
44 
45 static int kdb_read_get_key(char *buffer, size_t bufsize)
46 {
47 #define ESCAPE_UDELAY 1000
48 #define ESCAPE_DELAY (2*1000000/ESCAPE_UDELAY) /* 2 seconds worth of udelays */
49 	char escape_data[5];	/* longest vt100 escape sequence is 4 bytes */
50 	char *ped = escape_data;
51 	int escape_delay = 0;
52 	get_char_func *f, *f_escape = NULL;
53 	int key;
54 
55 	for (f = &kdb_poll_funcs[0]; ; ++f) {
56 		if (*f == NULL) {
57 			/* Reset NMI watchdog once per poll loop */
58 			touch_nmi_watchdog();
59 			f = &kdb_poll_funcs[0];
60 		}
61 		if (escape_delay == 2) {
62 			*ped = '\0';
63 			ped = escape_data;
64 			--escape_delay;
65 		}
66 		if (escape_delay == 1) {
67 			key = *ped++;
68 			if (!*ped)
69 				--escape_delay;
70 			break;
71 		}
72 		key = (*f)();
73 		if (key == -1) {
74 			if (escape_delay) {
75 				udelay(ESCAPE_UDELAY);
76 				--escape_delay;
77 			}
78 			continue;
79 		}
80 		if (bufsize <= 2) {
81 			if (key == '\r')
82 				key = '\n';
83 			*buffer++ = key;
84 			*buffer = '\0';
85 			return -1;
86 		}
87 		if (escape_delay == 0 && key == '\e') {
88 			escape_delay = ESCAPE_DELAY;
89 			ped = escape_data;
90 			f_escape = f;
91 		}
92 		if (escape_delay) {
93 			*ped++ = key;
94 			if (f_escape != f) {
95 				escape_delay = 2;
96 				continue;
97 			}
98 			if (ped - escape_data == 1) {
99 				/* \e */
100 				continue;
101 			} else if (ped - escape_data == 2) {
102 				/* \e<something> */
103 				if (key != '[')
104 					escape_delay = 2;
105 				continue;
106 			} else if (ped - escape_data == 3) {
107 				/* \e[<something> */
108 				int mapkey = 0;
109 				switch (key) {
110 				case 'A': /* \e[A, up arrow */
111 					mapkey = 16;
112 					break;
113 				case 'B': /* \e[B, down arrow */
114 					mapkey = 14;
115 					break;
116 				case 'C': /* \e[C, right arrow */
117 					mapkey = 6;
118 					break;
119 				case 'D': /* \e[D, left arrow */
120 					mapkey = 2;
121 					break;
122 				case '1': /* dropthrough */
123 				case '3': /* dropthrough */
124 				/* \e[<1,3,4>], may be home, del, end */
125 				case '4':
126 					mapkey = -1;
127 					break;
128 				}
129 				if (mapkey != -1) {
130 					if (mapkey > 0) {
131 						escape_data[0] = mapkey;
132 						escape_data[1] = '\0';
133 					}
134 					escape_delay = 2;
135 				}
136 				continue;
137 			} else if (ped - escape_data == 4) {
138 				/* \e[<1,3,4><something> */
139 				int mapkey = 0;
140 				if (key == '~') {
141 					switch (escape_data[2]) {
142 					case '1': /* \e[1~, home */
143 						mapkey = 1;
144 						break;
145 					case '3': /* \e[3~, del */
146 						mapkey = 4;
147 						break;
148 					case '4': /* \e[4~, end */
149 						mapkey = 5;
150 						break;
151 					}
152 				}
153 				if (mapkey > 0) {
154 					escape_data[0] = mapkey;
155 					escape_data[1] = '\0';
156 				}
157 				escape_delay = 2;
158 				continue;
159 			}
160 		}
161 		break;	/* A key to process */
162 	}
163 	return key;
164 }
165 
166 /*
167  * kdb_read
168  *
169  *	This function reads a string of characters, terminated by
170  *	a newline, or by reaching the end of the supplied buffer,
171  *	from the current kernel debugger console device.
172  * Parameters:
173  *	buffer	- Address of character buffer to receive input characters.
174  *	bufsize - size, in bytes, of the character buffer
175  * Returns:
176  *	Returns a pointer to the buffer containing the received
177  *	character string.  This string will be terminated by a
178  *	newline character.
179  * Locking:
180  *	No locks are required to be held upon entry to this
181  *	function.  It is not reentrant - it relies on the fact
182  *	that while kdb is running on only one "master debug" cpu.
183  * Remarks:
184  *
185  * The buffer size must be >= 2.  A buffer size of 2 means that the caller only
186  * wants a single key.
187  *
188  * An escape key could be the start of a vt100 control sequence such as \e[D
189  * (left arrow) or it could be a character in its own right.  The standard
190  * method for detecting the difference is to wait for 2 seconds to see if there
191  * are any other characters.  kdb is complicated by the lack of a timer service
192  * (interrupts are off), by multiple input sources and by the need to sometimes
193  * return after just one key.  Escape sequence processing has to be done as
194  * states in the polling loop.
195  */
196 
197 static char *kdb_read(char *buffer, size_t bufsize)
198 {
199 	char *cp = buffer;
200 	char *bufend = buffer+bufsize-2;	/* Reserve space for newline
201 						 * and null byte */
202 	char *lastchar;
203 	char *p_tmp;
204 	char tmp;
205 	static char tmpbuffer[CMD_BUFLEN];
206 	int len = strlen(buffer);
207 	int len_tmp;
208 	int tab = 0;
209 	int count;
210 	int i;
211 	int diag, dtab_count;
212 	int key;
213 
214 
215 	diag = kdbgetintenv("DTABCOUNT", &dtab_count);
216 	if (diag)
217 		dtab_count = 30;
218 
219 	if (len > 0) {
220 		cp += len;
221 		if (*(buffer+len-1) == '\n')
222 			cp--;
223 	}
224 
225 	lastchar = cp;
226 	*cp = '\0';
227 	kdb_printf("%s", buffer);
228 poll_again:
229 	key = kdb_read_get_key(buffer, bufsize);
230 	if (key == -1)
231 		return buffer;
232 	if (key != 9)
233 		tab = 0;
234 	switch (key) {
235 	case 8: /* backspace */
236 		if (cp > buffer) {
237 			if (cp < lastchar) {
238 				memcpy(tmpbuffer, cp, lastchar - cp);
239 				memcpy(cp-1, tmpbuffer, lastchar - cp);
240 			}
241 			*(--lastchar) = '\0';
242 			--cp;
243 			kdb_printf("\b%s \r", cp);
244 			tmp = *cp;
245 			*cp = '\0';
246 			kdb_printf(kdb_prompt_str);
247 			kdb_printf("%s", buffer);
248 			*cp = tmp;
249 		}
250 		break;
251 	case 13: /* enter */
252 		*lastchar++ = '\n';
253 		*lastchar++ = '\0';
254 		kdb_printf("\n");
255 		return buffer;
256 	case 4: /* Del */
257 		if (cp < lastchar) {
258 			memcpy(tmpbuffer, cp+1, lastchar - cp - 1);
259 			memcpy(cp, tmpbuffer, lastchar - cp - 1);
260 			*(--lastchar) = '\0';
261 			kdb_printf("%s \r", cp);
262 			tmp = *cp;
263 			*cp = '\0';
264 			kdb_printf(kdb_prompt_str);
265 			kdb_printf("%s", buffer);
266 			*cp = tmp;
267 		}
268 		break;
269 	case 1: /* Home */
270 		if (cp > buffer) {
271 			kdb_printf("\r");
272 			kdb_printf(kdb_prompt_str);
273 			cp = buffer;
274 		}
275 		break;
276 	case 5: /* End */
277 		if (cp < lastchar) {
278 			kdb_printf("%s", cp);
279 			cp = lastchar;
280 		}
281 		break;
282 	case 2: /* Left */
283 		if (cp > buffer) {
284 			kdb_printf("\b");
285 			--cp;
286 		}
287 		break;
288 	case 14: /* Down */
289 		memset(tmpbuffer, ' ',
290 		       strlen(kdb_prompt_str) + (lastchar-buffer));
291 		*(tmpbuffer+strlen(kdb_prompt_str) +
292 		  (lastchar-buffer)) = '\0';
293 		kdb_printf("\r%s\r", tmpbuffer);
294 		*lastchar = (char)key;
295 		*(lastchar+1) = '\0';
296 		return lastchar;
297 	case 6: /* Right */
298 		if (cp < lastchar) {
299 			kdb_printf("%c", *cp);
300 			++cp;
301 		}
302 		break;
303 	case 16: /* Up */
304 		memset(tmpbuffer, ' ',
305 		       strlen(kdb_prompt_str) + (lastchar-buffer));
306 		*(tmpbuffer+strlen(kdb_prompt_str) +
307 		  (lastchar-buffer)) = '\0';
308 		kdb_printf("\r%s\r", tmpbuffer);
309 		*lastchar = (char)key;
310 		*(lastchar+1) = '\0';
311 		return lastchar;
312 	case 9: /* Tab */
313 		if (tab < 2)
314 			++tab;
315 		p_tmp = buffer;
316 		while (*p_tmp == ' ')
317 			p_tmp++;
318 		if (p_tmp > cp)
319 			break;
320 		memcpy(tmpbuffer, p_tmp, cp-p_tmp);
321 		*(tmpbuffer + (cp-p_tmp)) = '\0';
322 		p_tmp = strrchr(tmpbuffer, ' ');
323 		if (p_tmp)
324 			++p_tmp;
325 		else
326 			p_tmp = tmpbuffer;
327 		len = strlen(p_tmp);
328 		count = kallsyms_symbol_complete(p_tmp,
329 						 sizeof(tmpbuffer) -
330 						 (p_tmp - tmpbuffer));
331 		if (tab == 2 && count > 0) {
332 			kdb_printf("\n%d symbols are found.", count);
333 			if (count > dtab_count) {
334 				count = dtab_count;
335 				kdb_printf(" But only first %d symbols will"
336 					   " be printed.\nYou can change the"
337 					   " environment variable DTABCOUNT.",
338 					   count);
339 			}
340 			kdb_printf("\n");
341 			for (i = 0; i < count; i++) {
342 				if (kallsyms_symbol_next(p_tmp, i) < 0)
343 					break;
344 				kdb_printf("%s ", p_tmp);
345 				*(p_tmp + len) = '\0';
346 			}
347 			if (i >= dtab_count)
348 				kdb_printf("...");
349 			kdb_printf("\n");
350 			kdb_printf(kdb_prompt_str);
351 			kdb_printf("%s", buffer);
352 		} else if (tab != 2 && count > 0) {
353 			len_tmp = strlen(p_tmp);
354 			strncpy(p_tmp+len_tmp, cp, lastchar-cp+1);
355 			len_tmp = strlen(p_tmp);
356 			strncpy(cp, p_tmp+len, len_tmp-len + 1);
357 			len = len_tmp - len;
358 			kdb_printf("%s", cp);
359 			cp += len;
360 			lastchar += len;
361 		}
362 		kdb_nextline = 1; /* reset output line number */
363 		break;
364 	default:
365 		if (key >= 32 && lastchar < bufend) {
366 			if (cp < lastchar) {
367 				memcpy(tmpbuffer, cp, lastchar - cp);
368 				memcpy(cp+1, tmpbuffer, lastchar - cp);
369 				*++lastchar = '\0';
370 				*cp = key;
371 				kdb_printf("%s\r", cp);
372 				++cp;
373 				tmp = *cp;
374 				*cp = '\0';
375 				kdb_printf(kdb_prompt_str);
376 				kdb_printf("%s", buffer);
377 				*cp = tmp;
378 			} else {
379 				*++lastchar = '\0';
380 				*cp++ = key;
381 				/* The kgdb transition check will hide
382 				 * printed characters if we think that
383 				 * kgdb is connecting, until the check
384 				 * fails */
385 				if (!KDB_STATE(KGDB_TRANS))
386 					kgdb_transition_check(buffer);
387 				else
388 					kdb_printf("%c", key);
389 			}
390 			/* Special escape to kgdb */
391 			if (lastchar - buffer >= 5 &&
392 			    strcmp(lastchar - 5, "$?#3f") == 0) {
393 				strcpy(buffer, "kgdb");
394 				KDB_STATE_SET(DOING_KGDB);
395 				return buffer;
396 			}
397 			if (lastchar - buffer >= 14 &&
398 			    strcmp(lastchar - 14, "$qSupported#37") == 0) {
399 				strcpy(buffer, "kgdb");
400 				KDB_STATE_SET(DOING_KGDB2);
401 				return buffer;
402 			}
403 		}
404 		break;
405 	}
406 	goto poll_again;
407 }
408 
409 /*
410  * kdb_getstr
411  *
412  *	Print the prompt string and read a command from the
413  *	input device.
414  *
415  * Parameters:
416  *	buffer	Address of buffer to receive command
417  *	bufsize Size of buffer in bytes
418  *	prompt	Pointer to string to use as prompt string
419  * Returns:
420  *	Pointer to command buffer.
421  * Locking:
422  *	None.
423  * Remarks:
424  *	For SMP kernels, the processor number will be
425  *	substituted for %d, %x or %o in the prompt.
426  */
427 
428 char *kdb_getstr(char *buffer, size_t bufsize, char *prompt)
429 {
430 	if (prompt && kdb_prompt_str != prompt)
431 		strncpy(kdb_prompt_str, prompt, CMD_BUFLEN);
432 	kdb_printf(kdb_prompt_str);
433 	kdb_nextline = 1;	/* Prompt and input resets line number */
434 	return kdb_read(buffer, bufsize);
435 }
436 
437 /*
438  * kdb_input_flush
439  *
440  *	Get rid of any buffered console input.
441  *
442  * Parameters:
443  *	none
444  * Returns:
445  *	nothing
446  * Locking:
447  *	none
448  * Remarks:
449  *	Call this function whenever you want to flush input.  If there is any
450  *	outstanding input, it ignores all characters until there has been no
451  *	data for approximately 1ms.
452  */
453 
454 static void kdb_input_flush(void)
455 {
456 	get_char_func *f;
457 	int res;
458 	int flush_delay = 1;
459 	while (flush_delay) {
460 		flush_delay--;
461 empty:
462 		touch_nmi_watchdog();
463 		for (f = &kdb_poll_funcs[0]; *f; ++f) {
464 			res = (*f)();
465 			if (res != -1) {
466 				flush_delay = 1;
467 				goto empty;
468 			}
469 		}
470 		if (flush_delay)
471 			mdelay(1);
472 	}
473 }
474 
475 /*
476  * kdb_printf
477  *
478  *	Print a string to the output device(s).
479  *
480  * Parameters:
481  *	printf-like format and optional args.
482  * Returns:
483  *	0
484  * Locking:
485  *	None.
486  * Remarks:
487  *	use 'kdbcons->write()' to avoid polluting 'log_buf' with
488  *	kdb output.
489  *
490  *  If the user is doing a cmd args | grep srch
491  *  then kdb_grepping_flag is set.
492  *  In that case we need to accumulate full lines (ending in \n) before
493  *  searching for the pattern.
494  */
495 
496 static char kdb_buffer[256];	/* A bit too big to go on stack */
497 static char *next_avail = kdb_buffer;
498 static int  size_avail;
499 static int  suspend_grep;
500 
501 /*
502  * search arg1 to see if it contains arg2
503  * (kdmain.c provides flags for ^pat and pat$)
504  *
505  * return 1 for found, 0 for not found
506  */
507 static int kdb_search_string(char *searched, char *searchfor)
508 {
509 	char firstchar, *cp;
510 	int len1, len2;
511 
512 	/* not counting the newline at the end of "searched" */
513 	len1 = strlen(searched)-1;
514 	len2 = strlen(searchfor);
515 	if (len1 < len2)
516 		return 0;
517 	if (kdb_grep_leading && kdb_grep_trailing && len1 != len2)
518 		return 0;
519 	if (kdb_grep_leading) {
520 		if (!strncmp(searched, searchfor, len2))
521 			return 1;
522 	} else if (kdb_grep_trailing) {
523 		if (!strncmp(searched+len1-len2, searchfor, len2))
524 			return 1;
525 	} else {
526 		firstchar = *searchfor;
527 		cp = searched;
528 		while ((cp = strchr(cp, firstchar))) {
529 			if (!strncmp(cp, searchfor, len2))
530 				return 1;
531 			cp++;
532 		}
533 	}
534 	return 0;
535 }
536 
537 int vkdb_printf(const char *fmt, va_list ap)
538 {
539 	int diag;
540 	int linecount;
541 	int logging, saved_loglevel = 0;
542 	int saved_trap_printk;
543 	int got_printf_lock = 0;
544 	int retlen = 0;
545 	int fnd, len;
546 	char *cp, *cp2, *cphold = NULL, replaced_byte = ' ';
547 	char *moreprompt = "more> ";
548 	struct console *c = console_drivers;
549 	static DEFINE_SPINLOCK(kdb_printf_lock);
550 	unsigned long uninitialized_var(flags);
551 
552 	preempt_disable();
553 	saved_trap_printk = kdb_trap_printk;
554 	kdb_trap_printk = 0;
555 
556 	/* Serialize kdb_printf if multiple cpus try to write at once.
557 	 * But if any cpu goes recursive in kdb, just print the output,
558 	 * even if it is interleaved with any other text.
559 	 */
560 	if (!KDB_STATE(PRINTF_LOCK)) {
561 		KDB_STATE_SET(PRINTF_LOCK);
562 		spin_lock_irqsave(&kdb_printf_lock, flags);
563 		got_printf_lock = 1;
564 		atomic_inc(&kdb_event);
565 	} else {
566 		__acquire(kdb_printf_lock);
567 	}
568 
569 	diag = kdbgetintenv("LINES", &linecount);
570 	if (diag || linecount <= 1)
571 		linecount = 24;
572 
573 	diag = kdbgetintenv("LOGGING", &logging);
574 	if (diag)
575 		logging = 0;
576 
577 	if (!kdb_grepping_flag || suspend_grep) {
578 		/* normally, every vsnprintf starts a new buffer */
579 		next_avail = kdb_buffer;
580 		size_avail = sizeof(kdb_buffer);
581 	}
582 	vsnprintf(next_avail, size_avail, fmt, ap);
583 
584 	/*
585 	 * If kdb_parse() found that the command was cmd xxx | grep yyy
586 	 * then kdb_grepping_flag is set, and kdb_grep_string contains yyy
587 	 *
588 	 * Accumulate the print data up to a newline before searching it.
589 	 * (vsnprintf does null-terminate the string that it generates)
590 	 */
591 
592 	/* skip the search if prints are temporarily unconditional */
593 	if (!suspend_grep && kdb_grepping_flag) {
594 		cp = strchr(kdb_buffer, '\n');
595 		if (!cp) {
596 			/*
597 			 * Special cases that don't end with newlines
598 			 * but should be written without one:
599 			 *   The "[nn]kdb> " prompt should
600 			 *   appear at the front of the buffer.
601 			 *
602 			 *   The "[nn]more " prompt should also be
603 			 *     (MOREPROMPT -> moreprompt)
604 			 *   written *   but we print that ourselves,
605 			 *   we set the suspend_grep flag to make
606 			 *   it unconditional.
607 			 *
608 			 */
609 			if (next_avail == kdb_buffer) {
610 				/*
611 				 * these should occur after a newline,
612 				 * so they will be at the front of the
613 				 * buffer
614 				 */
615 				cp2 = kdb_buffer;
616 				len = strlen(kdb_prompt_str);
617 				if (!strncmp(cp2, kdb_prompt_str, len)) {
618 					/*
619 					 * We're about to start a new
620 					 * command, so we can go back
621 					 * to normal mode.
622 					 */
623 					kdb_grepping_flag = 0;
624 					goto kdb_printit;
625 				}
626 			}
627 			/* no newline; don't search/write the buffer
628 			   until one is there */
629 			len = strlen(kdb_buffer);
630 			next_avail = kdb_buffer + len;
631 			size_avail = sizeof(kdb_buffer) - len;
632 			goto kdb_print_out;
633 		}
634 
635 		/*
636 		 * The newline is present; print through it or discard
637 		 * it, depending on the results of the search.
638 		 */
639 		cp++;	 	     /* to byte after the newline */
640 		replaced_byte = *cp; /* remember what/where it was */
641 		cphold = cp;
642 		*cp = '\0';	     /* end the string for our search */
643 
644 		/*
645 		 * We now have a newline at the end of the string
646 		 * Only continue with this output if it contains the
647 		 * search string.
648 		 */
649 		fnd = kdb_search_string(kdb_buffer, kdb_grep_string);
650 		if (!fnd) {
651 			/*
652 			 * At this point the complete line at the start
653 			 * of kdb_buffer can be discarded, as it does
654 			 * not contain what the user is looking for.
655 			 * Shift the buffer left.
656 			 */
657 			*cphold = replaced_byte;
658 			strcpy(kdb_buffer, cphold);
659 			len = strlen(kdb_buffer);
660 			next_avail = kdb_buffer + len;
661 			size_avail = sizeof(kdb_buffer) - len;
662 			goto kdb_print_out;
663 		}
664 		/*
665 		 * at this point the string is a full line and
666 		 * should be printed, up to the null.
667 		 */
668 	}
669 kdb_printit:
670 
671 	/*
672 	 * Write to all consoles.
673 	 */
674 	retlen = strlen(kdb_buffer);
675 	if (!dbg_kdb_mode && kgdb_connected) {
676 		gdbstub_msg_write(kdb_buffer, retlen);
677 	} else {
678 		if (!dbg_io_ops->is_console) {
679 			len = strlen(kdb_buffer);
680 			cp = kdb_buffer;
681 			while (len--) {
682 				dbg_io_ops->write_char(*cp);
683 				cp++;
684 			}
685 		}
686 		while (c) {
687 			c->write(c, kdb_buffer, retlen);
688 			touch_nmi_watchdog();
689 			c = c->next;
690 		}
691 	}
692 	if (logging) {
693 		saved_loglevel = console_loglevel;
694 		console_loglevel = 0;
695 		printk(KERN_INFO "%s", kdb_buffer);
696 	}
697 
698 	if (KDB_STATE(PAGER) && strchr(kdb_buffer, '\n'))
699 		kdb_nextline++;
700 
701 	/* check for having reached the LINES number of printed lines */
702 	if (kdb_nextline == linecount) {
703 		char buf1[16] = "";
704 #if defined(CONFIG_SMP)
705 		char buf2[32];
706 #endif
707 
708 		/* Watch out for recursion here.  Any routine that calls
709 		 * kdb_printf will come back through here.  And kdb_read
710 		 * uses kdb_printf to echo on serial consoles ...
711 		 */
712 		kdb_nextline = 1;	/* In case of recursion */
713 
714 		/*
715 		 * Pause until cr.
716 		 */
717 		moreprompt = kdbgetenv("MOREPROMPT");
718 		if (moreprompt == NULL)
719 			moreprompt = "more> ";
720 
721 #if defined(CONFIG_SMP)
722 		if (strchr(moreprompt, '%')) {
723 			sprintf(buf2, moreprompt, get_cpu());
724 			put_cpu();
725 			moreprompt = buf2;
726 		}
727 #endif
728 
729 		kdb_input_flush();
730 		c = console_drivers;
731 
732 		if (!dbg_io_ops->is_console) {
733 			len = strlen(moreprompt);
734 			cp = moreprompt;
735 			while (len--) {
736 				dbg_io_ops->write_char(*cp);
737 				cp++;
738 			}
739 		}
740 		while (c) {
741 			c->write(c, moreprompt, strlen(moreprompt));
742 			touch_nmi_watchdog();
743 			c = c->next;
744 		}
745 
746 		if (logging)
747 			printk("%s", moreprompt);
748 
749 		kdb_read(buf1, 2); /* '2' indicates to return
750 				    * immediately after getting one key. */
751 		kdb_nextline = 1;	/* Really set output line 1 */
752 
753 		/* empty and reset the buffer: */
754 		kdb_buffer[0] = '\0';
755 		next_avail = kdb_buffer;
756 		size_avail = sizeof(kdb_buffer);
757 		if ((buf1[0] == 'q') || (buf1[0] == 'Q')) {
758 			/* user hit q or Q */
759 			KDB_FLAG_SET(CMD_INTERRUPT); /* command interrupted */
760 			KDB_STATE_CLEAR(PAGER);
761 			/* end of command output; back to normal mode */
762 			kdb_grepping_flag = 0;
763 			kdb_printf("\n");
764 		} else if (buf1[0] == ' ') {
765 			kdb_printf("\n");
766 			suspend_grep = 1; /* for this recursion */
767 		} else if (buf1[0] == '\n') {
768 			kdb_nextline = linecount - 1;
769 			kdb_printf("\r");
770 			suspend_grep = 1; /* for this recursion */
771 		} else if (buf1[0] && buf1[0] != '\n') {
772 			/* user hit something other than enter */
773 			suspend_grep = 1; /* for this recursion */
774 			kdb_printf("\nOnly 'q' or 'Q' are processed at more "
775 				   "prompt, input ignored\n");
776 		} else if (kdb_grepping_flag) {
777 			/* user hit enter */
778 			suspend_grep = 1; /* for this recursion */
779 			kdb_printf("\n");
780 		}
781 		kdb_input_flush();
782 	}
783 
784 	/*
785 	 * For grep searches, shift the printed string left.
786 	 *  replaced_byte contains the character that was overwritten with
787 	 *  the terminating null, and cphold points to the null.
788 	 * Then adjust the notion of available space in the buffer.
789 	 */
790 	if (kdb_grepping_flag && !suspend_grep) {
791 		*cphold = replaced_byte;
792 		strcpy(kdb_buffer, cphold);
793 		len = strlen(kdb_buffer);
794 		next_avail = kdb_buffer + len;
795 		size_avail = sizeof(kdb_buffer) - len;
796 	}
797 
798 kdb_print_out:
799 	suspend_grep = 0; /* end of what may have been a recursive call */
800 	if (logging)
801 		console_loglevel = saved_loglevel;
802 	if (KDB_STATE(PRINTF_LOCK) && got_printf_lock) {
803 		got_printf_lock = 0;
804 		spin_unlock_irqrestore(&kdb_printf_lock, flags);
805 		KDB_STATE_CLEAR(PRINTF_LOCK);
806 		atomic_dec(&kdb_event);
807 	} else {
808 		__release(kdb_printf_lock);
809 	}
810 	kdb_trap_printk = saved_trap_printk;
811 	preempt_enable();
812 	return retlen;
813 }
814 
815 int kdb_printf(const char *fmt, ...)
816 {
817 	va_list ap;
818 	int r;
819 
820 	va_start(ap, fmt);
821 	r = vkdb_printf(fmt, ap);
822 	va_end(ap);
823 
824 	return r;
825 }
826 
827