All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Wessel <jason.wessel@windriver.com>
To: linux-kernel@vger.kernel.org
Cc: kgdb-bugreport@lists.sourceforge.net, kdb@oss.sgi.com,
	Jason Wessel <jason.wessel@windriver.com>
Subject: [PATCH 11/13] kgdb: Add the ability to schedule a breakpoint via a tasklet
Date: Fri,  8 May 2009 16:23:18 -0500	[thread overview]
Message-ID: <1241817800-9320-12-git-send-email-jason.wessel@windriver.com> (raw)
In-Reply-To: <1241817800-9320-11-git-send-email-jason.wessel@windriver.com>

Some kgdb I/O modules require the ability to create a breakpoint
tasklet, such as kgdboc and external modules such as kgdboe.  The
breakpoint tasklet is used as an asynchronous entry point into the
debugger which will have a different function scope than the current
execution path where it might not be safe to have an inline breakpoint
inside the kgdb I/O driver.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
---
 include/linux/kgdb.h |    1 +
 kernel/kgdb.c        |   26 ++++++++++++++++++++++++++
 2 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/include/linux/kgdb.h b/include/linux/kgdb.h
index 166cd07..1fa0bcc 100644
--- a/include/linux/kgdb.h
+++ b/include/linux/kgdb.h
@@ -270,6 +270,7 @@ extern int kgdb_use_passthrough;
 extern void kgdb_msg_write(const char *s, int len);
 extern int			kgdb_single_step;
 extern atomic_t			kgdb_active;
+extern void kgdb_schedule_breakpoint(void);
 
 #ifdef CONFIG_KGDB_SERIAL_CONSOLE
 extern void __init early_kgdboc_init(void);
diff --git a/kernel/kgdb.c b/kernel/kgdb.c
index da738a2..f303410 100644
--- a/kernel/kgdb.c
+++ b/kernel/kgdb.c
@@ -136,6 +136,7 @@ atomic_t			kgdb_active = ATOMIC_INIT(-1);
  */
 static atomic_t			passive_cpu_wait[NR_CPUS];
 static atomic_t			cpu_in_kgdb[NR_CPUS];
+static atomic_t			kgdb_break_tasklet_var;
 atomic_t			kgdb_setting_breakpoint;
 
 struct task_struct		*kgdb_usethread;
@@ -1862,6 +1863,31 @@ static void kgdb_unregister_callbacks(void)
 	}
 }
 
+/*
+ * There are times a tasklet needs to be used vs a compiled in
+ * break point so as to cause an exception outside a kgdb I/O module,
+ * such as is the case with kgdboe, where calling a breakpoint in the
+ * I/O driver itself would be fatal.
+ */
+static void kgdb_tasklet_bpt(unsigned long ing)
+{
+	kgdb_breakpoint();
+	atomic_set(&kgdb_break_tasklet_var, 0);
+}
+
+static DECLARE_TASKLET(kgdb_tasklet_breakpoint, kgdb_tasklet_bpt, 0);
+
+void kgdb_schedule_breakpoint(void)
+{
+	if (atomic_read(&kgdb_break_tasklet_var) ||
+		atomic_read(&kgdb_active) != -1 ||
+		atomic_read(&kgdb_setting_breakpoint))
+		return;
+	atomic_inc(&kgdb_break_tasklet_var);
+	tasklet_schedule(&kgdb_tasklet_breakpoint);
+}
+EXPORT_SYMBOL_GPL(kgdb_schedule_breakpoint);
+
 static void kgdb_initial_breakpoint(void)
 {
 	kgdb_break_asap = 0;
-- 
1.6.3.rc0.1.gf800


  reply	other threads:[~2009-05-08 21:27 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-08 21:23 [PATCH 0/13] RFC ONLY - kdb for kgdb Jason Wessel
2009-05-08 21:23 ` [PATCH 01/13] RFC ONLY - kdb: core for kgdb back end Jason Wessel
2009-05-08 21:23   ` [PATCH 02/13] RFC ONLY - kgdb: core changes to support kdb Jason Wessel
2009-05-08 21:23     ` [PATCH 03/13] RFC ONLY - kgdb,8250,pl011: Return immediately from console poll Jason Wessel
2009-05-08 21:23       ` [PATCH 04/13] RFC ONLY - kgdb: gdb "monitor" -> kdb passthrough Jason Wessel
2009-05-08 21:23         ` [PATCH 05/13] RFC ONLY - kgdboc,keyboard: Keyboard driver for kdb with kgdb Jason Wessel
2009-05-08 21:23           ` [PATCH 06/13] kgdb: remove post_primary_code references Jason Wessel
2009-05-08 21:23             ` [PATCH 07/13] RFC ONLY - x86,kgdb: Add low level debug hook Jason Wessel
2009-05-08 21:23               ` [PATCH 08/13] RFC ONLY - arm,kgdb: Add hook to catch an oops with debugger Jason Wessel
2009-05-08 21:23                 ` [PATCH 09/13] RFC ONLY - powerpc,kgdb: Introduce low level trap catching Jason Wessel
2009-05-08 21:23                   ` [PATCH 10/13] RFC ONLY - mips,kgdb: kdb low level trap catch and stack trace Jason Wessel
2009-05-08 21:23                     ` Jason Wessel [this message]
2009-05-08 21:23                       ` [PATCH 12/13] RFC ONLY - kgdb,kdb: use async breakpoint for sysrq for usb Jason Wessel
2009-05-08 21:23                         ` [PATCH 13/13] RFC ONLY - usb,keyboard: uchi, echi, and ochi polling keyboard urbs Jason Wessel
2009-05-09  4:09   ` [PATCH 01/13] RFC ONLY - kdb: core for kgdb back end Ingo Molnar
2009-05-19 18:22     ` Jason Wessel
2009-05-08 21:49 ` [PATCH 0/13] RFC ONLY - kdb for kgdb Maxim Levitsky
2009-05-11  9:15 ` Louis Rilling
2009-05-11  9:23   ` Christoph Hellwig
2009-05-11  9:51     ` Louis Rilling
2009-05-11  9:22 ` [kdb] " Christoph Hellwig
2009-05-11 12:57   ` Martin Hicks

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=1241817800-9320-12-git-send-email-jason.wessel@windriver.com \
    --to=jason.wessel@windriver.com \
    --cc=kdb@oss.sgi.com \
    --cc=kgdb-bugreport@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.