diff options
author | alc <alc@FreeBSD.org> | 2008-07-08 04:00:22 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2008-07-08 04:00:22 +0000 |
commit | 88ebbadb2e5a0bfabb40070d1e1007425c31a1b0 (patch) | |
tree | 02af02fffb25f12e10cd6f38d56aff21ebfba6ef /sys/amd64 | |
parent | 798c7a40902b7d2c7cb218573b8c30f27ab8779b (diff) | |
download | FreeBSD-src-88ebbadb2e5a0bfabb40070d1e1007425c31a1b0.zip FreeBSD-src-88ebbadb2e5a0bfabb40070d1e1007425c31a1b0.tar.gz |
Rev 180333, ``Change create_pagetables() and pmap_init() so that many fewer
page table pages have to be preallocated ...'', violates an assumption made
by minidumpsys(): kernel_vm_end is the highest virtual address that has ever
been used by the kernel. Now, however, the kernel code, data, and bss may
reside at addresses beyond kernel_vm_end. This revision modifies the upper
bound on minidumpsys()'s two page table traversals to account for this
possibility.
Diffstat (limited to 'sys/amd64')
-rw-r--r-- | sys/amd64/amd64/minidump_machdep.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/amd64/amd64/minidump_machdep.c b/sys/amd64/amd64/minidump_machdep.c index 6775bca..192b121 100644 --- a/sys/amd64/amd64/minidump_machdep.c +++ b/sys/amd64/amd64/minidump_machdep.c @@ -206,7 +206,8 @@ minidumpsys(struct dumperinfo *di) /* Walk page table pages, set bits in vm_page_dump */ ptesize = 0; pdp = (uint64_t *)PHYS_TO_DMAP(KPDPphys); - for (va = VM_MIN_KERNEL_ADDRESS; va < kernel_vm_end; va += NBPDR) { + for (va = VM_MIN_KERNEL_ADDRESS; va < MAX(KERNBASE + NKPT * NBPDR, + kernel_vm_end); va += NBPDR) { i = (va >> PDPSHIFT) & ((1ul << NPDPEPGSHIFT) - 1); /* * We always write a page, even if it is zero. Each @@ -312,7 +313,8 @@ minidumpsys(struct dumperinfo *di) /* Dump kernel page table pages */ pdp = (uint64_t *)PHYS_TO_DMAP(KPDPphys); - for (va = VM_MIN_KERNEL_ADDRESS; va < kernel_vm_end; va += NBPDR) { + for (va = VM_MIN_KERNEL_ADDRESS; va < MAX(KERNBASE + NKPT * NBPDR, + kernel_vm_end); va += NBPDR) { i = (va >> PDPSHIFT) & ((1ul << NPDPEPGSHIFT) - 1); /* We always write a page, even if it is zero */ if ((pdp[i] & PG_V) == 0) { |