diff options
author | jeff <jeff@FreeBSD.org> | 2013-08-07 06:21:20 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2013-08-07 06:21:20 +0000 |
commit | de4ecca21340ce4d0bf9182cac133c14e031218e (patch) | |
tree | 950bad07f0aeeeae78036d82b9aa11ae998c3654 /sys/sparc64 | |
parent | e141f5c0bac3839e4886a26e1ba796f4e46e6455 (diff) | |
download | FreeBSD-src-de4ecca21340ce4d0bf9182cac133c14e031218e.zip FreeBSD-src-de4ecca21340ce4d0bf9182cac133c14e031218e.tar.gz |
Replace kernel virtual address space allocation with vmem. This provides
transparent layering and better fragmentation.
- Normalize functions that allocate memory to use kmem_*
- Those that allocate address space are named kva_*
- Those that operate on maps are named kmap_*
- Implement recursive allocation handling for kmem_arena in vmem.
Reviewed by: alc
Tested by: pho
Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'sys/sparc64')
-rw-r--r-- | sys/sparc64/sparc64/bus_machdep.c | 4 | ||||
-rw-r--r-- | sys/sparc64/sparc64/mem.c | 9 | ||||
-rw-r--r-- | sys/sparc64/sparc64/mp_machdep.c | 6 | ||||
-rw-r--r-- | sys/sparc64/sparc64/pmap.c | 3 | ||||
-rw-r--r-- | sys/sparc64/sparc64/vm_machdep.c | 2 |
5 files changed, 14 insertions, 10 deletions
diff --git a/sys/sparc64/sparc64/bus_machdep.c b/sys/sparc64/sparc64/bus_machdep.c index 7f5e76b..415f43d 100644 --- a/sys/sparc64/sparc64/bus_machdep.c +++ b/sys/sparc64/sparc64/bus_machdep.c @@ -655,7 +655,7 @@ sparc64_bus_mem_map(bus_space_tag_t tag, bus_addr_t addr, bus_size_t size, if (vaddr != 0L) sva = trunc_page(vaddr); else { - if ((sva = kmem_alloc_nofault(kernel_map, size)) == 0) + if ((sva = kva_alloc(size)) == 0) panic("%s: cannot allocate virtual memory", __func__); } @@ -701,7 +701,7 @@ sparc64_bus_mem_unmap(bus_space_tag_t tag, bus_space_handle_t handle, for (va = sva; va < endva; va += PAGE_SIZE) pmap_kremove_flags(va); tlb_range_demap(kernel_pmap, sva, sva + size - 1); - kmem_free(kernel_map, sva, size); + kva_free(sva, size); return (0); } diff --git a/sys/sparc64/sparc64/mem.c b/sys/sparc64/sparc64/mem.c index 68c397e..b78f705 100644 --- a/sys/sparc64/sparc64/mem.c +++ b/sys/sparc64/sparc64/mem.c @@ -137,8 +137,11 @@ memrw(struct cdev *dev, struct uio *uio, int flags) if (ova == 0) { if (dcache_color_ignore == 0) colors = DCACHE_COLORS; - ova = kmem_alloc_wait(kernel_map, - PAGE_SIZE * colors); + ova = kva_alloc(PAGE_SIZE * colors); + if (ova == 0) { + error = ENOMEM; + break; + } } if (colors != 1 && m->md.color != -1) va = ova + m->md.color * PAGE_SIZE; @@ -179,6 +182,6 @@ memrw(struct cdev *dev, struct uio *uio, int flags) /* else panic! */ } if (ova != 0) - kmem_free_wakeup(kernel_map, ova, PAGE_SIZE * colors); + kva_free(ova, PAGE_SIZE * colors); return (error); } diff --git a/sys/sparc64/sparc64/mp_machdep.c b/sys/sparc64/sparc64/mp_machdep.c index fccfb6f..8d2282e 100644 --- a/sys/sparc64/sparc64/mp_machdep.c +++ b/sys/sparc64/sparc64/mp_machdep.c @@ -336,10 +336,12 @@ ap_start(phandle_t node, u_int mid, u_int cpu_impl) cpuid_to_mid[cpuid] = mid; cpu_identify(csa->csa_ver, clock, cpuid); - va = kmem_alloc(kernel_map, PCPU_PAGES * PAGE_SIZE); + va = kmem_malloc(kernel_arena, PCPU_PAGES * PAGE_SIZE, + M_WAITOK | M_ZERO); pc = (struct pcpu *)(va + (PCPU_PAGES * PAGE_SIZE)) - 1; pcpu_init(pc, cpuid, sizeof(*pc)); - dpcpu_init((void *)kmem_alloc(kernel_map, DPCPU_SIZE), cpuid); + dpcpu_init((void *)kmem_malloc(kernel_arena, DPCPU_SIZE, + M_WAITOK | M_ZERO), cpuid); pc->pc_addr = va; pc->pc_clock = clock; pc->pc_impl = cpu_impl; diff --git a/sys/sparc64/sparc64/pmap.c b/sys/sparc64/sparc64/pmap.c index 0b1e6b2..ebeedaa 100644 --- a/sys/sparc64/sparc64/pmap.c +++ b/sys/sparc64/sparc64/pmap.c @@ -1210,8 +1210,7 @@ pmap_pinit(pmap_t pm) * Allocate KVA space for the TSB. */ if (pm->pm_tsb == NULL) { - pm->pm_tsb = (struct tte *)kmem_alloc_nofault(kernel_map, - TSB_BSIZE); + pm->pm_tsb = (struct tte *)kva_alloc(TSB_BSIZE); if (pm->pm_tsb == NULL) { PMAP_LOCK_DESTROY(pm); return (0); diff --git a/sys/sparc64/sparc64/vm_machdep.c b/sys/sparc64/sparc64/vm_machdep.c index 8cec001..261c131 100644 --- a/sys/sparc64/sparc64/vm_machdep.c +++ b/sys/sparc64/sparc64/vm_machdep.c @@ -421,7 +421,7 @@ sf_buf_init(void *arg) mtx_init(&sf_freelist.sf_lock, "sf_bufs list lock", NULL, MTX_DEF); SLIST_INIT(&sf_freelist.sf_head); - sf_base = kmem_alloc_nofault(kernel_map, nsfbufs * PAGE_SIZE); + sf_base = kva_alloc(nsfbufs * PAGE_SIZE); sf_bufs = malloc(nsfbufs * sizeof(struct sf_buf), M_TEMP, M_NOWAIT | M_ZERO); for (i = 0; i < nsfbufs; i++) { |