From owner-svn-src-all@FreeBSD.ORG Wed Dec 24 22:40:21 2014 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 4881C68A; Wed, 24 Dec 2014 22:40:21 +0000 (UTC) Received: from mho-01-ewr.mailhop.org (mho-03-ewr.mailhop.org [204.13.248.66]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1DA0D64FEC; Wed, 24 Dec 2014 22:40:20 +0000 (UTC) Received: from [73.34.117.227] (helo=ilsoft.org) by mho-01-ewr.mailhop.org with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.72) (envelope-from ) id 1Y3ubG-000DP2-CR; Wed, 24 Dec 2014 22:40:14 +0000 Received: from revolution.hippie.lan (revolution.hippie.lan [172.22.42.240]) by ilsoft.org (8.14.9/8.14.9) with ESMTP id sBOMeCmZ019204; Wed, 24 Dec 2014 15:40:12 -0700 (MST) (envelope-from ian@freebsd.org) X-Mail-Handler: Dyn Standard SMTP by Dyn X-Originating-IP: 73.34.117.227 X-Report-Abuse-To: abuse@dyndns.com (see http://www.dyndns.com/services/sendlabs/outbound_abuse.html for abuse reporting information) X-MHO-User: U2FsdGVkX18b3fkXn/89IJdP/1HYUWuv Message-ID: <1419460812.1018.157.camel@freebsd.org> Subject: Re: svn commit: r276187 - head/sys/arm/arm From: Ian Lepore To: Andrew Turner Date: Wed, 24 Dec 2014 15:40:12 -0700 In-Reply-To: <20141224222637.03a19e57@bender> References: <201412241712.sBOHCqvW039381@svn.freebsd.org> <20141224222637.03a19e57@bender> Content-Type: text/plain; charset="us-ascii" X-Mailer: Evolution 3.12.8 FreeBSD GNOME Team Port Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.18-1 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: Wed, 24 Dec 2014 22:40:21 -0000 On Wed, 2014-12-24 at 22:26 +0000, Andrew Turner wrote: > On Wed, 24 Dec 2014 17:12:52 +0000 (UTC) > Ian Lepore wrote: > > > Author: ian > > Date: Wed Dec 24 17:12:51 2014 > > New Revision: 276187 > > URL: https://svnweb.freebsd.org/changeset/base/276187 > > > > Log: > > Eliminate unnecessary references to pte.h internals by using the > > standard pmap_kenter_temporary() to map pages while dumping. > > > > Submitted by: Svatopluk Kraus , > > Michal Meloun > > > > Modified: > > head/sys/arm/arm/dump_machdep.c > > > > Modified: head/sys/arm/arm/dump_machdep.c > > ============================================================================== > > --- head/sys/arm/arm/dump_machdep.c Wed Dec 24 16:11:15 > > 2014 (r276186) +++ head/sys/arm/arm/dump_machdep.c Wed > > Dec 24 17:12:51 2014 (r276187) @@ -160,11 +160,13 @@ static int > > cb_dumpdata(struct md_pa *mdp, int seqnr, void *arg) > > { > > struct dumperinfo *di = (struct dumperinfo*)arg; > > - vm_paddr_t pa; > > + vm_paddr_t a, pa; > > + void *va; > > uint32_t pgs; > > size_t counter, sz, chunk; > > - int c, error; > > + int i, c, error; > > > > + va = 0; > > error = 0; /* catch case in which chunk size is 0 */ > > counter = 0; > > pgs = mdp->md_size / PAGE_SIZE; > > @@ -194,16 +196,14 @@ cb_dumpdata(struct md_pa *mdp, int seqnr > > printf(" %d", pgs * PAGE_SIZE); > > counter &= (1<<24) - 1; > > } > > - if (pa == (pa & L1_ADDR_BITS)) { > > - pmap_kenter_section(0, pa & L1_ADDR_BITS, 0); > > - cpu_tlb_flushID_SE(0); > > - cpu_cpwait(); > > + for (i = 0; i < chunk; i++) { > > + a = pa + i * PAGE_SIZE; > > + va = pmap_kenter_temporary(trunc_page(a), i); > > Is this correct? It may map multiple chunks here. > > } > > #ifdef SW_WATCHDOG > > wdog_kern_pat(WD_LASTVAL); > > #endif > > - error = dump_write(di, > > - (void *)(pa - (pa & L1_ADDR_BITS)),0, dumplo, > > sz); > > + error = dump_write(di, va, 0, dumplo, sz); > > Then uses the last virtual address to dump the data here. Wouldn't this > miss the chunks mapped other than the last one? Yeah, but a quirk of pmap_kenter_temporary() is that its return value is constant, so this wrong-looking code is actually right. -- Ian