bit操作 - set_bit()
概要
ビットマップの任意のビットをセットする
詳細
この関数では以下の引数を受け取る
- ビット番号を示す : nr
- ビットマップを保持する変数へのポインタ : addr
IS_IMMEDIATE()にnrを引数として実行し、nrが定数であるか確認する
- 定数の場合
- CONST_MASK_ADDR()にaddrとnrを渡して生成した値を出力引数に、CONST_MASK()にnrを渡して生成した値を入力引数としてアセンブラ命令
orb
を実行する
- CONST_MASK_ADDR()にaddrとnrを渡して生成した値を出力引数に、CONST_MASK()にnrを渡して生成した値を入力引数としてアセンブラ命令
- それ以外の場合
- BITOP_ADDR()にaddrを渡して生成した値を出力引数、nrの値を入力引数としてアセンブラ命令
bts
を実行する
- BITOP_ADDR()にaddrを渡して生成した値を出力引数、nrの値を入力引数としてアセンブラ命令
両方のアセンブラ命令の実行結果はいずれもaddrのnr番目のビットを1にする
また、いずれの命令においても実行前にLOCK_PREFIXを実行する
この値はCONFIG_SMPが有効な場合は"\n\tlock;"となりメモリをロックするが、無効な場合は空文字となり何も実行されない