Как проверить, является ли данная страница ZERO_PAGE в модуле ядра? - PullRequest
0 голосов
/ 15 мая 2018

Я пишу модуль ядра, где внутри функции мне нужно проверить, передано ли
struct page* отображается на ZERO_PAGE или нет.
Я придумал следующий код, чтобы проверить состояние.

foo (struct page *pp, ..) {
     if(pp == ZERO_PAGE(0)) {
          //say, prefault the page.
     }
}

Когда я пытаюсь скомпилировать это, я получаю следующее предупреждение:

WARNING: "phys_base" [<path_to_'.ko'] undefined!

, когда я пытаюсь 'insmod' '.ko', выдает ошибку «Неизвестный символ» .и печатает
«Неизвестный символ phys_base» в буфере журнала.
Мой Makefile:

obj-m :=zero_page.o

KDIR=/lib/modules/`uname -r`/build

all:
        make -C $(KDIR) M=`pwd` modules

Версия ядра, для которой я пишу модуль:
2.6.18-398.el5 (rhel 5.11)
Я попытался найти некоторые другие «интерфейсы» внутри ядра, чтобы проверить, является ли страница ZERO_PAGE, но не повезло.
Кто-нибудь может сказать мне, как избавиться от этой ошибки. ИЛИ любой другой способ проверить это условие?

ПРИМЕЧАНИЕ: я натолкнулся на это ядро ​​newbie thread , которое решало ту же проблему. <asm/pgtable.h> включены, но не помогают.

1 Ответ

0 голосов
/ 22 июня 2018

Мне удалось найти исправление для этого.
После просмотра некоторого кода ядра я обнаружил, что для ZERO_PAGE адрес_пространства ptr равен NULL.
Следовательно, исправление выглядит примерно так:

if(page->mapping == NULL) {
   // Its a ZERO_PAGE.
}

Спасибо.

...