2010-07-28 09:49:56

by Jack Daniel

[permalink] [raw]
Subject: No definition of trace_sched_stat_wait in kernel found!

Greetings,

With reference to the function update_stats_wait_end(), there seems to
be a call to trace_sched_stat_wait(). But strangely I can find no
definition of this function even though the kernel compiles without
any errors. There is no reference to this function
trace_sched_stat_wait() in the System.map file either, which means
this is not getting compiled? Could someone please make sense of this
absurdity.

Thanks,
Jack


2010-07-28 10:13:00

by Li Zefan

[permalink] [raw]
Subject: Re: No definition of trace_sched_stat_wait in kernel found!

Jack Daniel wrote:
> Greetings,
>
> With reference to the function update_stats_wait_end(), there seems to
> be a call to trace_sched_stat_wait(). But strangely I can find no
> definition of this function even though the kernel compiles without
> any errors. There is no reference to this function
> trace_sched_stat_wait() in the System.map file either, which means
> this is not getting compiled? Could someone please make sense of this
> absurdity.
>

It's generated in include/trace/events/sched.h:

DEFINE_EVENT(sched_stat_template, sched_stat_wait,
TP_PROTO(struct task_struct *tsk, u64 delay),
TP_ARGS(tsk, delay));


And the trace_xxx() function is defined by macros in include/linux/tracepoint.h:

#define __DECLARE_TRACE(name, proto, args, data_proto, data_args) \
extern struct tracepoint __tracepoint_##name; \
static inline void trace_##name(proto) \
{ \
if (unlikely(__tracepoint_##name.state)) \
__DO_TRACE(&__tracepoint_##name, \
TP_PROTO(data_proto), \
TP_ARGS(data_args)); \
}
...

2010-07-28 10:23:37

by Jack Daniel

[permalink] [raw]
Subject: Re: No definition of trace_sched_stat_wait in kernel found!

On Wed, Jul 28, 2010 at 3:47 PM, Li Zefan <[email protected]> wrote:
> Jack Daniel wrote:
>> Greetings,
>>
>> With reference to the function update_stats_wait_end(), there seems to
>> be a call to trace_sched_stat_wait(). But strangely I can find no
>> definition of this function even though the kernel compiles without
>> any errors. There is no reference to this function
>> trace_sched_stat_wait() in the System.map file either, which means
>> this is not getting compiled? Could someone please make sense of this
>> absurdity.
>>
>
> It's generated in include/trace/events/sched.h:
>
> DEFINE_EVENT(sched_stat_template, sched_stat_wait,
> ? ? ? ? ? ? TP_PROTO(struct task_struct *tsk, u64 delay),
> ? ? ? ? ? ? TP_ARGS(tsk, delay));
>
>
> And the trace_xxx() function is defined by macros in include/linux/tracepoint.h:
>
> #define __DECLARE_TRACE(name, proto, args, data_proto, data_args) ? ? ? \
> ? ? ? ?extern struct tracepoint __tracepoint_##name; ? ? ? ? ? ? ? ? ? \
> ? ? ? ?static inline void trace_##name(proto) ? ? ? ? ? ? ? ? ? ? ? ? ?\
> ? ? ? ?{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \
> ? ? ? ? ? ? ? ?if (unlikely(__tracepoint_##name.state)) ? ? ? ? ? ? ? ?\
> ? ? ? ? ? ? ? ? ? ? ? ?__DO_TRACE(&__tracepoint_##name, ? ? ? ? ? ? ? ?\
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TP_PROTO(data_proto), ? ? ? ? ? ? ? ? ? \
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TP_ARGS(data_args)); ? ? ? ? ? ? ? ? ? ?\
> ? ? ? ?}
> ? ? ? ?...
>

AH! thanks a lot for pointing this out.

Regards,
Jack