From owner-svn-src-all@FreeBSD.ORG Sun Oct 27 16:31:13 2013 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 88AFECEB; Sun, 27 Oct 2013 16:31:13 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 5D0632FBD; Sun, 27 Oct 2013 16:31:13 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9RGVDeA040743; Sun, 27 Oct 2013 16:31:13 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9RGVDen040742; Sun, 27 Oct 2013 16:31:13 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201310271631.r9RGVDen040742@svn.freebsd.org> From: Konstantin Belousov Date: Sun, 27 Oct 2013 16:31:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r257216 - head/sys/amd64/amd64 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Oct 2013 16:31:13 -0000 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,