From: anton.vorontsov@linaro.org (Anton Vorontsov)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 04/14] kdb: Implement disable_nmi command
Date: Sun, 9 Sep 2012 21:13:08 -0700 [thread overview]
Message-ID: <20120910041308.GD29537@lizard> (raw)
In-Reply-To: <20120910040802.GA1261@lizard>
This command disables NMI-entry. If NMI source has been 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 | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c
index 31df170..9fadff1 100644
--- a/kernel/debug/kdb/kdb_main.c
+++ b/kernel/debug/kdb/kdb_main.c
@@ -21,6 +21,7 @@
#include <linux/smp.h>
#include <linux/utsname.h>
#include <linux/vmalloc.h>
+#include <linux/atomic.h>
#include <linux/module.h>
#include <linux/mm.h>
#include <linux/init.h>
@@ -2107,6 +2108,32 @@ static int kdb_dmesg(int argc, const char **argv)
return 0;
}
#endif /* CONFIG_PRINTK */
+
+/* Make sure we balance enable/disable calls, must disable first. */
+static atomic_t kdb_nmi_disabled;
+
+static int kdb_disable_nmi(int argc, const char *argv[])
+{
+ if (atomic_read(&kdb_nmi_disabled))
+ return 0;
+ atomic_set(&kdb_nmi_disabled, 1);
+ kgdb_enable_nmi(0);
+ return 0;
+}
+
+static int kdb_param_enable_nmi(const char *val, const struct kernel_param *kp)
+{
+ if (!atomic_add_unless(&kdb_nmi_disabled, -1, 0))
+ return -EINVAL;
+ kgdb_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>]
@@ -2851,6 +2878,8 @@ static void __init kdb_inittab(void)
kdb_register_repeat("dmesg", kdb_dmesg, "[lines]",
"Display syslog buffer", 0, KDB_REPEAT_NONE);
#endif
+ kdb_register_repeat("disable_nmi", kdb_disable_nmi, "",
+ "Disable NMI entry to KDB", 0, KDB_REPEAT_NONE);
kdb_register_repeat("defcmd", kdb_defcmd, "name \"usage\" \"help\"",
"Define a set of commands, down to endefcmd", 0, KDB_REPEAT_NONE);
kdb_register_repeat("kill", kdb_kill, "<-signal> <pid>",
--
1.7.11.5
next prev parent reply other threads:[~2012-09-10 4:13 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-10 4:08 [PATCH v5 0/14] KGDB/KDB FIQ (NMI) debugger Anton Vorontsov
2012-09-10 4:11 ` [PATCH 01/14] serial/amba-pl011: fix ages old copy-paste errors Anton Vorontsov
2012-09-10 4:12 ` [PATCH 02/14] drivers/tty/serial/amba-pl0{10,11}.c: use clk_prepare_enable and clk_disable_unprepare Anton Vorontsov
2012-09-10 4:12 ` [PATCH 03/14] kernel/debug: Mask KGDB NMI upon entry Anton Vorontsov
2012-09-10 4:13 ` Anton Vorontsov [this message]
2012-09-10 4:13 ` [PATCH 05/14] kdb: Turn KGDB_KDB=n stubs into static inlines Anton Vorontsov
2012-09-10 4:13 ` [PATCH 06/14] tty/serial/core: Introduce poll_init callback Anton Vorontsov
2012-09-10 11:13 ` Alan Cox
2012-09-10 17:57 ` Anton Vorontsov
2012-09-10 19:18 ` Alan Cox
2012-09-10 4:13 ` [PATCH 07/14] tty/serial/amba-pl011: Implement " Anton Vorontsov
2012-09-10 4:13 ` [PATCH 08/14] tty/serial/kgdboc: Add and wire up clear_irqs callback Anton Vorontsov
2012-09-10 11:16 ` Alan Cox
2012-09-10 17:57 ` Anton Vorontsov
2012-09-10 19:19 ` Alan Cox
2012-09-10 20:13 ` Anton Vorontsov
2012-09-10 4:14 ` [PATCH 09/14] tty/serial/amba-pl011: Implement " Anton Vorontsov
2012-09-10 11:17 ` Alan Cox
2012-09-10 17:56 ` Anton Vorontsov
2012-09-10 4:14 ` [PATCH 10/14] tty/serial: Add kgdb_nmi driver Anton Vorontsov
2012-09-10 11:11 ` Alan Cox
2012-09-10 17:54 ` Anton Vorontsov
2012-09-10 4:14 ` [PATCH 11/14] ARM: Move some macros from entry-armv to entry-header Anton Vorontsov
2012-09-10 4:14 ` [PATCH 12/14] ARM: Add KGDB/KDB FIQ debugger generic code Anton Vorontsov
2012-09-10 4:14 ` [PATCH 13/14] ARM: VIC: Add a couple of low-level FIQ management helpers Anton Vorontsov
2012-09-10 4:14 ` [PATCH 14/14] ARM: versatile: Make able to use UART ports for KGDB FIQ debugger Anton Vorontsov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120910041308.GD29537@lizard \
--to=anton.vorontsov@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).