linux/kernel/debug/kdb/kdb_io.c
<<
>>
Prefs
   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);
 870