読者です 読者をやめる 読者になる 読者になる

linuxのメモ

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

bit操作 - __bitmap_equal()

概要

bit数を指定してビットマップを比較する

詳細

この関数では以下の引数を取得する

  • 比較対象のビットマップへのポインタ : bitmap1bitmap2
  • 比較するビット数を示す : bits

bitmap1bitmap2は配列となっているため[要素数 - 1]回bitmap1bitmap2の値を比較し、一度でも異なる値があった場合は0を返す

最後の要素の値は必ずしも全てのbitが比較対象では無いためBITMAP_LAST_WORD_MASK()bitsを渡して比較するbit数のマスク値を取得し*1、それぞれのビットマップの最後の要素の値を排他的論理和で比較した値とマスク値の値の論理積を取ることで、対象bitだけの比較を行う

比較の結果、ビットマップが一致した場合は1を、一致していない場合は0を返す

*1:最後の要素の値は端数になるので下位bitだけが対象になるためbitsをそのまま渡しても問題ない