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/early_res.c | 6 | 
4 files changed, 15 insertions, 9 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:  		if (dbg_kdb_mode) {  			kgdb_connected = 1;  			error = kdb_stub(ks); +			kgdb_connected = 0;  		} else {  			error = gdb_serial_stub(ks);  		}  		if (error == DBG_PASS_EVENT) {  			dbg_kdb_mode = !dbg_kdb_mode; -			kgdb_connected = 0;  		} else if (error == DBG_SWITCH_CPU_EVENT) {  			dbg_cpu_switch(cpu, dbg_switch_cpu);  			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)  	switch (remcom_in_buffer[1]) {  	case 's':  	case 'f': -		if (memcmp(remcom_in_buffer + 2, "ThreadInfo", 10)) { -			error_packet(remcom_out_buffer, -EINVAL); +		if (memcmp(remcom_in_buffer + 2, "ThreadInfo", 10))  			break; -		}  		i = 0;  		remcom_out_buffer[0] = 'm'; @@ -665,10 +663,9 @@ static void gdb_cmd_query(struct kgdb_state *ks)  		pack_threadid(remcom_out_buffer + 2, thref);  		break;  	case 'T': -		if (memcmp(remcom_in_buffer + 1, "ThreadExtraInfo,", 16)) { -			error_packet(remcom_out_buffer, -EINVAL); +		if (memcmp(remcom_in_buffer + 1, "ThreadExtraInfo,", 16))  			break; -		} +  		ks->threadid = 0;  		ptr = remcom_in_buffer + 17;  		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)  {  	if (argc != 1)  		return KDB_ARGCOUNT; -	sysrq_toggle_support(1);  	kdb_trap_printk++; -	handle_sysrq(*argv[1], NULL); +	__handle_sysrq(*argv[1], NULL, 0);  	kdb_trap_printk--;  	return 0; @@ -1883,6 +1882,7 @@ static int kdb_lsmod(int argc, const char **argv)  			kdb_printf(" (Loading)");  		else  			kdb_printf(" (Live)"); +		kdb_printf(" 0x%p", mod->module_core);  #ifdef CONFIG_MODULE_UNLOAD  		{ @@ -2291,6 +2291,9 @@ static int kdb_ll(int argc, const char **argv)  	while (va) {  		char buf[80]; +		if (KDB_FLAG(CMD_INTERRUPT)) +			return 0; +  		sprintf(buf, "%s " kdb_machreg_fmt "\n", command, va);  		diag = kdb_parse(buf);  		if (diag) diff --git a/kernel/early_res.c b/kernel/early_res.c index 31aa9332ef3f..7bfae887f211 100644 --- a/kernel/early_res.c +++ b/kernel/early_res.c @@ -7,6 +7,8 @@  #include <linux/bootmem.h>  #include <linux/mm.h>  #include <linux/early_res.h> +#include <linux/slab.h> +#include <linux/kmemleak.h>  /*   * Early reserved memory areas. @@ -319,6 +321,8 @@ void __init free_early(u64 start, u64 end)  	struct early_res *r;  	int i; +	kmemleak_free_part(__va(start), end - start); +  	i = find_overlapped_early(start, end);  	r = &early_res[i];  	if (i >= max_early_res || r->end != end || r->start != start) @@ -333,6 +337,8 @@ void __init free_early_partial(u64 start, u64 end)  	struct early_res *r;  	int i; +	kmemleak_free_part(__va(start), end - start); +  	if (start == end)  		return;  |