svn commit: r276187 - head/sys/arm/arm
Andrew Turner
andrew at fubar.geek.nz
Wed Dec 24 22:26:51 UTC 2014
On Wed, 24 Dec 2014 17:12:52 +0000 (UTC)
Ian Lepore <ian at 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 at gmail.com>,
> Michal Meloun <meloun at 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
More information about the svn-src-all
mailing list