kgdboc.c (15007B)
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Based on the same principle as kgdboe using the NETPOLL api, this 4 * driver uses a console polling api to implement a gdb serial inteface 5 * which is multiplexed on a console port. 6 * 7 * Maintainer: Jason Wessel <jason.wessel@windriver.com> 8 * 9 * 2007-2008 (c) Jason Wessel - Wind River Systems, Inc. 10 */ 11 12#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 13 14#include <linux/kernel.h> 15#include <linux/ctype.h> 16#include <linux/kgdb.h> 17#include <linux/kdb.h> 18#include <linux/tty.h> 19#include <linux/console.h> 20#include <linux/vt_kern.h> 21#include <linux/input.h> 22#include <linux/module.h> 23#include <linux/platform_device.h> 24#include <linux/serial_core.h> 25 26#define MAX_CONFIG_LEN 40 27 28static struct kgdb_io kgdboc_io_ops; 29 30/* -1 = init not run yet, 0 = unconfigured, 1 = configured. */ 31static int configured = -1; 32static DEFINE_MUTEX(config_mutex); 33 34static char config[MAX_CONFIG_LEN]; 35static struct kparam_string kps = { 36 .string = config, 37 .maxlen = MAX_CONFIG_LEN, 38}; 39 40static int kgdboc_use_kms; /* 1 if we use kernel mode switching */ 41static struct tty_driver *kgdb_tty_driver; 42static int kgdb_tty_line; 43 44static struct platform_device *kgdboc_pdev; 45 46#if IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) 47static struct kgdb_io kgdboc_earlycon_io_ops; 48static int (*earlycon_orig_exit)(struct console *con); 49#endif /* IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */ 50 51#ifdef CONFIG_KDB_KEYBOARD 52static int kgdboc_reset_connect(struct input_handler *handler, 53 struct input_dev *dev, 54 const struct input_device_id *id) 55{ 56 input_reset_device(dev); 57 58 /* Return an error - we do not want to bind, just to reset */ 59 return -ENODEV; 60} 61 62static void kgdboc_reset_disconnect(struct input_handle *handle) 63{ 64 /* We do not expect anyone to actually bind to us */ 65 BUG(); 66} 67 68static const struct input_device_id kgdboc_reset_ids[] = { 69 { 70 .flags = INPUT_DEVICE_ID_MATCH_EVBIT, 71 .evbit = { BIT_MASK(EV_KEY) }, 72 }, 73 { } 74}; 75 76static struct input_handler kgdboc_reset_handler = { 77 .connect = kgdboc_reset_connect, 78 .disconnect = kgdboc_reset_disconnect, 79 .name = "kgdboc_reset", 80 .id_table = kgdboc_reset_ids, 81}; 82 83static DEFINE_MUTEX(kgdboc_reset_mutex); 84 85static void kgdboc_restore_input_helper(struct work_struct *dummy) 86{ 87 /* 88 * We need to take a mutex to prevent several instances of 89 * this work running on different CPUs so they don't try 90 * to register again already registered handler. 91 */ 92 mutex_lock(&kgdboc_reset_mutex); 93 94 if (input_register_handler(&kgdboc_reset_handler) == 0) 95 input_unregister_handler(&kgdboc_reset_handler); 96 97 mutex_unlock(&kgdboc_reset_mutex); 98} 99 100static DECLARE_WORK(kgdboc_restore_input_work, kgdboc_restore_input_helper); 101 102static void kgdboc_restore_input(void) 103{ 104 if (likely(system_state == SYSTEM_RUNNING)) 105 schedule_work(&kgdboc_restore_input_work); 106} 107 108static int kgdboc_register_kbd(char **cptr) 109{ 110 if (strncmp(*cptr, "kbd", 3) == 0 || 111 strncmp(*cptr, "kdb", 3) == 0) { 112 if (kdb_poll_idx < KDB_POLL_FUNC_MAX) { 113 kdb_poll_funcs[kdb_poll_idx] = kdb_get_kbd_char; 114 kdb_poll_idx++; 115 if (cptr[0][3] == ',') 116 *cptr += 4; 117 else 118 return 1; 119 } 120 } 121 return 0; 122} 123 124static void kgdboc_unregister_kbd(void) 125{ 126 int i; 127 128 for (i = 0; i < kdb_poll_idx; i++) { 129 if (kdb_poll_funcs[i] == kdb_get_kbd_char) { 130 kdb_poll_idx--; 131 kdb_poll_funcs[i] = kdb_poll_funcs[kdb_poll_idx]; 132 kdb_poll_funcs[kdb_poll_idx] = NULL; 133 i--; 134 } 135 } 136 flush_work(&kgdboc_restore_input_work); 137} 138#else /* ! CONFIG_KDB_KEYBOARD */ 139#define kgdboc_register_kbd(x) 0 140#define kgdboc_unregister_kbd() 141#define kgdboc_restore_input() 142#endif /* ! CONFIG_KDB_KEYBOARD */ 143 144#if IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) 145static void cleanup_earlycon(void) 146{ 147 if (kgdboc_earlycon_io_ops.cons) 148 kgdb_unregister_io_module(&kgdboc_earlycon_io_ops); 149} 150#else /* !IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */ 151static inline void cleanup_earlycon(void) { } 152#endif /* !IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */ 153 154static void cleanup_kgdboc(void) 155{ 156 cleanup_earlycon(); 157 158 if (configured != 1) 159 return; 160 161 if (kgdb_unregister_nmi_console()) 162 return; 163 kgdboc_unregister_kbd(); 164 kgdb_unregister_io_module(&kgdboc_io_ops); 165} 166 167static int configure_kgdboc(void) 168{ 169 struct tty_driver *p; 170 int tty_line = 0; 171 int err = -ENODEV; 172 char *cptr = config; 173 struct console *cons; 174 175 if (!strlen(config) || isspace(config[0])) { 176 err = 0; 177 goto noconfig; 178 } 179 180 kgdboc_io_ops.cons = NULL; 181 kgdb_tty_driver = NULL; 182 183 kgdboc_use_kms = 0; 184 if (strncmp(cptr, "kms,", 4) == 0) { 185 cptr += 4; 186 kgdboc_use_kms = 1; 187 } 188 189 if (kgdboc_register_kbd(&cptr)) 190 goto do_register; 191 192 p = tty_find_polling_driver(cptr, &tty_line); 193 if (!p) 194 goto noconfig; 195 196 for_each_console(cons) { 197 int idx; 198 if (cons->device && cons->device(cons, &idx) == p && 199 idx == tty_line) { 200 kgdboc_io_ops.cons = cons; 201 break; 202 } 203 } 204 205 kgdb_tty_driver = p; 206 kgdb_tty_line = tty_line; 207 208do_register: 209 err = kgdb_register_io_module(&kgdboc_io_ops); 210 if (err) 211 goto noconfig; 212 213 err = kgdb_register_nmi_console(); 214 if (err) 215 goto nmi_con_failed; 216 217 configured = 1; 218 219 return 0; 220 221nmi_con_failed: 222 kgdb_unregister_io_module(&kgdboc_io_ops); 223noconfig: 224 kgdboc_unregister_kbd(); 225 configured = 0; 226 227 return err; 228} 229 230static int kgdboc_probe(struct platform_device *pdev) 231{ 232 int ret = 0; 233 234 mutex_lock(&config_mutex); 235 if (configured != 1) { 236 ret = configure_kgdboc(); 237 238 /* Convert "no device" to "defer" so we'll keep trying */ 239 if (ret == -ENODEV) 240 ret = -EPROBE_DEFER; 241 } 242 mutex_unlock(&config_mutex); 243 244 return ret; 245} 246 247static struct platform_driver kgdboc_platform_driver = { 248 .probe = kgdboc_probe, 249 .driver = { 250 .name = "kgdboc", 251 .suppress_bind_attrs = true, 252 }, 253}; 254 255static int __init init_kgdboc(void) 256{ 257 int ret; 258 259 /* 260 * kgdboc is a little bit of an odd "platform_driver". It can be 261 * up and running long before the platform_driver object is 262 * created and thus doesn't actually store anything in it. There's 263 * only one instance of kgdb so anything is stored as global state. 264 * The platform_driver is only created so that we can leverage the 265 * kernel's mechanisms (like -EPROBE_DEFER) to call us when our 266 * underlying tty is ready. Here we init our platform driver and 267 * then create the single kgdboc instance. 268 */ 269 ret = platform_driver_register(&kgdboc_platform_driver); 270 if (ret) 271 return ret; 272 273 kgdboc_pdev = platform_device_alloc("kgdboc", PLATFORM_DEVID_NONE); 274 if (!kgdboc_pdev) { 275 ret = -ENOMEM; 276 goto err_did_register; 277 } 278 279 ret = platform_device_add(kgdboc_pdev); 280 if (!ret) 281 return 0; 282 283 platform_device_put(kgdboc_pdev); 284 285err_did_register: 286 platform_driver_unregister(&kgdboc_platform_driver); 287 return ret; 288} 289 290static void exit_kgdboc(void) 291{ 292 mutex_lock(&config_mutex); 293 cleanup_kgdboc(); 294 mutex_unlock(&config_mutex); 295 296 platform_device_unregister(kgdboc_pdev); 297 platform_driver_unregister(&kgdboc_platform_driver); 298} 299 300static int kgdboc_get_char(void) 301{ 302 if (!kgdb_tty_driver) 303 return -1; 304 return kgdb_tty_driver->ops->poll_get_char(kgdb_tty_driver, 305 kgdb_tty_line); 306} 307 308static void kgdboc_put_char(u8 chr) 309{ 310 if (!kgdb_tty_driver) 311 return; 312 kgdb_tty_driver->ops->poll_put_char(kgdb_tty_driver, 313 kgdb_tty_line, chr); 314} 315 316static int param_set_kgdboc_var(const char *kmessage, 317 const struct kernel_param *kp) 318{ 319 size_t len = strlen(kmessage); 320 int ret = 0; 321 322 if (len >= MAX_CONFIG_LEN) { 323 pr_err("config string too long\n"); 324 return -ENOSPC; 325 } 326 327 if (kgdb_connected) { 328 pr_err("Cannot reconfigure while KGDB is connected.\n"); 329 return -EBUSY; 330 } 331 332 mutex_lock(&config_mutex); 333 334 strcpy(config, kmessage); 335 /* Chop out \n char as a result of echo */ 336 if (len && config[len - 1] == '\n') 337 config[len - 1] = '\0'; 338 339 if (configured == 1) 340 cleanup_kgdboc(); 341 342 /* 343 * Configure with the new params as long as init already ran. 344 * Note that we can get called before init if someone loads us 345 * with "modprobe kgdboc kgdboc=..." or if they happen to use the 346 * the odd syntax of "kgdboc.kgdboc=..." on the kernel command. 347 */ 348 if (configured >= 0) 349 ret = configure_kgdboc(); 350 351 /* 352 * If we couldn't configure then clear out the config. Note that 353 * specifying an invalid config on the kernel command line vs. 354 * through sysfs have slightly different behaviors. If we fail 355 * to configure what was specified on the kernel command line 356 * we'll leave it in the 'config' and return -EPROBE_DEFER from 357 * our probe. When specified through sysfs userspace is 358 * responsible for loading the tty driver before setting up. 359 */ 360 if (ret) 361 config[0] = '\0'; 362 363 mutex_unlock(&config_mutex); 364 365 return ret; 366} 367 368static int dbg_restore_graphics; 369 370static void kgdboc_pre_exp_handler(void) 371{ 372 if (!dbg_restore_graphics && kgdboc_use_kms) { 373 dbg_restore_graphics = 1; 374 con_debug_enter(vc_cons[fg_console].d); 375 } 376 /* Increment the module count when the debugger is active */ 377 if (!kgdb_connected) 378 try_module_get(THIS_MODULE); 379} 380 381static void kgdboc_post_exp_handler(void) 382{ 383 /* decrement the module count when the debugger detaches */ 384 if (!kgdb_connected) 385 module_put(THIS_MODULE); 386 if (kgdboc_use_kms && dbg_restore_graphics) { 387 dbg_restore_graphics = 0; 388 con_debug_leave(); 389 } 390 kgdboc_restore_input(); 391} 392 393static struct kgdb_io kgdboc_io_ops = { 394 .name = "kgdboc", 395 .read_char = kgdboc_get_char, 396 .write_char = kgdboc_put_char, 397 .pre_exception = kgdboc_pre_exp_handler, 398 .post_exception = kgdboc_post_exp_handler, 399}; 400 401#if IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) 402static int kgdboc_option_setup(char *opt) 403{ 404 if (!opt) { 405 pr_err("config string not provided\n"); 406 return 1; 407 } 408 409 if (strlen(opt) >= MAX_CONFIG_LEN) { 410 pr_err("config string too long\n"); 411 return 1; 412 } 413 strcpy(config, opt); 414 415 return 1; 416} 417 418__setup("kgdboc=", kgdboc_option_setup); 419 420 421/* This is only available if kgdboc is a built in for early debugging */ 422static int __init kgdboc_early_init(char *opt) 423{ 424 kgdboc_option_setup(opt); 425 configure_kgdboc(); 426 return 0; 427} 428 429early_param("ekgdboc", kgdboc_early_init); 430 431static int kgdboc_earlycon_get_char(void) 432{ 433 char c; 434 435 if (!kgdboc_earlycon_io_ops.cons->read(kgdboc_earlycon_io_ops.cons, 436 &c, 1)) 437 return NO_POLL_CHAR; 438 439 return c; 440} 441 442static void kgdboc_earlycon_put_char(u8 chr) 443{ 444 kgdboc_earlycon_io_ops.cons->write(kgdboc_earlycon_io_ops.cons, &chr, 445 1); 446} 447 448static void kgdboc_earlycon_pre_exp_handler(void) 449{ 450 struct console *con; 451 static bool already_warned; 452 453 if (already_warned) 454 return; 455 456 /* 457 * When the first normal console comes up the kernel will take all 458 * the boot consoles out of the list. Really, we should stop using 459 * the boot console when it does that but until a TTY is registered 460 * we have no other choice so we keep using it. Since not all 461 * serial drivers might be OK with this, print a warning once per 462 * boot if we detect this case. 463 */ 464 for_each_console(con) 465 if (con == kgdboc_earlycon_io_ops.cons) 466 return; 467 468 already_warned = true; 469 pr_warn("kgdboc_earlycon is still using bootconsole\n"); 470} 471 472static int kgdboc_earlycon_deferred_exit(struct console *con) 473{ 474 /* 475 * If we get here it means the boot console is going away but we 476 * don't yet have a suitable replacement. Don't pass through to 477 * the original exit routine. We'll call it later in our deinit() 478 * function. For now, restore the original exit() function pointer 479 * as a sentinal that we've hit this point. 480 */ 481 con->exit = earlycon_orig_exit; 482 483 return 0; 484} 485 486static void kgdboc_earlycon_deinit(void) 487{ 488 if (!kgdboc_earlycon_io_ops.cons) 489 return; 490 491 if (kgdboc_earlycon_io_ops.cons->exit == kgdboc_earlycon_deferred_exit) 492 /* 493 * kgdboc_earlycon is exiting but original boot console exit 494 * was never called (AKA kgdboc_earlycon_deferred_exit() 495 * didn't ever run). Undo our trap. 496 */ 497 kgdboc_earlycon_io_ops.cons->exit = earlycon_orig_exit; 498 else if (kgdboc_earlycon_io_ops.cons->exit) 499 /* 500 * We skipped calling the exit() routine so we could try to 501 * keep using the boot console even after it went away. We're 502 * finally done so call the function now. 503 */ 504 kgdboc_earlycon_io_ops.cons->exit(kgdboc_earlycon_io_ops.cons); 505 506 kgdboc_earlycon_io_ops.cons = NULL; 507} 508 509static struct kgdb_io kgdboc_earlycon_io_ops = { 510 .name = "kgdboc_earlycon", 511 .read_char = kgdboc_earlycon_get_char, 512 .write_char = kgdboc_earlycon_put_char, 513 .pre_exception = kgdboc_earlycon_pre_exp_handler, 514 .deinit = kgdboc_earlycon_deinit, 515}; 516 517#define MAX_CONSOLE_NAME_LEN (sizeof((struct console *) 0)->name) 518static char kgdboc_earlycon_param[MAX_CONSOLE_NAME_LEN] __initdata; 519static bool kgdboc_earlycon_late_enable __initdata; 520 521static int __init kgdboc_earlycon_init(char *opt) 522{ 523 struct console *con; 524 525 kdb_init(KDB_INIT_EARLY); 526 527 /* 528 * Look for a matching console, or if the name was left blank just 529 * pick the first one we find. 530 */ 531 console_lock(); 532 for_each_console(con) { 533 if (con->write && con->read && 534 (con->flags & (CON_BOOT | CON_ENABLED)) && 535 (!opt || !opt[0] || strcmp(con->name, opt) == 0)) 536 break; 537 } 538 539 if (!con) { 540 /* 541 * Both earlycon and kgdboc_earlycon are initialized during 542 * early parameter parsing. We cannot guarantee earlycon gets 543 * in first and, in any case, on ACPI systems earlycon may 544 * defer its own initialization (usually to somewhere within 545 * setup_arch() ). To cope with either of these situations 546 * we can defer our own initialization to a little later in 547 * the boot. 548 */ 549 if (!kgdboc_earlycon_late_enable) { 550 pr_info("No suitable earlycon yet, will try later\n"); 551 if (opt) 552 strscpy(kgdboc_earlycon_param, opt, 553 sizeof(kgdboc_earlycon_param)); 554 kgdboc_earlycon_late_enable = true; 555 } else { 556 pr_info("Couldn't find kgdb earlycon\n"); 557 } 558 goto unlock; 559 } 560 561 kgdboc_earlycon_io_ops.cons = con; 562 pr_info("Going to register kgdb with earlycon '%s'\n", con->name); 563 if (kgdb_register_io_module(&kgdboc_earlycon_io_ops) != 0) { 564 kgdboc_earlycon_io_ops.cons = NULL; 565 pr_info("Failed to register kgdb with earlycon\n"); 566 } else { 567 /* Trap exit so we can keep earlycon longer if needed. */ 568 earlycon_orig_exit = con->exit; 569 con->exit = kgdboc_earlycon_deferred_exit; 570 } 571 572unlock: 573 console_unlock(); 574 575 /* Non-zero means malformed option so we always return zero */ 576 return 0; 577} 578 579early_param("kgdboc_earlycon", kgdboc_earlycon_init); 580 581/* 582 * This is only intended for the late adoption of an early console. 583 * 584 * It is not a reliable way to adopt regular consoles because we can not 585 * control what order console initcalls are made and, in any case, many 586 * regular consoles are registered much later in the boot process than 587 * the console initcalls! 588 */ 589static int __init kgdboc_earlycon_late_init(void) 590{ 591 if (kgdboc_earlycon_late_enable) 592 kgdboc_earlycon_init(kgdboc_earlycon_param); 593 return 0; 594} 595console_initcall(kgdboc_earlycon_late_init); 596 597#endif /* IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */ 598 599module_init(init_kgdboc); 600module_exit(exit_kgdboc); 601module_param_call(kgdboc, param_set_kgdboc_var, param_get_string, &kps, 0644); 602MODULE_PARM_DESC(kgdboc, "<serial_device>[,baud]"); 603MODULE_DESCRIPTION("KGDB Console TTY Driver"); 604MODULE_LICENSE("GPL");