Hi Dave,

 

I have been looking at the trace extension that you deliver together with crash. In the kernel I look at the trace_array is defined as:

 

struct trace_array {

  struct list_head  list;

  char             *name;

  struct trace_buffer  trace_buffer;

#ifdef CONFIG_TRACER_MAX_TRACE

  /*

  */

  struct trace_buffer  max_buffer;

  bool                 allocated_snapshot;

#endif

  ....

 

However trace.c assumes that if the trace_buffer field exists then the max_buffer field also exists, which is not true. So if CONFIG_TRACER_MAX_TRACE is not defined in the kernel then the trace extension will fail when it is loaded with a message that the max_buffer field does not exist.

 

To fix this then the statements:

 

  init_offset(trace_array, max_buffer);

in the function init_offsets and

 

  ftrace_int_max_tr_trace();

in function ftrace_init should not be executed if the max_buffer field is not present. I have tested this and it works for me.

 

Jan

 

Jan Karlsson

Senior Software Engineer

System Assurance

 

Sony Mobile Communications

Tel: +46 703 062 174

jan.karlsson@sonymobile.com

 

sonymobile.com

 

Sony logotype_23px height_Email_144dpi