diff options
author | cognet <cognet@FreeBSD.org> | 2012-02-29 12:44:34 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2012-02-29 12:44:34 +0000 |
commit | 410dc4af7f267b132c5c0d5a73090b692e5b370d (patch) | |
tree | 1b602c9fd5543fa238164ee8c78e3c822d0bd522 /sys/arm | |
parent | 295d98ee07c7d5ed197b5f19c42897cce0575bb9 (diff) | |
download | FreeBSD-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.c | 16 | ||||
-rw-r--r-- | sys/arm/xscale/i8134x/crb_machdep.c | 4 |
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 . */ |