summaryrefslogtreecommitdiff
path: root/module
diff options
context:
space:
mode:
authorSoren Sandmann <sandmann@redhat.com>2006-09-23 00:54:01 +0000
committerSøren Sandmann Pedersen <ssp@src.gnome.org>2006-09-23 00:54:01 +0000
commitb7cf5d34b8ee7ca23836f0efc527fd0ee0ce7e61 (patch)
tree0b7bb582aad4254d0356ec451a9340211fcb48fa /module
parent2c04f6e200cc8ac3b02f7acdd515d0e5aea6661c (diff)
Remove old commented out code
2006-08-27 Soren Sandmann <sandmann@redhat.com> * binparser.c: Remove old commented out code 2006-08-27 Soren Sandmann <sandmann@redhat.com> * module/Makefile ($(MODULE).o): Add dependency on sysprof-module.h * elfparser.c (elf_parser_get_eh_frame): Add this function. Remove some commented out code.
Diffstat (limited to 'module')
-rw-r--r--module/Makefile2
-rw-r--r--module/sysprof-module.c31
2 files changed, 32 insertions, 1 deletions
diff --git a/module/Makefile b/module/Makefile
index 850c896..f89c2e3 100644
--- a/module/Makefile
+++ b/module/Makefile
@@ -28,7 +28,7 @@ endif
# build module
-$(MODULE).o: $(MODULE).c
+$(MODULE).o: $(MODULE).c $(MODULE).h
$(KMAKE) modules
diff --git a/module/sysprof-module.c b/module/sysprof-module.c
index d4f30b4..e5ea800 100644
--- a/module/sysprof-module.c
+++ b/module/sysprof-module.c
@@ -126,6 +126,7 @@ timer_notify (struct pt_regs *regs)
StackFrame frame;
int result;
static atomic_t in_timer_notify = ATOMIC_INIT(1);
+ int stacksize;
if (((++get_cpu_var(n_samples)) % INTERVAL) != 0)
return 0;
@@ -157,11 +158,41 @@ timer_notify (struct pt_regs *regs)
trace->addresses[i++] = (void *)regs->REG_INS_PTR;
frame_pointer = (void *)regs->REG_FRAME_PTR;
+
+ {
+ /* In principle we should use get_task_mm() but
+ * that will use task_lock() leading to deadlock
+ * if somebody already has the lock
+ */
+ if (spin_is_locked (&current->alloc_lock))
+ printk ("alreadylocked\n");
+ {
+ struct mm_struct *mm = current->mm;
+ if (mm)
+ {
+ printk (KERN_ALERT "stack size: %d (%d)\n",
+ mm->start_stack - regs->REG_STACK_PTR,
+ current->pid);
+
+ stacksize = mm->start_stack - regs->REG_STACK_PTR;
+ }
+ else
+ stacksize = 1;
+ }
+#if 0
+ else
+ printk (KERN_ALERT "could not lock on %d\n", current->pid);
+#endif
+ }
+ if (stacksize < 100000)
+ goto out;
+
while (((result = read_frame (frame_pointer, &frame)) == 0) &&
i < SYSPROF_MAX_ADDRESSES &&
(unsigned long)frame_pointer >= regs->REG_STACK_PTR)
{
+ printk ("frame pointer: %p (retaddr: %p)\n", frame_pointer, frame.return_address);
trace->addresses[i++] = (void *)frame.return_address;
frame_pointer = (StackFrame *)frame.next;
}