Неправильные указатели при попытке выделить страницы в виртуальном адресном пространстве ядра
Я работаю над драйвером Linux для x86-64 CentOS 7. У нас есть модуль ядра, который читает и записывает в файлы. Этот модуль пытается получить страницы, которые гарантированно будут смежными. Работает нормально когда пытаюсь поменьше read/write
рабочие места 5 ГБ или 10 ГБ. Я получаю правильные указатели виртуального адресного пространства ядра, такие как 0xffff 8xxx xxxx xxxx
Однако, если я попробую большую работу / данные (скажем, от 20 до 50 ГБ), я получу эти адресные указатели, которые выглядят как 0x0000 00xx xxxx xxxxx
, Это не указатели виртуального адресного пространства ядра.
Из-за этого я вижу сбой ОС. Однако, если я очищаю частоту кеша во время работы с помощью echo 3 > /proc/sys/vm/drop_caches
тогда он работает нормально, и я получаю правильные указатели виртуального адресного пространства ядра.
Мои извинения за этот неопределенный тип вопроса. Любые намеки и предложения приветствуются.
Спасибо