summaryrefslogtreecommitdiffstats
path: root/sys/sparc64
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2013-08-07 06:21:20 +0000
committerjeff <jeff@FreeBSD.org>2013-08-07 06:21:20 +0000
commitde4ecca21340ce4d0bf9182cac133c14e031218e (patch)
tree950bad07f0aeeeae78036d82b9aa11ae998c3654 /sys/sparc64
parente141f5c0bac3839e4886a26e1ba796f4e46e6455 (diff)
downloadFreeBSD-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.c4
-rw-r--r--sys/sparc64/sparc64/mem.c9
-rw-r--r--sys/sparc64/sparc64/mp_machdep.c6
-rw-r--r--sys/sparc64/sparc64/pmap.c3
-rw-r--r--sys/sparc64/sparc64/vm_machdep.c2
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++) {
OpenPOWER on IntegriCloud