svn commit: r294723 - head/sys/arm/arm
Svatopluk Kraus
skra at FreeBSD.org
Mon Jan 25 12:49:10 UTC 2016
Author: skra
Date: Mon Jan 25 12:49:08 2016
New Revision: 294723
URL: https://svnweb.freebsd.org/changeset/base/294723
Log:
Make minidump more like its i386 original back as with new pmap dump
interface all used physical addresses are PAGE_SIZE aligned.
Add missing copyright.
This is a follow up to r294722.
Modified:
head/sys/arm/arm/minidump_machdep.c
Modified: head/sys/arm/arm/minidump_machdep.c
==============================================================================
--- head/sys/arm/arm/minidump_machdep.c Mon Jan 25 12:43:07 2016 (r294722)
+++ head/sys/arm/arm/minidump_machdep.c Mon Jan 25 12:49:08 2016 (r294723)
@@ -1,4 +1,5 @@
/*-
+ * Copyright (c) 2006 Peter Wemm
* Copyright (c) 2008 Semihalf, Grzegorz Bernacki
* All rights reserved.
*
@@ -66,7 +67,7 @@ static struct kerneldumpheader kdh;
static off_t dumplo;
/* Handle chunked writes. */
-static size_t fragsz, offset;
+static size_t fragsz;
static void *dump_va;
static uint64_t counter, progress;
@@ -94,10 +95,9 @@ blk_flush(struct dumperinfo *di)
if (fragsz == 0)
return (0);
- error = dump_write(di, (char*)dump_va + offset, 0, dumplo, fragsz - offset);
- dumplo += (fragsz - offset);
+ error = dump_write(di, dump_va, 0, dumplo, fragsz);
+ dumplo += fragsz;
fragsz = 0;
- offset = 0;
return (error);
}
@@ -108,36 +108,36 @@ blk_write(struct dumperinfo *di, char *p
int error, i, c;
u_int maxdumpsz;
- maxdumpsz = di->maxiosize;
-
+ maxdumpsz = min(di->maxiosize, MAXDUMPPGS * PAGE_SIZE);
if (maxdumpsz == 0) /* seatbelt */
maxdumpsz = PAGE_SIZE;
-
error = 0;
-
if (ptr != NULL && pa != 0) {
printf("cant have both va and pa!\n");
return (EINVAL);
}
-
+ if (pa != 0) {
+ if ((sz % PAGE_SIZE) != 0) {
+ printf("size not page aligned\n");
+ return (EINVAL);
+ }
+ if ((pa & PAGE_MASK) != 0) {
+ printf("address not page aligned\n");
+ return (EINVAL);
+ }
+ }
if (ptr != NULL) {
/* If we're doing a virtual dump, flush any pre-existing pa pages */
error = blk_flush(di);
if (error)
return (error);
}
-
while (sz) {
- if (fragsz == 0) {
- offset = pa & PAGE_MASK;
- fragsz += offset;
- }
len = maxdumpsz - fragsz;
if (len > sz)
len = sz;
counter += len;
progress -= len;
-
if (counter >> 22) {
printf(" %lld", PG2MB(progress >> PAGE_SHIFT));
counter &= (1<<22) - 1;
More information about the svn-src-head
mailing list