linuxのメモ

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

バッファ操作 - ring_buffer_record_on()

概要

ring_buffer構造体のオブジェクトを有効にする

詳細

ring_buffer構造体のポインタを引数として受け取り、ring_buffer構造体のrecord_disabledメンバのRB_BUFFER_OFFフラグを落とす

record_disabledメンバはatomic_t型の変数として宣言されているため、読込はatomic_read()を使用し、読み込んだ値とRB_BUFFER_OFFフラグを反転した値を論理積した値を書き込む

書込みにはatomic_cmpxchg()を使用し、書込みが成功した場合は元の値が帰ってくるため、書込みが成功するまで値の取得と更新を繰り返し、値を確実に更新する