Linuxで連続してキャッシュされたページを割り当てるときに例外ページを処理する方法

Linuxで連続してキャッシュされたページを割り当てるときに例外ページを処理する方法

連続したキャッシュページを割り当てるカーネルモジュールコードがあります。私は radix_tree_for_each_contig() を使います。以下はコードの一部です。

radix_tree_for_each_contig(slot, tree_root, iter, index) {
struct page *page;
page = radix_tree_deref_slot(slot);
if (unlikely(!page)) 
     continue;
if (radix_tree_exceptional_entry(page))

上記のコードでは、 radix_tree_deref_slot() の後に Exceptional_entry を確認します。最新のカーネル(4.x)では、radix_tree_Exceptional_entry()はゼロ以外の値を返しますが、古いカーネル3.13.xの同じコードは0を返します。

だから私の質問は、キャッシュに連続ページを割り当てるときにExceptional_entryを処理する方法です。

関連情報