Date: Sun, 27 Oct 2013 16:31:13 +0000 (UTC) From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r257216 - head/sys/amd64/amd64 Message-ID: <201310271631.r9RGVDen040742@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kib Date: Sun Oct 27 16:31:12 2013 New Revision: 257216 URL: http://svnweb.freebsd.org/changeset/base/257216 Log: 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 Modified: head/sys/amd64/amd64/minidump_machdep.c Modified: head/sys/amd64/amd64/minidump_machdep.c ============================================================================== --- head/sys/amd64/amd64/minidump_machdep.c Sun Oct 27 16:25:57 2013 (r257215) +++ head/sys/amd64/amd64/minidump_machdep.c Sun Oct 27 16:31:12 2013 (r257216) @@ -127,8 +127,9 @@ report_progress(size_t progress, size_t 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 *p 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,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310271631.r9RGVDen040742>