Messages in this thread | | | Date | Tue, 26 Nov 2013 19:27:15 +0900 | From | Masami Hiramatsu <> | Subject | Re: Re: [BUG] 3.13-rc1 kernel crash when enable all tracepoints |
| |
(2013/11/26 17:57), Masami Hiramatsu wrote: > (2013/11/26 16:20), Jovi Zhangwei wrote: >> I'm not sure this relate with ftrace:function event, from the >> crash log, it seems more like caused by lock events. >> >> Now I only enable lock events (lockdep compiled in my box), below >> two commands both can crash system. > > That is not the lockdep, but the lockstat. :) > >> >> #echo 1 > /sys/kernel/debug/tracing/events/lock/lock_acquire/enable >> or. >> #echo 1 > /sys/kernel/debug/tracing/events/lock/lock_release/enable >> >> According to the log, it seems like a recursion tracing bug. >> >> register lock event -> jump_label_update -> text_poke_bp -> >> on_each_cpu -> local_apic_timer_interrupt -> ktime_get_update_offsets >> -> lock_release > > OK, the problem is in the lock_acquire/release events.
Hm, it seems that the bug is caused because lock->name is NULL in ftrace_raw_event_lock(_acquire). To allocate a buffer on ring_buffer, ftrace_raw_event_##call tries to measure the length of lock->name but it causes a memory access violation in ftrace_get_offsets_##call because lock->name is NULL. :(
I could fix this by checking lock->name in include/trace/events/lock.h
e.g. TP_STRUCT__entry( __field(unsigned int, flags) __string(name, lock->name ?: "NULL") __field(void *, lockdep_addr) ),
TP_fast_assign( __entry->flags = (trylock ? 1 : 0) | (read ? 2 : 0); __assign_str(name, lock->name ?: "NULL"); __entry->lockdep_addr = lock; ),
Thank you,
-- Masami HIRAMATSU IT Management Research Dept. Linux Technology Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu.pt@hitachi.com
| |