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を検出できるようになり未使用の値を認識できるようになるから、その場合のチェックを行わないということなのだろうか・・・