メモリバリア - mb()
概要
命令の実行順序がコード通りに実行されることを保証する
詳細
CONFIG_X86_32の値によって以下のように処理が異なる
- 有効
- alternative()の置き換え元の命令に
lock; addl $0,0(%%esp)
を、置き換え後の命令にmfence
を、機能番号としてX86_FEATURE_XMM2を指定して生成されたアセンブラ命令を実行する - 元の命令はNOP命令であり、CPUがサポートしている場合はmfence命令を実行する
- alternative()の置き換え元の命令に
- 無効
- mfenceアセンブラ命令を実行する
mfence命令はCPUの最適化で命令が実行時に入れ替わること(アウト・オブ・オーダー実行)を防止するメモリバリアの役割を持つ