Вы должны знать, что x & ((1 << n) - 1)
- это трюк, означающий x % ((int) pow(2, n))
. Часто это быстрее (но лучше оставить такие оптимизации для компилятора).
Так что в этом случае, что это делает, он делает по модулю pow(2, MAX_ORDER)
. Это вызывает обертывание; если page_idx больше pow(2, MAX_ORDER)
, он вернется к 0. Вот эквивалентный, но более читаемый код:
const int MAX_ORDER_N = (int) pow(2, MAX_ORDER);
page_idx = page_to_pfn(page);
/* wraparound */
while (page_idx > MAX_ORDER_N) {
page_idx -= MAX_ORDER_N;
}