linuxのメモ

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

atmic操作 - __READ_ONCE

概要

指定された値をatomicに読み込む

詳細

checkの値に応じて__read_once_size_nocheck()__read_once_size()を切り替えるがCONFIG_KASANが無効なときは両関数は同一である。

CONFIG_KASANが有効な場合は宣言が

static __always_inline

から

static __no_sanitize_address __maybe_unused

に変わるだけで処理自体は変わらない。

宣言が変わることで__read_once_size_nocheck()はinline関数ではなくなり、代わりに以下の機能が追加される

  • 値のoverflowとunderflowを検出できるようになる
  • 値が使用されていない場合もwarningエラーにならないようにする

nocheckの意味はoverflowとunderflowを検出できるようになり未使用の値を認識できるようになるから、その場合のチェックを行わないということなのだろうか・・・