Как найти функцию PageDirty или определение макроса в исходном коде Linux? - PullRequest
0 голосов
/ 14 июня 2019

В строке 458 файла fs / proc / task_mmu.c в исходном коде Linux есть следующий код:

for (i = 0; i < nr; i++, page++) {
    int mapcount = page_mapcount(page);
    unsigned long pss = (PAGE_SIZE << PSS_SHIFT);

    if (mapcount >= 2) {
        if (dirty || PageDirty(page))
            mss->shared_dirty += PAGE_SIZE;
        else
            mss->shared_clean += PAGE_SIZE;
        mss->pss += pss / mapcount;
        if (locked)
            mss->pss_locked += pss / mapcount;
    } else {
        if (dirty || PageDirty(page))
            mss->private_dirty += PAGE_SIZE;
        else
            mss->private_clean += PAGE_SIZE;
        mss->pss += pss;
        if (locked)
            mss->pss_locked += pss;
    }
}

Является ли PageDirty определением макроса или функцией? Как найти его определение?

1 Ответ

1 голос
/ 14 июня 2019
find /usr/src/linux -type f -print0 | xargs -0 grep $'^[^ \t].*PageDirty'

Путь, вероятно, неправильный, но остальное следует скопировать / вставить теперь, предполагая, что ваша оболочка - bash.Если ваша оболочка не поддерживает $ ' (вы не получите ошибку), вам придется вернуться к встраиванию буквенной вкладки.

Мы ищем глобальнуюстрока определения, содержащая PageDirty.В типичном стиле c только глобальные определения и глобальные комментарии не начинаются с пробела или табуляции.Вы все еще получите несколько дополнительных хитов.Будет очевидно, какой из них правильный из вывода grep.

На самом деле PageDirty () - это макрос, который расширяется до небольшого теста в структуре метаданных страницы.Строка find выше найдет строку #define PageDirty в заголовочном файле.

То, что делает PageDirty(), довольно ясно видно из фрагмента кода.Он проверяет, является ли страница, переданная в качестве аргумента, грязной (то есть должна ли быть записана на диск перед удалением) или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...