Kernel/Compiler bug
Larry Baird
lab at gta.com
Fri Oct 3 16:46:15 UTC 2014
On Fri, Oct 03, 2014 at 10:35:17AM +0300, Konstantin Belousov wrote:
> I have several notes. Mostly, it comes from my desire to make the patch
> committable.
I went ahead of made the changes over lunch. Hopefully the patch below
addresses all of of the issues. Are you able to shepherd this into head or
should I open a PR?
Index: kern_intr.c
===================================================================
--- kern_intr.c (revision 44897)
+++ kern_intr.c (working copy)
@@ -1386,6 +1386,14 @@
}
}
+#ifdef DEBUG_KERNEL_THREAD_STACK
+static int max_kern_thread_stack_used;
+
+SYSCTL_INT(_kern, OID_AUTO, max_kern_thread_stack_used, CTLFLAG_RD,
+ &max_kern_thread_stack_used, 0,
+ "Maxiumum stack depth used by a kernel thread");
+#endif /* DEBUG_KERNEL_THREAD_STACK */
+
/*
* Main interrupt handling body.
*
@@ -1407,6 +1415,40 @@
td = curthread;
+#ifdef DEBUG_KERNEL_THREAD_STACK
+ /*
+ * Track maximum stack used by a kernel thread.
+ *
+ * Testing for kernel thread isn't strictly needed. It optimizes the
+ * execution, since interrupts from usermode will have only the trap
+ * frame on the stack.
+ */
+ char *bottom_of_stack;
+ char *current;
+ int used;
+
+ if (!TRAPF_USERMODE(frame)) {
+ bottom_of_stack = (char *)(td->td_kstack + td->td_kstack_pages *
+ PAGE_SIZE - 1);
+ current = (char *)&ih;
+
+ /*
+ * Try to detect if interrupt is using kernel thread stack.
+ * Hardware could use a dedicated stack for interrupt handling.
+ */
+ if (bottom_of_stack > current &&
+ current > (char *)(td->td_kstack - PAGE_SIZE)) {
+ used = bottom_of_stack - current;
+
+ while (atomic_load_acq_int(&max_kern_thread_stack_used)
+ < used) {
+ atomic_store_rel_int(&max_kern_thread_stack_used,
+ used);
+ }
+ }
+ }
+#endif /* DEBUG_KERNEL_THREAD_STACK */
+
/* An interrupt with no event or handlers is a stray interrupt. */
if (ie == NULL || TAILQ_EMPTY(&ie->ie_handlers))
return (EINVAL);
--
------------------------------------------------------------------------
Larry Baird
Global Technology Associates, Inc. 1992-2012 | http://www.gta.com
Celebrating Twenty Years of Software Innovation | Orlando, FL
Email: lab at gta.com | TEL 407-380-0220
More information about the freebsd-hackers
mailing list