Я выполняю работу с ядром Linux и перебираю таблицы страниц одновременно из трех разных каталогов страниц. Когда я начал отображать таблицы страниц, я использовал pte_offset_map
. Однако я понял, что при включенном высоком объеме памяти этот метод не будет работать, поскольку pte_offset_map
будет пытаться использовать тот же слот kmap (pte_offset_map использует kmap_atomic
в Linux 2.6.32). Я вижу, что есть pte_offset_map_nested
, который использует другой слот kmap_atomic
.
Однако мне нужно сопоставить три разных таблицы страниц одновременно. Я подумал о некоторых решениях, позволяющих отображать только две таблицы страниц одновременно (я мог чередовать вперед и назад и отображать только две таблицы одновременно, или временно копировать одну таблицу страниц, пока я отображаю две другие, и т. Д ... ) но эти решения нежелательны. Я думал о том, чтобы вручную отобразить таблицу третьей страницы с помощью kmap_atomic(pmd_page(*pmd), KM_USER0)
, но этот подход не кажется слишком общим для разных версий ядра. Однако я считаю, что этот подход является лучшим с точки зрения эффективности и простоты.
Есть какие-нибудь мысли о том, как к этому подойти?