Linux настройка таблицы страниц - PullRequest
0 голосов
/ 30 апреля 2020

Linux исходный код arch / arm64 / kernel / head.S У меня возник вопрос: при реализации макроса compute_indices , в комментарии написано iend += (count - 1) * ptrs , но код, кажется, говорит iend += count * ptrs. Как я должен понимать код? Спасибо.

    /*
 * Compute indices of table entries from virtual address range. If multiple entries
 * were needed in the previous page table level then the next page table level is assumed
 * to be composed of multiple pages. (This effectively scales the end index).
 *
 *  vstart: virtual address of start of range
 *  vend:   virtual address of end of range
 *  shift:  shift used to transform virtual address into index
 *  ptrs:   number of entries in page table
 *  istart: index in table corresponding to vstart
 *  iend:   index in table corresponding to vend
 *  count:  On entry: how many extra entries were required in previous level, scales
 *            our end index.
 *      On exit: returns how many extra entries required for next page table level
 *
 * Preserves:   vstart, vend, shift, ptrs
 * Returns: istart, iend, count
 */
    .macro compute_indices, vstart, vend, shift, ptrs, istart, iend, count
    lsr \iend, \vend, \shift
    mov \istart, \ptrs
    sub \istart, \istart, #1
    and \iend, \iend, \istart   // iend = (vend >> shift) & (ptrs - 1)
    mov \istart, \ptrs
    mul \istart, \istart, \count
    add \iend, \iend, \istart   // iend += (count - 1) * ptrs
                    // our entries span multiple tables

    lsr \istart, \vstart, \shift
    mov \count, \ptrs
    sub \count, \count, #1
    and \istart, \istart, \count

    sub \count, \iend, \istart
    .endm
...