diff options
-rw-r--r-- | sys/kern/kern_lock.c | 2 | ||||
-rw-r--r-- | sys/kern/subr_stack.c | 10 | ||||
-rw-r--r-- | sys/sys/stack.h | 8 |
3 files changed, 12 insertions, 8 deletions
diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c index 2fcda62..a0ac607 100644 --- a/sys/kern/kern_lock.c +++ b/sys/kern/kern_lock.c @@ -168,7 +168,7 @@ lockmgr(lkp, flags, interlkp, td) { struct stack stack; /* XXX */ stack_save(&stack); - CTRSTACK(KTR_LOCK, &stack, 1); + CTRSTACK(KTR_LOCK, &stack, 0, 1); } #endif diff --git a/sys/kern/subr_stack.c b/sys/kern/subr_stack.c index 9b2be7b..47dd205 100644 --- a/sys/kern/subr_stack.c +++ b/sys/kern/subr_stack.c @@ -115,7 +115,8 @@ stack_sbuf_print(struct sbuf *sb, struct stack *st) #ifdef KTR void -stack_ktr(u_int mask, const char *file, int line, struct stack *st, int cheap) +stack_ktr(u_int mask, const char *file, int line, struct stack *st, u_int depth, + int cheap) { const char *name; long offset; @@ -136,12 +137,15 @@ stack_ktr(u_int mask, const char *file, int line, struct stack *st, int cheap) ktr_tracepoint(mask, file, line, "#2 %p %p %p %p %p %p", st->pcs[12], st->pcs[13], st->pcs[14], st->pcs[15], st->pcs[16], st->pcs[17]); - } else - for (i = 0; i < st->depth; i++) { + } else { + if (depth == 0 || st->depth < depth) + depth = st->depth; + for (i = 0; i < depth; i++) { stack_symbol(st->pcs[i], &name, &offset); ktr_tracepoint(mask, file, line, "#%d %p at %s+%#lx", i, st->pcs[i], (u_long)name, offset, 0, 0); } + } } #endif diff --git a/sys/sys/stack.h b/sys/sys/stack.h index 768c275..a7ac114 100644 --- a/sys/sys/stack.h +++ b/sys/sys/stack.h @@ -47,13 +47,13 @@ void stack_zero(struct stack *); void stack_print(struct stack *); void stack_sbuf_print(struct sbuf *, struct stack *); #ifdef KTR -void stack_ktr(u_int, const char *, int, struct stack *, int); -#define CTRSTACK(m, st, cheap) do { \ +void stack_ktr(u_int, const char *, int, struct stack *, u_int, int); +#define CTRSTACK(m, st, depth, cheap) do { \ if (KTR_COMPILE & (m)) \ - stack_ktr((m), __FILE__, __LINE__, st, cheap); \ + stack_ktr((m), __FILE__, __LINE__, st, depth, cheap); \ } while(0) #else -#define CTRSTACK(m, st, cheap) +#define CTRSTACK(m, st, depth, cheap) #endif /* MD Routine. */ |