Trace_sched_wakeupはLinuxカーネルから呼び出されますが、どこにも定義されていないようですか?

Trace_sched_wakeupはLinuxカーネルから呼び出されますが、どこにも定義されていないようですか?

Linuxカーネルでwakeupがどのように機能するかをよりよく理解しようとしていますが、ここで見つけました。ttwu_do_wakeup()Trace_sched_wakeupが呼び出されますが、この関数はLinuxカーネルで定義されていないようです。 Elixir Browserでは、Trace_sched_wakeup.cファイルがあるにもかかわらず、「識別子は使用されません」と言います。

また、私のコンピュータでカーネルをgrepingしようとしましたが、Trace_sched_wakeup関数が定義されている場所が見つかりませんでした。

この関数呼び出しはどのように行われますか?

どんなアイデアにも感謝します。

ありがとうございます。

ベストアンサー1

trace_sched_wakeup()で定義トレース/イベント/sched.h、96行マクロを呼び出すと次のようになりますDEFINE_EVENT

DEFINE_EVENT(sched_wakeup_template, sched_wakeup,
         TP_PROTO(struct task_struct *p),
         TP_ARGS(p));

DEFINE_EVENTで定義linux/tracepoint.h、520行:

#define DEFINE_EVENT(template, name, proto, args)       \
    DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))

DECLARE_TRACE次のように定義されます。395行目:

#define DECLARE_TRACE(name, proto, args)                \
    __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args),      \
            cpu_online(raw_smp_processor_id()),     \
            PARAMS(void *__data, proto),            \
            PARAMS(__data, args))

最終的に__DECLARE_TRACE定義231行目:

#define __DECLARE_TRACE(name, proto, args, cond, data_proto, data_args) \
    extern struct tracepoint __tracepoint_##name;           \
    static inline void trace_##name(proto)              \
    {                               \
        if (static_key_false(&__tracepoint_##name.key))     \
            __DO_TRACE(&__tracepoint_##name,        \
                TP_PROTO(data_proto),           \
                TP_ARGS(data_args),         \
                TP_CONDITION(cond), 0);         \
        if (IS_ENABLED(CONFIG_LOCKDEP) && (cond)) {     \
            rcu_read_lock_sched_notrace();          \
            rcu_dereference_sched(__tracepoint_##name.funcs);\
            rcu_read_unlock_sched_notrace();        \
        }                           \
    }                               \
...

これは実際にはtrace_sched_wakeup()次のように定義されます。

static inline void trace_sched_wakeup(struct task_struct *p) { ... }

おすすめ記事