diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/debug/debug_core.c | 2 | ||||
| -rw-r--r-- | kernel/debug/gdbstub.c | 9 | ||||
| -rw-r--r-- | kernel/debug/kdb/kdb_main.c | 7 | ||||
| -rw-r--r-- | kernel/module.c | 4 |
4 files changed, 12 insertions, 10 deletions
diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c index 5cb7cd1de10c..8bc5eeffec8a 100644 --- a/kernel/debug/debug_core.c +++ b/kernel/debug/debug_core.c | |||
| @@ -605,13 +605,13 @@ cpu_master_loop: | |||
| 605 | if (dbg_kdb_mode) { | 605 | if (dbg_kdb_mode) { |
| 606 | kgdb_connected = 1; | 606 | kgdb_connected = 1; |
| 607 | error = kdb_stub(ks); | 607 | error = kdb_stub(ks); |
| 608 | kgdb_connected = 0; | ||
| 608 | } else { | 609 | } else { |
| 609 | error = gdb_serial_stub(ks); | 610 | error = gdb_serial_stub(ks); |
| 610 | } | 611 | } |
| 611 | 612 | ||
| 612 | if (error == DBG_PASS_EVENT) { | 613 | if (error == DBG_PASS_EVENT) { |
| 613 | dbg_kdb_mode = !dbg_kdb_mode; | 614 | dbg_kdb_mode = !dbg_kdb_mode; |
| 614 | kgdb_connected = 0; | ||
| 615 | } else if (error == DBG_SWITCH_CPU_EVENT) { | 615 | } else if (error == DBG_SWITCH_CPU_EVENT) { |
| 616 | dbg_cpu_switch(cpu, dbg_switch_cpu); | 616 | dbg_cpu_switch(cpu, dbg_switch_cpu); |
| 617 | goto cpu_loop; | 617 | goto cpu_loop; |
diff --git a/kernel/debug/gdbstub.c b/kernel/debug/gdbstub.c index 4b17b3269525..e8fd6868682d 100644 --- a/kernel/debug/gdbstub.c +++ b/kernel/debug/gdbstub.c | |||
| @@ -621,10 +621,8 @@ static void gdb_cmd_query(struct kgdb_state *ks) | |||
| 621 | switch (remcom_in_buffer[1]) { | 621 | switch (remcom_in_buffer[1]) { |
| 622 | case 's': | 622 | case 's': |
| 623 | case 'f': | 623 | case 'f': |
| 624 | if (memcmp(remcom_in_buffer + 2, "ThreadInfo", 10)) { | 624 | if (memcmp(remcom_in_buffer + 2, "ThreadInfo", 10)) |
| 625 | error_packet(remcom_out_buffer, -EINVAL); | ||
| 626 | break; | 625 | break; |
| 627 | } | ||
| 628 | 626 | ||
| 629 | i = 0; | 627 | i = 0; |
| 630 | remcom_out_buffer[0] = 'm'; | 628 | remcom_out_buffer[0] = 'm'; |
| @@ -665,10 +663,9 @@ static void gdb_cmd_query(struct kgdb_state *ks) | |||
| 665 | pack_threadid(remcom_out_buffer + 2, thref); | 663 | pack_threadid(remcom_out_buffer + 2, thref); |
| 666 | break; | 664 | break; |
| 667 | case 'T': | 665 | case 'T': |
| 668 | if (memcmp(remcom_in_buffer + 1, "ThreadExtraInfo,", 16)) { | 666 | if (memcmp(remcom_in_buffer + 1, "ThreadExtraInfo,", 16)) |
| 669 | error_packet(remcom_out_buffer, -EINVAL); | ||
| 670 | break; | 667 | break; |
| 671 | } | 668 | |
| 672 | ks->threadid = 0; | 669 | ks->threadid = 0; |
| 673 | ptr = remcom_in_buffer + 17; | 670 | ptr = remcom_in_buffer + 17; |
| 674 | kgdb_hex2long(&ptr, &ks->threadid); | 671 | kgdb_hex2long(&ptr, &ks->threadid); |
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c index 184cd8209c36..ebe4a287419e 100644 --- a/kernel/debug/kdb/kdb_main.c +++ b/kernel/debug/kdb/kdb_main.c | |||
| @@ -1820,9 +1820,8 @@ static int kdb_sr(int argc, const char **argv) | |||
| 1820 | { | 1820 | { |
| 1821 | if (argc != 1) | 1821 | if (argc != 1) |
| 1822 | return KDB_ARGCOUNT; | 1822 | return KDB_ARGCOUNT; |
| 1823 | sysrq_toggle_support(1); | ||
| 1824 | kdb_trap_printk++; | 1823 | kdb_trap_printk++; |
| 1825 | handle_sysrq(*argv[1], NULL); | 1824 | __handle_sysrq(*argv[1], NULL, 0); |
| 1826 | kdb_trap_printk--; | 1825 | kdb_trap_printk--; |
| 1827 | 1826 | ||
| 1828 | return 0; | 1827 | return 0; |
| @@ -1883,6 +1882,7 @@ static int kdb_lsmod(int argc, const char **argv) | |||
| 1883 | kdb_printf(" (Loading)"); | 1882 | kdb_printf(" (Loading)"); |
| 1884 | else | 1883 | else |
| 1885 | kdb_printf(" (Live)"); | 1884 | kdb_printf(" (Live)"); |
| 1885 | kdb_printf(" 0x%p", mod->module_core); | ||
| 1886 | 1886 | ||
| 1887 | #ifdef CONFIG_MODULE_UNLOAD | 1887 | #ifdef CONFIG_MODULE_UNLOAD |
| 1888 | { | 1888 | { |
| @@ -2291,6 +2291,9 @@ static int kdb_ll(int argc, const char **argv) | |||
| 2291 | while (va) { | 2291 | while (va) { |
| 2292 | char buf[80]; | 2292 | char buf[80]; |
| 2293 | 2293 | ||
| 2294 | if (KDB_FLAG(CMD_INTERRUPT)) | ||
| 2295 | return 0; | ||
| 2296 | |||
| 2294 | sprintf(buf, "%s " kdb_machreg_fmt "\n", command, va); | 2297 | sprintf(buf, "%s " kdb_machreg_fmt "\n", command, va); |
| 2295 | diag = kdb_parse(buf); | 2298 | diag = kdb_parse(buf); |
| 2296 | if (diag) | 2299 | if (diag) |
diff --git a/kernel/module.c b/kernel/module.c index 5d2d28197c82..6c562828c85c 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
| @@ -787,7 +787,6 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user, | |||
| 787 | 787 | ||
| 788 | /* Store the name of the last unloaded module for diagnostic purposes */ | 788 | /* Store the name of the last unloaded module for diagnostic purposes */ |
| 789 | strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module)); | 789 | strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module)); |
| 790 | ddebug_remove_module(mod->name); | ||
| 791 | 790 | ||
| 792 | free_module(mod); | 791 | free_module(mod); |
| 793 | return 0; | 792 | return 0; |
| @@ -1550,6 +1549,9 @@ static void free_module(struct module *mod) | |||
| 1550 | remove_sect_attrs(mod); | 1549 | remove_sect_attrs(mod); |
| 1551 | mod_kobject_remove(mod); | 1550 | mod_kobject_remove(mod); |
| 1552 | 1551 | ||
| 1552 | /* Remove dynamic debug info */ | ||
| 1553 | ddebug_remove_module(mod->name); | ||
| 1554 | |||
| 1553 | /* Arch-specific cleanup. */ | 1555 | /* Arch-specific cleanup. */ |
| 1554 | module_arch_cleanup(mod); | 1556 | module_arch_cleanup(mod); |
| 1555 | 1557 | ||
