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