summaryrefslogtreecommitdiff
path: root/vm
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2012-12-22 11:58:49 +0100
committerRichard Braun <rbraun@sceen.net>2012-12-22 11:58:49 +0100
commit3a6de0b73e0236d22f04844ca40349d1f3a4e59f (patch)
tree93c05669076dd2a7aca518a8f26348bca31b8d76 /vm
parent055142133fd561a27f9b9765090fc6c1aac0b3dd (diff)
vm/vm_kmem: make vm_kmem_{alloc,free}_va public
Diffstat (limited to 'vm')
-rw-r--r--vm/vm_kmem.c15
-rw-r--r--vm/vm_kmem.h18
2 files changed, 22 insertions, 11 deletions
diff --git a/vm/vm_kmem.c b/vm/vm_kmem.c
index bbc82a03..bb95f4af 100644
--- a/vm/vm_kmem.c
+++ b/vm/vm_kmem.c
@@ -112,12 +112,14 @@ vm_kmem_free_check(unsigned long addr, size_t size)
return vm_kmem_alloc_check(size);
}
-static unsigned long
+unsigned long
vm_kmem_alloc_va(size_t size)
{
unsigned long va;
int error, flags;
+ assert(vm_kmem_alloc_check(size) == 0);
+
size = vm_page_round(size);
va = 0;
@@ -131,11 +133,13 @@ vm_kmem_alloc_va(size_t size)
return va;
}
-static void
+void
vm_kmem_free_va(unsigned long addr, size_t size)
{
unsigned long end;
+ assert(vm_kmem_free_check(addr, size) == 0);
+
end = addr + vm_page_round(size);
pmap_kremove(addr, end);
pmap_kupdate(addr, end);
@@ -148,8 +152,6 @@ vm_kmem_alloc(size_t size)
struct vm_page *page;
unsigned long va, start, end;
- assert(vm_kmem_alloc_check(size) == 0);
-
va = vm_kmem_alloc_va(size);
if (va == 0)
@@ -179,8 +181,6 @@ vm_kmem_free(unsigned long addr, size_t size)
unsigned long va, end;
phys_addr_t pa;
- assert(vm_kmem_free_check(addr, size) == 0);
-
size = vm_page_round(size);
end = addr + size;
@@ -206,8 +206,6 @@ vm_kmem_map_pa(phys_addr_t addr, size_t size, unsigned long *map_addrp,
size_t map_size;
phys_addr_t start;
- assert(vm_kmem_alloc_check(size) == 0);
-
start = vm_page_trunc(addr);
map_size = vm_page_round(addr + size) - start;
map_addr = vm_kmem_alloc_va(map_size);
@@ -232,6 +230,5 @@ vm_kmem_map_pa(phys_addr_t addr, size_t size, unsigned long *map_addrp,
void
vm_kmem_unmap_pa(unsigned long map_addr, size_t map_size)
{
- assert(vm_kmem_free_check(map_addr, map_size) == 0);
vm_kmem_free_va(map_addr, map_size);
}
diff --git a/vm/vm_kmem.h b/vm/vm_kmem.h
index d0da49f3..feaf0b16 100644
--- a/vm/vm_kmem.h
+++ b/vm/vm_kmem.h
@@ -58,12 +58,26 @@ void vm_kmem_boot_space(unsigned long *start, unsigned long *end);
struct vm_page * vm_kmem_lookup_page(unsigned long va);
/*
- * Allocate memory from the kernel map.
+ * Allocate pure virtual kernel pages.
+ *
+ * The caller is reponsible for taking care of the underlying physical memory.
+ */
+unsigned long vm_kmem_alloc_va(size_t size);
+
+/*
+ * Free virtual kernel pages.
+ *
+ * The caller is reponsible for taking care of the underlying physical memory.
+ */
+void vm_kmem_free_va(unsigned long addr, size_t size);
+
+/*
+ * Allocate kernel pages.
*/
unsigned long vm_kmem_alloc(size_t size);
/*
- * Release memory back to the kernel map.
+ * Free kernel pages.
*/
void vm_kmem_free(unsigned long addr, size_t size);