Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Dec 2014 22:26:37 +0000
From:      Andrew Turner <andrew@fubar.geek.nz>
To:        Ian Lepore <ian@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r276187 - head/sys/arm/arm
Message-ID:  <20141224222637.03a19e57@bender>
In-Reply-To: <201412241712.sBOHCqvW039381@svn.freebsd.org>
References:  <201412241712.sBOHCqvW039381@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 24 Dec 2014 17:12:52 +0000 (UTC)
Ian Lepore <ian@FreeBSD.org> 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 <onwahe@gmail.com>,
>   		Michal Meloun <meloun@miracle.cz>
> 
> 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?

Andrew



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20141224222637.03a19e57>