Message ID | 1343649500-18491-3-git-send-email-anton.vorontsov@linaro.org |
---|---|
State | New |
Headers | show |
On Mon, Jul 30, 2012 at 4:58 AM, Anton Vorontsov <anton.vorontsov@linaro.org> wrote: > This command disables NMI-entry. If NMI source was previously shared with > a serial console ("debug port"), this effectively releases the port from > KDB exclusive use, and makes the console available for normal use. > > Of course, NMI can be reenabled, enable_nmi modparam is used for that: > > echo 1 > /sys/module/kdb/parameters/enable_nmi This is very different behavior from the FIQ debugger "console" command you are trying to replace. In the FIQ debugger, everything goes through the FIQ/NMI, even when in console mode. That means that the user can always get back to FIQ debugger/KDB mode using a special sequence (we use a break character). With your implementation, if you switch from KDB to console to see if the console is working, and find that it is not working, you can never get back into KDB.
On Mon, Jul 30, 2012 at 10:33:34AM -0700, Colin Cross wrote: > On Mon, Jul 30, 2012 at 4:58 AM, Anton Vorontsov > <anton.vorontsov@linaro.org> wrote: > > This command disables NMI-entry. If NMI source was previously shared with > > a serial console ("debug port"), this effectively releases the port from > > KDB exclusive use, and makes the console available for normal use. > > > > Of course, NMI can be reenabled, enable_nmi modparam is used for that: > > > > echo 1 > /sys/module/kdb/parameters/enable_nmi > > This is very different behavior from the FIQ debugger "console" > command you are trying to replace. In the FIQ debugger, everything > goes through the FIQ/NMI, even when in console mode. That means that > the user can always get back to FIQ debugger/KDB mode using a special > sequence (we use a break character). With your implementation, if you > switch from KDB to console to see if the console is working, and find > that it is not working, you can never get back into KDB. Ah, I see. But with disable_nmi, in addition to kernel console, applications can use /dev/ttyXX as normal, and with 'console' command that is not possible (at least w/o modifying applications to escape magic sequence). So, I think we should have both commands, each would handle its own use case. (Initially I just tried to avoid adding another console driver, but it seems there is no other way, heh.) Thanks!
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c index 3ee92a1..1e9f20e 100644 --- a/kernel/debug/kdb/kdb_main.c +++ b/kernel/debug/kdb/kdb_main.c @@ -2131,6 +2131,24 @@ static int kdb_dmesg(int argc, const char **argv) return 0; } #endif /* CONFIG_PRINTK */ + +static int kdb_disable_nmi(int argc, const char *argv[]) +{ + kgdb_arch_enable_nmi(0); + return 0; +} + +static int kdb_param_enable_nmi(const char *val, const struct kernel_param *kp) +{ + kgdb_arch_enable_nmi(1); + return 0; +} + +static const struct kernel_param_ops kdb_param_ops_enable_nmi = { + .set = kdb_param_enable_nmi, +}; +module_param_cb(enable_nmi, &kdb_param_ops_enable_nmi, NULL, 0600); + /* * kdb_cpu - This function implements the 'cpu' command. * cpu [<cpunum>] @@ -2873,6 +2891,8 @@ static void __init kdb_inittab(void) kdb_register_flags("dmesg", kdb_dmesg, "[lines]", "Display syslog buffer", 0, KDB_SAFE); #endif + kdb_register_flags("disable_nmi", kdb_disable_nmi, "", + "Disable NMI entry to KDB", 0, KDB_SAFE); kdb_register_flags("defcmd", kdb_defcmd, "name \"usage\" \"help\"", "Define a set of commands, down to endefcmd", 0, KDB_SAFE); kdb_register_flags("kill", kdb_kill, "<-signal> <pid>",
This command disables NMI-entry. If NMI source was previously shared with a serial console ("debug port"), this effectively releases the port from KDB exclusive use, and makes the console available for normal use. Of course, NMI can be reenabled, enable_nmi modparam is used for that: echo 1 > /sys/module/kdb/parameters/enable_nmi Signed-off-by: Anton Vorontsov <anton.vorontsov@linaro.org> --- kernel/debug/kdb/kdb_main.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)