linuxのメモ

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

バッファ操作 - trace_recursive_unlock()

  • 概要

割込みのロックを開放する

詳細

この関数ではstruct ring_buffer_per_cpu構造体へのポインタを引数として受け取り、current_contextメンバの値valを使用する

valの値は低いビットから順に

  • マスク不可割込み
  • ハードウェア割込み
  • ソフトウェア割込み
  • プリエンプション

が実行中かどうかを判断するビットを保持しており、このビットの中で最も低いビットを0にすることでロックを開放する

具体的な計算は[現在の値]と[現在の値 - 1]の論理積を取り、必ず最も低いビットの値が反転するため低いビットから順にロックを解除することになる