The "kgdb_connected" variable of debug_core just indicates whether or
not kgdbts is connected to the debug_core. It does not completely
prevent a script from trying invoke kgdbts again and possibly crashing
the system (see Call Trace below).
The configured variable in kgtbts can be used instead of
kgdb_connected instead of kgdb_connected. The cleanup_kgdbts() can
also be removed because there is no possible way to build kgdbts as a
kernel module that you could unload with rmmod.
Call Trace:
-----------------------------------------------------------------
root:/$ echo kgdbts=V1S1000 > /sys/module/kgdbts/parameters/kgdbts
kgdb: Unregistered I/O driver kgdbts, debugger disabled.
------------[ cut here ]------------
WARNING: at kernel/debug/debug_core.c:1002
kgdb_unregister_io_module+0xec/0x100()
Hardware name: Moon Creek platform
Modules linked in:
Pid: 664, comm: sh Not tainted 2.6.34.1-WR4.0.0.0_standard #58
Call Trace:
[<
c103b1ed>] warn_slowpath_common+0x6d/0xa0
[<
c1079fdc>] ? kgdb_unregister_io_module+0xec/0x100
[<
c1079fdc>] ? kgdb_unregister_io_module+0xec/0x100
[<
c10544e0>] ? param_attr_store+0x0/0x20
[<
c103b235>] warn_slowpath_null+0x15/0x20
[<
c1079fdc>] kgdb_unregister_io_module+0xec/0x100
[<
c124e4ea>] cleanup_kgdbts+0x1a/0x20
[<
c124eced>] param_set_kgdbts_var+0x6d/0xb0
[<
c124ec80>] ? param_set_kgdbts_var+0x0/0xb0
[<
c10544f7>] param_attr_store+0x17/0x20
[<
c105457c>] module_attr_store+0x2c/0x40
[<
c111fe84>] sysfs_write_file+0x94/0xf0
[<
c10d42f6>] vfs_write+0x96/0x130
[<
c111fdf0>] ? sysfs_write_file+0x0/0xf0
[<
c10d44d6>] sys_write+0x46/0xd0
[<
c13bf329>] system_call_done+0x0/0x4
---[ end trace
4eb028c6ee43154c ]---
kgdb: Unregistered I/O driver kgdbts, debugger disabled.
-----------------------------------------------------------------
[jason.wessel@windriver.com: remove cleanup_kgdbts() ]
Signed-off-by: Dongdong Deng <dongdong.deng@windriver.com>
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
return configure_kgdbts();
}
-static void cleanup_kgdbts(void)
-{
- if (configured == 1)
- kgdb_unregister_io_module(&kgdbts_io_ops);
-}
-
static int kgdbts_get_char(void)
{
int val = 0;
return 0;
}
- if (kgdb_connected) {
- printk(KERN_ERR
- "kgdbts: Cannot reconfigure while KGDB is connected.\n");
-
+ if (configured == 1) {
+ printk(KERN_ERR "kgdbts: ERROR: Already configured and running.\n");
return -EBUSY;
}
if (config[len - 1] == '\n')
config[len - 1] = '\0';
- if (configured == 1)
- cleanup_kgdbts();
-
/* Go and configure with the new params. */
return configure_kgdbts();
}
};
module_init(init_kgdbts);
-module_exit(cleanup_kgdbts);
module_param_call(kgdbts, param_set_kgdbts_var, param_get_string, &kps, 0644);
MODULE_PARM_DESC(kgdbts, "<A|V1|V2>[F#|S#][N#]");
MODULE_DESCRIPTION("KGDB Test Suite");