aboutsummaryrefslogtreecommitdiff
path: root/sys/vm/vm_init.c
diff options
context:
space:
mode:
authorAndrew Gallatin <gallatin@FreeBSD.org>2016-10-03 13:23:43 +0000
committerAndrew Gallatin <gallatin@FreeBSD.org>2016-10-03 13:23:43 +0000
commitedb2994a620283d637b3e6e22800e0183e942201 (patch)
treeadd7bc6bbbd937c7212097eaa1b9652665e854cf /sys/vm/vm_init.c
parent5c1ea1fcd01c9be610c82e8f554edbc2456493e1 (diff)
Notes
Diffstat (limited to 'sys/vm/vm_init.c')
-rw-r--r--sys/vm/vm_init.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/vm/vm_init.c b/sys/vm/vm_init.c
index e6645858ad37..8b5f2adf691f 100644
--- a/sys/vm/vm_init.c
+++ b/sys/vm/vm_init.c
@@ -206,8 +206,18 @@ again:
*/
if (firstaddr == 0) {
size = (vm_size_t)v;
- firstaddr = kmem_malloc(kernel_arena, round_page(size),
- M_ZERO | M_WAITOK);
+#ifdef VM_FREELIST_DMA32
+ /*
+ * Try to protect 32-bit DMAable memory from the largest
+ * early alloc of wired mem.
+ */
+ firstaddr = kmem_alloc_attr(kernel_arena, size,
+ M_ZERO | M_NOWAIT, (vm_paddr_t)1 << 32,
+ ~(vm_paddr_t)0, VM_MEMATTR_DEFAULT);
+ if (firstaddr == 0)
+#endif
+ firstaddr = kmem_malloc(kernel_arena, size,
+ M_ZERO | M_WAITOK);
if (firstaddr == 0)
panic("startup: no room for tables");
goto again;