Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86, 64bit, mm: Make pgd next calculation consistent with pud/pmd

Just like the way we calculate next for pud and pmd, aka round down and
add size.

Also, do not do boundary-checking with 'next', and just pass 'end' down
to phys_pud_init() instead. Because the loop in phys_pud_init() stops at
PTRS_PER_PUD and thus can handle a possibly bigger 'end' properly.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Link: http://lkml.kernel.org/r/1359058816-7615-6-git-send-email-yinghai@kernel.org
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>

authored by

Yinghai Lu and committed by
H. Peter Anvin
c2bdee59 b422a309

+2 -4
+2 -4
arch/x86/mm/init_64.c
··· 530 530 pgd_t *pgd = pgd_offset_k(start); 531 531 pud_t *pud; 532 532 533 - next = (start + PGDIR_SIZE) & PGDIR_MASK; 534 - if (next > end) 535 - next = end; 533 + next = (start & PGDIR_MASK) + PGDIR_SIZE; 536 534 537 535 if (pgd_val(*pgd)) { 538 536 pud = (pud_t *)pgd_page_vaddr(*pgd); ··· 540 542 } 541 543 542 544 pud = alloc_low_page(); 543 - last_map_addr = phys_pud_init(pud, __pa(start), __pa(next), 545 + last_map_addr = phys_pud_init(pud, __pa(start), __pa(end), 544 546 page_size_mask); 545 547 546 548 spin_lock(&init_mm.page_table_lock);