Messages in this thread Patch in this message | | | Date | Wed, 19 Mar 2014 14:58:32 +0100 (CET) | From | Thomas Gleixner <> | Subject | Re: rb tree hrtimer lockup bug (found by perf_fuzzer) |
| |
On Wed, 19 Mar 2014, Vince Weaver wrote: > On Tue, 18 Mar 2014, Thomas Gleixner wrote: > your patch didn't seem to print anything additional the first time throug. > > I then tried the trace command you suggested, but I'm getting an empty > ftrace buffer which possibly means I don't have enough ftrace kernel > options enabled. > > Here's the most recent boot crash. > > [ 5.367069] ODEBUG: Info active (active state 0) object type: timer_list hint: (null)
Stupid me. We get the hint from the wreckaged object ....
A hopefully better approach is the delta patch below.
Thanks,
tglx -------------------> Index: linux-2.6/include/linux/debugobjects.h =================================================================== --- linux-2.6.orig/include/linux/debugobjects.h +++ linux-2.6/include/linux/debugobjects.h @@ -30,6 +30,7 @@ struct debug_obj { unsigned int astate; void *object; struct debug_obj_descr *descr; + void *hint; }; /** Index: linux-2.6/lib/debugobjects.c =================================================================== --- linux-2.6.orig/lib/debugobjects.c +++ linux-2.6/lib/debugobjects.c @@ -255,9 +255,9 @@ static void debug_print_object(struct de descr->debug_hint(obj->object) : NULL; limit++; WARN(1, KERN_ERR "ODEBUG: %s %s (active state %u) " - "object type: %s hint: %pS\n", + "object type: %s hint: %pS %pS\n", msg, obj_states[obj->state], obj->astate, - descr->name, hint); + descr->name, hint, obj->hint); } debug_objects_warnings++; } @@ -326,6 +326,9 @@ __debug_object_init(void *addr, struct d debug_object_is_on_stack(addr, onstack); } + if (!obj->hint) + obj->hint = descr->debug_hint ? descr->debug_hint(addr) : NULL; + switch (obj->state) { case ODEBUG_STATE_NONE: case ODEBUG_STATE_INIT: @@ -447,6 +450,8 @@ int debug_object_activate(void *addr, st ret = 0; break; } + if (!obj->hint) + obj->hint = descr->debug_hint ? descr->debug_hint(addr) : NULL; raw_spin_unlock_irqrestore(&db->lock, flags); return ret; }
| |