diff options
author | Richard Braun <rbraun@sceen.net> | 2012-12-22 11:58:49 +0100 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2012-12-22 11:58:49 +0100 |
commit | 3a6de0b73e0236d22f04844ca40349d1f3a4e59f (patch) | |
tree | 93c05669076dd2a7aca518a8f26348bca31b8d76 /vm | |
parent | 055142133fd561a27f9b9765090fc6c1aac0b3dd (diff) |
vm/vm_kmem: make vm_kmem_{alloc,free}_va public
Diffstat (limited to 'vm')
-rw-r--r-- | vm/vm_kmem.c | 15 | ||||
-rw-r--r-- | vm/vm_kmem.h | 18 |
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); |