linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

2016-04-15から1日間の記事一覧

ユーティリティー - context_tracking_is_enabled()

概要 context_tracking_enabledの値が有効であるか確認する 詳細 CONFIG_CONTEXT_TRACKINGが無効な場合は常に0を返すが、有効な場合はstatic_branch_unlikely()でcontext_tracking_enabledの値が0で無いことを確認する

ユーティリティー - context_tracking_enabled

概要 struct static_key_false型の変数 詳細 DEFINE_STATIC_KEY_FALSE()で定義されるstruct static_key_false型の変数で、EXPORT_SYMBOL_GPL()によりモジュールからアクセス可能なシンボルとなる

ユーティリティー - DEFINE_STATIC_KEY_FALSE()

概要 任意のシンボル名でstruct static_key_false型の変数を初期化する 詳細 引数で受け取った値をシンボル名とするstruct static_key_false型の変数をSTATIC_KEY_FALSE_INITで0で初期化する

ユーティリティー - STATIC_KEY_FALSE_INIT

概要 struct static_key_false型の変数を0で初期化する 詳細 STATIC_KEY_INIT_FALSEでstruct static_key_false型の変数のkeyメンバを0で初期化する命令を生成する

ユーティリティー - STATIC_KEY_INIT_FALSE

概要 struct static_key型の変数を0で初期化する 詳細 ATOMIC_INIT()でstruct static_key型のメンバenabledを0で初期化するが、HAVE_JUMP_LABELが定義されている場合はstruct jump_entry型のメンバentriesをJUMP_TYPE_FALSEで初期化する命令を生成する

atomic命令 - ATOMIC_INIT()

概要 atomic_t型の変数を初期化する 詳細 _atomic_t型の変数を引数で受け取った任意の値で初期化する命令を生成する

ユーティリティー - static_branch_unlikely()

概要 struct static_key型の値が0であるか確認する 詳細 比較する値xを引数として取得し、HAVE_JUMP_LABELの値によって処理が以下のように変わります 定義済み __builtin_types_compatible_p()でxの型を比較し、型がstruct static_key_trueと一致したらarch_…

最適化 - likely()

概要 値が0でないことを確認し、0以外の場合に最適化されたコードを生成する 詳細 比較する値xを引数として受け取り、CONFIG_TRACE_BRANCH_PROFILINGとDISABLE_BRANCH_PROFILING、__CHECKER__の値によって以下のように処理が異なる CONFIG_TRACE_BRANCH_PROF…

最適化 - unlikely()

概要 値が0であるか確認し、0の場合に最適化されたコードを生成する 詳細 比較する値xを引数として受け取り、CONFIG_TRACE_BRANCH_PROFILINGとDISABLE_BRANCH_PROFILING、__CHECKER__の値によって以下のように処理が異なる CONFIG_TRACE_BRANCH_PROFILINGが…

最適化 - __branch_check__()

概要 二つの値が一致するか比較する 詳細 likely_notrace()に比較対象の値が0以外かどうか確認し、比較した結果を返す また、このマクロ呼び出しの結果をftrace_likely_update()で統計情報(ヒット・ミスのカウンタ)を更新する このマクロはunlikely()でも呼…

文字列操作 - strncpy()

概要 文字列を指定した文字数分コピーする 詳細 この命令は主にdecl、lodsb、stosbの3つの命令からなる 初めに、文字数のカウンタをデクリメントし、カウンタが負数になった場合は処理を終える 次にlodsb命令で%esiレジスタに割り当てられたコピー元の文字列…