linuxのメモ

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

bit操作 - set_bit()

概要

ビットマップの任意のビットをセットする

詳細

この関数では以下の引数を受け取る

  • ビット番号を示す : nr
  • ビットマップを保持する変数へのポインタ : addr

IS_IMMEDIATE()nrを引数として実行し、nrが定数であるか確認する

  • 定数の場合
  • それ以外の場合
    • BITOP_ADDR()addrを渡して生成した値を出力引数、nrの値を入力引数としてアセンブラ命令btsを実行する

両方のアセンブラ命令の実行結果はいずれもaddrnr番目のビットを1にする

また、いずれの命令においても実行前にLOCK_PREFIXを実行する

この値はCONFIG_SMPが有効な場合は"\n\tlock;"となりメモリをロックするが、無効な場合は空文字となり何も実行されない