Several small fixes for the amd64 minidump code.
In report_progress(), use nitems(progress_track) instead of manually hard-coding array size. Wrap long line. In blk_write(), code verifies that ptr and pa cannot be non-zero simultaneously. The later check for the page-alignment of the ptr argument never triggers due to pa != 0 always implying ptr == NULL. I believe that the intent was to ensure that physicall address passed is page-aligned, since the address is (temporary) mapped for the duration of the page write. Clear the progress_track.visited fields when starting minidump. If minidump is restarted or taken second time during the system lifetime, progress is not printed otherwise, making operator suspectible to the dump status. Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week
This commit is contained in:
parent
e352aa585e
commit
1e4f45b18a
@ -127,8 +127,9 @@ report_progress(size_t progress, size_t dumpsize)
|
||||
int sofar, i;
|
||||
|
||||
sofar = 100 - ((progress * 100) / dumpsize);
|
||||
for (i = 0; i < 10; i++) {
|
||||
if (sofar < progress_track[i].min_per || sofar > progress_track[i].max_per)
|
||||
for (i = 0; i < nitems(progress_track); i++) {
|
||||
if (sofar < progress_track[i].min_per ||
|
||||
sofar > progress_track[i].max_per)
|
||||
continue;
|
||||
if (progress_track[i].visited)
|
||||
return;
|
||||
@ -157,8 +158,8 @@ blk_write(struct dumperinfo *di, char *ptr, vm_paddr_t pa, size_t sz)
|
||||
printf("cant have both va and pa!\n");
|
||||
return (EINVAL);
|
||||
}
|
||||
if (pa != 0 && (((uintptr_t)ptr) % PAGE_SIZE) != 0) {
|
||||
printf("address not page aligned\n");
|
||||
if ((((uintptr_t)pa) % PAGE_SIZE) != 0) {
|
||||
printf("address not page aligned %p\n", ptr);
|
||||
return (EINVAL);
|
||||
}
|
||||
if (ptr != NULL) {
|
||||
@ -230,6 +231,8 @@ minidumpsys(struct dumperinfo *di)
|
||||
retry:
|
||||
retry_count++;
|
||||
counter = 0;
|
||||
for (i = 0; i < nitems(progress_track); i++)
|
||||
progress_track[i].visited = 0;
|
||||
/* Walk page table pages, set bits in vm_page_dump */
|
||||
pmapsize = 0;
|
||||
for (va = VM_MIN_KERNEL_ADDRESS; va < MAX(KERNBASE + nkpt * NBPDR,
|
||||
|
Loading…
Reference in New Issue
Block a user