cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

kdb_io.c (21467B)


      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/types.h>
     13#include <linux/ctype.h>
     14#include <linux/kernel.h>
     15#include <linux/init.h>
     16#include <linux/kdev_t.h>
     17#include <linux/console.h>
     18#include <linux/string.h>
     19#include <linux/sched.h>
     20#include <linux/smp.h>
     21#include <linux/nmi.h>
     22#include <linux/delay.h>
     23#include <linux/kgdb.h>
     24#include <linux/kdb.h>
     25#include <linux/kallsyms.h>
     26#include "kdb_private.h"
     27
     28#define CMD_BUFLEN 256
     29char kdb_prompt_str[CMD_BUFLEN];
     30
     31int kdb_trap_printk;
     32int kdb_printf_cpu = -1;
     33
     34static int kgdb_transition_check(char *buffer)
     35{
     36	if (buffer[0] != '+' && buffer[0] != '$') {
     37		KDB_STATE_SET(KGDB_TRANS);
     38		kdb_printf("%s", buffer);
     39	} else {
     40		int slen = strlen(buffer);
     41		if (slen > 3 && buffer[slen - 3] == '#') {
     42			kdb_gdb_state_pass(buffer);
     43			strcpy(buffer, "kgdb");
     44			KDB_STATE_SET(DOING_KGDB);
     45			return 1;
     46		}
     47	}
     48	return 0;
     49}
     50
     51/**
     52 * kdb_handle_escape() - validity check on an accumulated escape sequence.
     53 * @buf:	Accumulated escape characters to be examined. Note that buf
     54 *		is not a string, it is an array of characters and need not be
     55 *		nil terminated.
     56 * @sz:		Number of accumulated escape characters.
     57 *
     58 * Return: -1 if the escape sequence is unwanted, 0 if it is incomplete,
     59 * otherwise it returns a mapped key value to pass to the upper layers.
     60 */
     61static int kdb_handle_escape(char *buf, size_t sz)
     62{
     63	char *lastkey = buf + sz - 1;
     64
     65	switch (sz) {
     66	case 1:
     67		if (*lastkey == '\e')
     68			return 0;
     69		break;
     70
     71	case 2: /* \e<something> */
     72		if (*lastkey == '[')
     73			return 0;
     74		break;
     75
     76	case 3:
     77		switch (*lastkey) {
     78		case 'A': /* \e[A, up arrow */
     79			return 16;
     80		case 'B': /* \e[B, down arrow */
     81			return 14;
     82		case 'C': /* \e[C, right arrow */
     83			return 6;
     84		case 'D': /* \e[D, left arrow */
     85			return 2;
     86		case '1': /* \e[<1,3,4>], may be home, del, end */
     87		case '3':
     88		case '4':
     89			return 0;
     90		}
     91		break;
     92
     93	case 4:
     94		if (*lastkey == '~') {
     95			switch (buf[2]) {
     96			case '1': /* \e[1~, home */
     97				return 1;
     98			case '3': /* \e[3~, del */
     99				return 4;
    100			case '4': /* \e[4~, end */
    101				return 5;
    102			}
    103		}
    104		break;
    105	}
    106
    107	return -1;
    108}
    109
    110/**
    111 * kdb_getchar() - Read a single character from a kdb console (or consoles).
    112 *
    113 * Other than polling the various consoles that are currently enabled,
    114 * most of the work done in this function is dealing with escape sequences.
    115 *
    116 * An escape key could be the start of a vt100 control sequence such as \e[D
    117 * (left arrow) or it could be a character in its own right.  The standard
    118 * method for detecting the difference is to wait for 2 seconds to see if there
    119 * are any other characters.  kdb is complicated by the lack of a timer service
    120 * (interrupts are off), by multiple input sources. Escape sequence processing
    121 * has to be done as states in the polling loop.
    122 *
    123 * Return: The key pressed or a control code derived from an escape sequence.
    124 */
    125char kdb_getchar(void)
    126{
    127#define ESCAPE_UDELAY 1000
    128#define ESCAPE_DELAY (2*1000000/ESCAPE_UDELAY) /* 2 seconds worth of udelays */
    129	char buf[4];	/* longest vt100 escape sequence is 4 bytes */
    130	char *pbuf = buf;
    131	int escape_delay = 0;
    132	get_char_func *f, *f_prev = NULL;
    133	int key;
    134
    135	for (f = &kdb_poll_funcs[0]; ; ++f) {
    136		if (*f == NULL) {
    137			/* Reset NMI watchdog once per poll loop */
    138			touch_nmi_watchdog();
    139			f = &kdb_poll_funcs[0];
    140		}
    141
    142		key = (*f)();
    143		if (key == -1) {
    144			if (escape_delay) {
    145				udelay(ESCAPE_UDELAY);
    146				if (--escape_delay == 0)
    147					return '\e';
    148			}
    149			continue;
    150		}
    151
    152		/*
    153		 * When the first character is received (or we get a change
    154		 * input source) we set ourselves up to handle an escape
    155		 * sequences (just in case).
    156		 */
    157		if (f_prev != f) {
    158			f_prev = f;
    159			pbuf = buf;
    160			escape_delay = ESCAPE_DELAY;
    161		}
    162
    163		*pbuf++ = key;
    164		key = kdb_handle_escape(buf, pbuf - buf);
    165		if (key < 0) /* no escape sequence; return best character */
    166			return buf[pbuf - buf == 2 ? 1 : 0];
    167		if (key > 0)
    168			return key;
    169	}
    170
    171	unreachable();
    172}
    173
    174/*
    175 * kdb_read
    176 *
    177 *	This function reads a string of characters, terminated by
    178 *	a newline, or by reaching the end of the supplied buffer,
    179 *	from the current kernel debugger console device.
    180 * Parameters:
    181 *	buffer	- Address of character buffer to receive input characters.
    182 *	bufsize - size, in bytes, of the character buffer
    183 * Returns:
    184 *	Returns a pointer to the buffer containing the received
    185 *	character string.  This string will be terminated by a
    186 *	newline character.
    187 * Locking:
    188 *	No locks are required to be held upon entry to this
    189 *	function.  It is not reentrant - it relies on the fact
    190 *	that while kdb is running on only one "master debug" cpu.
    191 * Remarks:
    192 *	The buffer size must be >= 2.
    193 */
    194
    195static char *kdb_read(char *buffer, size_t bufsize)
    196{
    197	char *cp = buffer;
    198	char *bufend = buffer+bufsize-2;	/* Reserve space for newline
    199						 * and null byte */
    200	char *lastchar;
    201	char *p_tmp;
    202	char tmp;
    203	static char tmpbuffer[CMD_BUFLEN];
    204	int len = strlen(buffer);
    205	int len_tmp;
    206	int tab = 0;
    207	int count;
    208	int i;
    209	int diag, dtab_count;
    210	int key, buf_size, ret;
    211
    212
    213	diag = kdbgetintenv("DTABCOUNT", &dtab_count);
    214	if (diag)
    215		dtab_count = 30;
    216
    217	if (len > 0) {
    218		cp += len;
    219		if (*(buffer+len-1) == '\n')
    220			cp--;
    221	}
    222
    223	lastchar = cp;
    224	*cp = '\0';
    225	kdb_printf("%s", buffer);
    226poll_again:
    227	key = kdb_getchar();
    228	if (key != 9)
    229		tab = 0;
    230	switch (key) {
    231	case 8: /* backspace */
    232		if (cp > buffer) {
    233			if (cp < lastchar) {
    234				memcpy(tmpbuffer, cp, lastchar - cp);
    235				memcpy(cp-1, tmpbuffer, lastchar - cp);
    236			}
    237			*(--lastchar) = '\0';
    238			--cp;
    239			kdb_printf("\b%s \r", cp);
    240			tmp = *cp;
    241			*cp = '\0';
    242			kdb_printf(kdb_prompt_str);
    243			kdb_printf("%s", buffer);
    244			*cp = tmp;
    245		}
    246		break;
    247	case 13: /* enter */
    248		*lastchar++ = '\n';
    249		*lastchar++ = '\0';
    250		if (!KDB_STATE(KGDB_TRANS)) {
    251			KDB_STATE_SET(KGDB_TRANS);
    252			kdb_printf("%s", buffer);
    253		}
    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		buf_size = sizeof(tmpbuffer) - (p_tmp - tmpbuffer);
    329		count = kallsyms_symbol_complete(p_tmp, buf_size);
    330		if (tab == 2 && count > 0) {
    331			kdb_printf("\n%d symbols are found.", count);
    332			if (count > dtab_count) {
    333				count = dtab_count;
    334				kdb_printf(" But only first %d symbols will"
    335					   " be printed.\nYou can change the"
    336					   " environment variable DTABCOUNT.",
    337					   count);
    338			}
    339			kdb_printf("\n");
    340			for (i = 0; i < count; i++) {
    341				ret = kallsyms_symbol_next(p_tmp, i, buf_size);
    342				if (WARN_ON(!ret))
    343					break;
    344				if (ret != -E2BIG)
    345					kdb_printf("%s ", p_tmp);
    346				else
    347					kdb_printf("%s... ", p_tmp);
    348				*(p_tmp + len) = '\0';
    349			}
    350			if (i >= dtab_count)
    351				kdb_printf("...");
    352			kdb_printf("\n");
    353			kdb_printf(kdb_prompt_str);
    354			kdb_printf("%s", buffer);
    355		} else if (tab != 2 && count > 0) {
    356			len_tmp = strlen(p_tmp);
    357			strncpy(p_tmp+len_tmp, cp, lastchar-cp+1);
    358			len_tmp = strlen(p_tmp);
    359			strncpy(cp, p_tmp+len, len_tmp-len + 1);
    360			len = len_tmp - len;
    361			kdb_printf("%s", cp);
    362			cp += len;
    363			lastchar += len;
    364		}
    365		kdb_nextline = 1; /* reset output line number */
    366		break;
    367	default:
    368		if (key >= 32 && lastchar < bufend) {
    369			if (cp < lastchar) {
    370				memcpy(tmpbuffer, cp, lastchar - cp);
    371				memcpy(cp+1, tmpbuffer, lastchar - cp);
    372				*++lastchar = '\0';
    373				*cp = key;
    374				kdb_printf("%s\r", cp);
    375				++cp;
    376				tmp = *cp;
    377				*cp = '\0';
    378				kdb_printf(kdb_prompt_str);
    379				kdb_printf("%s", buffer);
    380				*cp = tmp;
    381			} else {
    382				*++lastchar = '\0';
    383				*cp++ = key;
    384				/* The kgdb transition check will hide
    385				 * printed characters if we think that
    386				 * kgdb is connecting, until the check
    387				 * fails */
    388				if (!KDB_STATE(KGDB_TRANS)) {
    389					if (kgdb_transition_check(buffer))
    390						return buffer;
    391				} else {
    392					kdb_printf("%c", key);
    393				}
    394			}
    395			/* Special escape to kgdb */
    396			if (lastchar - buffer >= 5 &&
    397			    strcmp(lastchar - 5, "$?#3f") == 0) {
    398				kdb_gdb_state_pass(lastchar - 5);
    399				strcpy(buffer, "kgdb");
    400				KDB_STATE_SET(DOING_KGDB);
    401				return buffer;
    402			}
    403			if (lastchar - buffer >= 11 &&
    404			    strcmp(lastchar - 11, "$qSupported") == 0) {
    405				kdb_gdb_state_pass(lastchar - 11);
    406				strcpy(buffer, "kgdb");
    407				KDB_STATE_SET(DOING_KGDB);
    408				return buffer;
    409			}
    410		}
    411		break;
    412	}
    413	goto poll_again;
    414}
    415
    416/*
    417 * kdb_getstr
    418 *
    419 *	Print the prompt string and read a command from the
    420 *	input device.
    421 *
    422 * Parameters:
    423 *	buffer	Address of buffer to receive command
    424 *	bufsize Size of buffer in bytes
    425 *	prompt	Pointer to string to use as prompt string
    426 * Returns:
    427 *	Pointer to command buffer.
    428 * Locking:
    429 *	None.
    430 * Remarks:
    431 *	For SMP kernels, the processor number will be
    432 *	substituted for %d, %x or %o in the prompt.
    433 */
    434
    435char *kdb_getstr(char *buffer, size_t bufsize, const char *prompt)
    436{
    437	if (prompt && kdb_prompt_str != prompt)
    438		strscpy(kdb_prompt_str, prompt, CMD_BUFLEN);
    439	kdb_printf(kdb_prompt_str);
    440	kdb_nextline = 1;	/* Prompt and input resets line number */
    441	return kdb_read(buffer, bufsize);
    442}
    443
    444/*
    445 * kdb_input_flush
    446 *
    447 *	Get rid of any buffered console input.
    448 *
    449 * Parameters:
    450 *	none
    451 * Returns:
    452 *	nothing
    453 * Locking:
    454 *	none
    455 * Remarks:
    456 *	Call this function whenever you want to flush input.  If there is any
    457 *	outstanding input, it ignores all characters until there has been no
    458 *	data for approximately 1ms.
    459 */
    460
    461static void kdb_input_flush(void)
    462{
    463	get_char_func *f;
    464	int res;
    465	int flush_delay = 1;
    466	while (flush_delay) {
    467		flush_delay--;
    468empty:
    469		touch_nmi_watchdog();
    470		for (f = &kdb_poll_funcs[0]; *f; ++f) {
    471			res = (*f)();
    472			if (res != -1) {
    473				flush_delay = 1;
    474				goto empty;
    475			}
    476		}
    477		if (flush_delay)
    478			mdelay(1);
    479	}
    480}
    481
    482/*
    483 * kdb_printf
    484 *
    485 *	Print a string to the output device(s).
    486 *
    487 * Parameters:
    488 *	printf-like format and optional args.
    489 * Returns:
    490 *	0
    491 * Locking:
    492 *	None.
    493 * Remarks:
    494 *	use 'kdbcons->write()' to avoid polluting 'log_buf' with
    495 *	kdb output.
    496 *
    497 *  If the user is doing a cmd args | grep srch
    498 *  then kdb_grepping_flag is set.
    499 *  In that case we need to accumulate full lines (ending in \n) before
    500 *  searching for the pattern.
    501 */
    502
    503static char kdb_buffer[256];	/* A bit too big to go on stack */
    504static char *next_avail = kdb_buffer;
    505static int  size_avail;
    506static int  suspend_grep;
    507
    508/*
    509 * search arg1 to see if it contains arg2
    510 * (kdmain.c provides flags for ^pat and pat$)
    511 *
    512 * return 1 for found, 0 for not found
    513 */
    514static int kdb_search_string(char *searched, char *searchfor)
    515{
    516	char firstchar, *cp;
    517	int len1, len2;
    518
    519	/* not counting the newline at the end of "searched" */
    520	len1 = strlen(searched)-1;
    521	len2 = strlen(searchfor);
    522	if (len1 < len2)
    523		return 0;
    524	if (kdb_grep_leading && kdb_grep_trailing && len1 != len2)
    525		return 0;
    526	if (kdb_grep_leading) {
    527		if (!strncmp(searched, searchfor, len2))
    528			return 1;
    529	} else if (kdb_grep_trailing) {
    530		if (!strncmp(searched+len1-len2, searchfor, len2))
    531			return 1;
    532	} else {
    533		firstchar = *searchfor;
    534		cp = searched;
    535		while ((cp = strchr(cp, firstchar))) {
    536			if (!strncmp(cp, searchfor, len2))
    537				return 1;
    538			cp++;
    539		}
    540	}
    541	return 0;
    542}
    543
    544static void kdb_msg_write(const char *msg, int msg_len)
    545{
    546	struct console *c;
    547	const char *cp;
    548	int len;
    549
    550	if (msg_len == 0)
    551		return;
    552
    553	cp = msg;
    554	len = msg_len;
    555
    556	while (len--) {
    557		dbg_io_ops->write_char(*cp);
    558		cp++;
    559	}
    560
    561	for_each_console(c) {
    562		if (!(c->flags & CON_ENABLED))
    563			continue;
    564		if (c == dbg_io_ops->cons)
    565			continue;
    566		/*
    567		 * Set oops_in_progress to encourage the console drivers to
    568		 * disregard their internal spin locks: in the current calling
    569		 * context the risk of deadlock is a bigger problem than risks
    570		 * due to re-entering the console driver. We operate directly on
    571		 * oops_in_progress rather than using bust_spinlocks() because
    572		 * the calls bust_spinlocks() makes on exit are not appropriate
    573		 * for this calling context.
    574		 */
    575		++oops_in_progress;
    576		c->write(c, msg, msg_len);
    577		--oops_in_progress;
    578		touch_nmi_watchdog();
    579	}
    580}
    581
    582int vkdb_printf(enum kdb_msgsrc src, const char *fmt, va_list ap)
    583{
    584	int diag;
    585	int linecount;
    586	int colcount;
    587	int logging, saved_loglevel = 0;
    588	int retlen = 0;
    589	int fnd, len;
    590	int this_cpu, old_cpu;
    591	char *cp, *cp2, *cphold = NULL, replaced_byte = ' ';
    592	char *moreprompt = "more> ";
    593	unsigned long flags;
    594
    595	/* Serialize kdb_printf if multiple cpus try to write at once.
    596	 * But if any cpu goes recursive in kdb, just print the output,
    597	 * even if it is interleaved with any other text.
    598	 */
    599	local_irq_save(flags);
    600	this_cpu = smp_processor_id();
    601	for (;;) {
    602		old_cpu = cmpxchg(&kdb_printf_cpu, -1, this_cpu);
    603		if (old_cpu == -1 || old_cpu == this_cpu)
    604			break;
    605
    606		cpu_relax();
    607	}
    608
    609	diag = kdbgetintenv("LINES", &linecount);
    610	if (diag || linecount <= 1)
    611		linecount = 24;
    612
    613	diag = kdbgetintenv("COLUMNS", &colcount);
    614	if (diag || colcount <= 1)
    615		colcount = 80;
    616
    617	diag = kdbgetintenv("LOGGING", &logging);
    618	if (diag)
    619		logging = 0;
    620
    621	if (!kdb_grepping_flag || suspend_grep) {
    622		/* normally, every vsnprintf starts a new buffer */
    623		next_avail = kdb_buffer;
    624		size_avail = sizeof(kdb_buffer);
    625	}
    626	vsnprintf(next_avail, size_avail, fmt, ap);
    627
    628	/*
    629	 * If kdb_parse() found that the command was cmd xxx | grep yyy
    630	 * then kdb_grepping_flag is set, and kdb_grep_string contains yyy
    631	 *
    632	 * Accumulate the print data up to a newline before searching it.
    633	 * (vsnprintf does null-terminate the string that it generates)
    634	 */
    635
    636	/* skip the search if prints are temporarily unconditional */
    637	if (!suspend_grep && kdb_grepping_flag) {
    638		cp = strchr(kdb_buffer, '\n');
    639		if (!cp) {
    640			/*
    641			 * Special cases that don't end with newlines
    642			 * but should be written without one:
    643			 *   The "[nn]kdb> " prompt should
    644			 *   appear at the front of the buffer.
    645			 *
    646			 *   The "[nn]more " prompt should also be
    647			 *     (MOREPROMPT -> moreprompt)
    648			 *   written *   but we print that ourselves,
    649			 *   we set the suspend_grep flag to make
    650			 *   it unconditional.
    651			 *
    652			 */
    653			if (next_avail == kdb_buffer) {
    654				/*
    655				 * these should occur after a newline,
    656				 * so they will be at the front of the
    657				 * buffer
    658				 */
    659				cp2 = kdb_buffer;
    660				len = strlen(kdb_prompt_str);
    661				if (!strncmp(cp2, kdb_prompt_str, len)) {
    662					/*
    663					 * We're about to start a new
    664					 * command, so we can go back
    665					 * to normal mode.
    666					 */
    667					kdb_grepping_flag = 0;
    668					goto kdb_printit;
    669				}
    670			}
    671			/* no newline; don't search/write the buffer
    672			   until one is there */
    673			len = strlen(kdb_buffer);
    674			next_avail = kdb_buffer + len;
    675			size_avail = sizeof(kdb_buffer) - len;
    676			goto kdb_print_out;
    677		}
    678
    679		/*
    680		 * The newline is present; print through it or discard
    681		 * it, depending on the results of the search.
    682		 */
    683		cp++;	 	     /* to byte after the newline */
    684		replaced_byte = *cp; /* remember what/where it was */
    685		cphold = cp;
    686		*cp = '\0';	     /* end the string for our search */
    687
    688		/*
    689		 * We now have a newline at the end of the string
    690		 * Only continue with this output if it contains the
    691		 * search string.
    692		 */
    693		fnd = kdb_search_string(kdb_buffer, kdb_grep_string);
    694		if (!fnd) {
    695			/*
    696			 * At this point the complete line at the start
    697			 * of kdb_buffer can be discarded, as it does
    698			 * not contain what the user is looking for.
    699			 * Shift the buffer left.
    700			 */
    701			*cphold = replaced_byte;
    702			strcpy(kdb_buffer, cphold);
    703			len = strlen(kdb_buffer);
    704			next_avail = kdb_buffer + len;
    705			size_avail = sizeof(kdb_buffer) - len;
    706			goto kdb_print_out;
    707		}
    708		if (kdb_grepping_flag >= KDB_GREPPING_FLAG_SEARCH) {
    709			/*
    710			 * This was a interactive search (using '/' at more
    711			 * prompt) and it has completed. Replace the \0 with
    712			 * its original value to ensure multi-line strings
    713			 * are handled properly, and return to normal mode.
    714			 */
    715			*cphold = replaced_byte;
    716			kdb_grepping_flag = 0;
    717		}
    718		/*
    719		 * at this point the string is a full line and
    720		 * should be printed, up to the null.
    721		 */
    722	}
    723kdb_printit:
    724
    725	/*
    726	 * Write to all consoles.
    727	 */
    728	retlen = strlen(kdb_buffer);
    729	cp = (char *) printk_skip_headers(kdb_buffer);
    730	if (!dbg_kdb_mode && kgdb_connected)
    731		gdbstub_msg_write(cp, retlen - (cp - kdb_buffer));
    732	else
    733		kdb_msg_write(cp, retlen - (cp - kdb_buffer));
    734
    735	if (logging) {
    736		saved_loglevel = console_loglevel;
    737		console_loglevel = CONSOLE_LOGLEVEL_SILENT;
    738		if (printk_get_level(kdb_buffer) || src == KDB_MSGSRC_PRINTK)
    739			printk("%s", kdb_buffer);
    740		else
    741			pr_info("%s", kdb_buffer);
    742	}
    743
    744	if (KDB_STATE(PAGER)) {
    745		/*
    746		 * Check printed string to decide how to bump the
    747		 * kdb_nextline to control when the more prompt should
    748		 * show up.
    749		 */
    750		int got = 0;
    751		len = retlen;
    752		while (len--) {
    753			if (kdb_buffer[len] == '\n') {
    754				kdb_nextline++;
    755				got = 0;
    756			} else if (kdb_buffer[len] == '\r') {
    757				got = 0;
    758			} else {
    759				got++;
    760			}
    761		}
    762		kdb_nextline += got / (colcount + 1);
    763	}
    764
    765	/* check for having reached the LINES number of printed lines */
    766	if (kdb_nextline >= linecount) {
    767		char ch;
    768
    769		/* Watch out for recursion here.  Any routine that calls
    770		 * kdb_printf will come back through here.  And kdb_read
    771		 * uses kdb_printf to echo on serial consoles ...
    772		 */
    773		kdb_nextline = 1;	/* In case of recursion */
    774
    775		/*
    776		 * Pause until cr.
    777		 */
    778		moreprompt = kdbgetenv("MOREPROMPT");
    779		if (moreprompt == NULL)
    780			moreprompt = "more> ";
    781
    782		kdb_input_flush();
    783		kdb_msg_write(moreprompt, strlen(moreprompt));
    784
    785		if (logging)
    786			printk("%s", moreprompt);
    787
    788		ch = kdb_getchar();
    789		kdb_nextline = 1;	/* Really set output line 1 */
    790
    791		/* empty and reset the buffer: */
    792		kdb_buffer[0] = '\0';
    793		next_avail = kdb_buffer;
    794		size_avail = sizeof(kdb_buffer);
    795		if ((ch == 'q') || (ch == 'Q')) {
    796			/* user hit q or Q */
    797			KDB_FLAG_SET(CMD_INTERRUPT); /* command interrupted */
    798			KDB_STATE_CLEAR(PAGER);
    799			/* end of command output; back to normal mode */
    800			kdb_grepping_flag = 0;
    801			kdb_printf("\n");
    802		} else if (ch == ' ') {
    803			kdb_printf("\r");
    804			suspend_grep = 1; /* for this recursion */
    805		} else if (ch == '\n' || ch == '\r') {
    806			kdb_nextline = linecount - 1;
    807			kdb_printf("\r");
    808			suspend_grep = 1; /* for this recursion */
    809		} else if (ch == '/' && !kdb_grepping_flag) {
    810			kdb_printf("\r");
    811			kdb_getstr(kdb_grep_string, KDB_GREP_STRLEN,
    812				   kdbgetenv("SEARCHPROMPT") ?: "search> ");
    813			*strchrnul(kdb_grep_string, '\n') = '\0';
    814			kdb_grepping_flag += KDB_GREPPING_FLAG_SEARCH;
    815			suspend_grep = 1; /* for this recursion */
    816		} else if (ch) {
    817			/* user hit something unexpected */
    818			suspend_grep = 1; /* for this recursion */
    819			if (ch != '/')
    820				kdb_printf(
    821				    "\nOnly 'q', 'Q' or '/' are processed at "
    822				    "more prompt, input ignored\n");
    823			else
    824				kdb_printf("\n'/' cannot be used during | "
    825					   "grep filtering, input ignored\n");
    826		} else if (kdb_grepping_flag) {
    827			/* user hit enter */
    828			suspend_grep = 1; /* for this recursion */
    829			kdb_printf("\n");
    830		}
    831		kdb_input_flush();
    832	}
    833
    834	/*
    835	 * For grep searches, shift the printed string left.
    836	 *  replaced_byte contains the character that was overwritten with
    837	 *  the terminating null, and cphold points to the null.
    838	 * Then adjust the notion of available space in the buffer.
    839	 */
    840	if (kdb_grepping_flag && !suspend_grep) {
    841		*cphold = replaced_byte;
    842		strcpy(kdb_buffer, cphold);
    843		len = strlen(kdb_buffer);
    844		next_avail = kdb_buffer + len;
    845		size_avail = sizeof(kdb_buffer) - len;
    846	}
    847
    848kdb_print_out:
    849	suspend_grep = 0; /* end of what may have been a recursive call */
    850	if (logging)
    851		console_loglevel = saved_loglevel;
    852	/* kdb_printf_cpu locked the code above. */
    853	smp_store_release(&kdb_printf_cpu, old_cpu);
    854	local_irq_restore(flags);
    855	return retlen;
    856}
    857
    858int kdb_printf(const char *fmt, ...)
    859{
    860	va_list ap;
    861	int r;
    862
    863	va_start(ap, fmt);
    864	r = vkdb_printf(KDB_MSGSRC_INTERNAL, fmt, ap);
    865	va_end(ap);
    866
    867	return r;
    868}
    869EXPORT_SYMBOL_GPL(kdb_printf);