summaryrefslogtreecommitdiffstats
path: root/sys/arm
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2012-02-29 12:44:34 +0000
committercognet <cognet@FreeBSD.org>2012-02-29 12:44:34 +0000
commit410dc4af7f267b132c5c0d5a73090b692e5b370d (patch)
tree1b602c9fd5543fa238164ee8c78e3c822d0bd522 /sys/arm
parent295d98ee07c7d5ed197b5f19c42897cce0575bb9 (diff)
downloadFreeBSD-src-410dc4af7f267b132c5c0d5a73090b692e5b370d.zip
FreeBSD-src-410dc4af7f267b132c5c0d5a73090b692e5b370d.tar.gz
Make sure we do not provide the page 0 to the VM. It can't handle it properly,
because pmap_extract() returns 0 when there's no mapping. PR: arm/154227 MFC after: 1 week
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/mv/mv_machdep.c16
-rw-r--r--sys/arm/xscale/i8134x/crb_machdep.c4
2 files changed, 15 insertions, 5 deletions
diff --git a/sys/arm/mv/mv_machdep.c b/sys/arm/mv/mv_machdep.c
index 8839740..9afd29a 100644
--- a/sys/arm/mv/mv_machdep.c
+++ b/sys/arm/mv/mv_machdep.c
@@ -287,9 +287,19 @@ physmap_init(void)
availmem_regions[i].mr_start + availmem_regions[i].mr_size,
availmem_regions[i].mr_size);
- phys_avail[j] = availmem_regions[i].mr_start;
- phys_avail[j + 1] = availmem_regions[i].mr_start +
- availmem_regions[i].mr_size;
+ /*
+ * We should not map the page at PA 0x0000000, the VM can't
+ * handle it, as pmap_extract() == 0 means failure.
+ */
+ if (availmem_regions[i].mr_start > 0 ||
+ availmem_regions[i].mr_size > PAGE_SIZE) {
+ phys_avail[j] = availmem_regions[i].mr_start;
+ if (phys_avail[j] == 0)
+ phys_avail[j] += PAGE_SIZE;
+ phys_avail[j + 1] = availmem_regions[i].mr_start +
+ availmem_regions[i].mr_size;
+ } else
+ j -= 2;
}
phys_avail[j] = 0;
phys_avail[j + 1] = 0;
diff --git a/sys/arm/xscale/i8134x/crb_machdep.c b/sys/arm/xscale/i8134x/crb_machdep.c
index 8f2c43eb..b368c19 100644
--- a/sys/arm/xscale/i8134x/crb_machdep.c
+++ b/sys/arm/xscale/i8134x/crb_machdep.c
@@ -381,8 +381,8 @@ initarm(void *arg, void *arg2)
i = 0;
#ifdef ARM_USE_SMALL_ALLOC
- phys_avail[i++] = 0x00000000;
- phys_avail[i++] = 0x00001000; /*
+ phys_avail[i++] = 0x00001000;
+ phys_avail[i++] = 0x00002000; /*
*XXX: Gross hack to get our
* pages in the vm_page_array
. */
OpenPOWER on IntegriCloud