linuxのメモ

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

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

ユーティリティ - __same_type()

概要 2つの変数の型を比較する 詳細 __builtin_types_compatible_p()により、引数で受け取った2つの変数の型が一致するか比較する

バッファ操作 - rb_page_entries()

概要 バッファ内のエントリ数を取得する 詳細 struct buffer_pageのentriesメンバの値をlocal_read()で読み出し、RB_WRITE_MASKと論理積の結果を返すため、結果は下位20bitが有効な数値となる

ローカルオブジェクト - local_read()

概要 local_t型の変数の値を読み込む 詳細 local_t型の変数を引数として受け取り、atomic_long_read()でlong_t型のaメンバを渡して実行する

atomic操作 - atomic_long_read_acquire()

概要 atomic_long_t型の変数の値をatomicに読み込み、long型の値を返す 詳細 ATOMIC_LONG_READ_OP()に_acquireを渡して実行することで定義され、値の取得に使用される関数はatomic_read_acquire()となる

atomic操作 - atomic_read_acquire()

概要 atomic_t型の変数の値をatomicに読み込む 詳細 atomic_t型の変数を引数として受け取り、smp_load_acquire()に引数の値のcounterメンバを渡して実行する

atomic操作 - smp_load_acquire()

概要 指定された値をatomicに読み込む 詳細 CONFIG_SMPの値によって以下のように処理が異なる 有効 __smp_load_acquire()を実行する 無効 READ_ONCE()で値を取得するが、取得元の値がatomicに取得可能な値かcompiletime_assert_atomic_type()で確認し、その…

atomic操作 - __smp_load_acquire()

概要 指定された値をatomicに読み込む 詳細 READ_ONCE()で値を取得するが、取得元の値がatomicに取得可能な値かcompiletime_assert_atomic_type()で確認する その後 CONFIG_X86_PPRO_FENCEが定義されている場合は__smp_mb()を、未定義の場合はbarrier()を実…

エラー出力 - compiletime_assert_atomic_type()

概要 コンパイル時にエラーを表示するコードを挿入する 詳細 compiletime_assert()のconditionに__native_word()の値を、msgに"Need native word sized stores/loads for atomicity."の文字列を渡して実行することで、atomicに実行可能な型でない場合にエラ…

エラー出力 - compiletime_assert()

概要 コンパイル時にエラーを表示するコードを挿入する 詳細 _compiletime_assert()のprefixに__compiletime_assert__を、suffixにコードの行番号を指定して実行する

エラー出力 - __compiletime_assert()

概要 コンパイル時にエラーを表示するコードを挿入する 詳細 このマクロでは引数として以下の値を受け取る 実行時の状態を示す : condition エラーメッセージを示す : msg 実行する関数名のprefixを示す : prefix 実行する関数名のsuffixを示す : suffix pre…

エラー出力 - __compiletime_error_fallback()

概要 コンパイル時にエラーを検知する 詳細 __CHECKER__が無効な場合は何も実行しないが、有効でかつ引数の値が1の場合はコンパイル時にエラーとなる これは char[1 - 2 * condition] 上記のコードでconditionの値が正の数の場合char型の配列数が負数となる…

エラー出力 - _compiletime_assert()

概要 コンパイル時にエラーを表示するコードを挿入する 詳細 __compiletime_assert()のwrapperマクロ

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

概要 値の大きさがプリミティブ型と一致することを確認する 詳細 引数として受け取った値の大きさがchar型、short型、int型、long型のいずれかと一致することを確認し、プリミティブ型の大きさと一致することを確認する

メモリバリア - __smp_mb()

概要 マルチプロセッサシステムで命令の実行順序の最適化を抑止する 詳細 mb()のwrapperマクロ

メモリバリア - mb()

概要 命令の実行順序がコード通りに実行されることを保証する 詳細 CONFIG_X86_32の値によって以下のように処理が異なる 有効 alternative()の置き換え元の命令にlock; addl $0,0(%%esp)を、置き換え後の命令にmfenceを、機能番号としてX86_FEATURE_XMM2を指…

自己修正コード - alternative()

概要 置換元の命令を任意の命令で置き換えるためにデータを初期化し、初期化完了後はいずれかの命令を実行する 詳細 alternative(小文字でマクロを指定した場合)はアセンブリ命令を実行するALTERNATIVEマクロのwrapperとなる ALTERNATIVEマクロ内では実行可…