diff options
author | Richard Braun <rbraun@sceen.net> | 2014-11-17 21:43:54 +0100 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2014-11-17 21:43:54 +0100 |
commit | 43533e334e6ec118651c2c689ddb75adb73d922b (patch) | |
tree | c89e07a929c183eb2cd1bab22c7427042ed4c2f3 | |
parent | e57af3406e44e769b8f530b3fddc3845d8f15d12 (diff) |
vm/vm_map: minor interface updates
Update interface so that it's closer to the standard mmap() call. Fix
some offset declarations as uint64_t.
-rw-r--r-- | vm/vm_kmem.c | 2 | ||||
-rw-r--r-- | vm/vm_map.c | 35 | ||||
-rw-r--r-- | vm/vm_map.h | 7 |
3 files changed, 24 insertions, 20 deletions
diff --git a/vm/vm_kmem.c b/vm/vm_kmem.c index 11571dfa..e1b7a431 100644 --- a/vm/vm_kmem.c +++ b/vm/vm_kmem.c @@ -125,7 +125,7 @@ vm_kmem_alloc_va(size_t size) va = 0; flags = VM_MAP_FLAGS(VM_PROT_ALL, VM_PROT_ALL, VM_INHERIT_NONE, VM_ADV_DEFAULT, 0); - error = vm_map_enter(kernel_map, NULL, 0, &va, size, 0, flags); + error = vm_map_enter(kernel_map, &va, size, 0, flags, NULL, 0); if (error) return 0; diff --git a/vm/vm_map.c b/vm/vm_map.c index 1bec65cc..cb9294ec 100644 --- a/vm/vm_map.c +++ b/vm/vm_map.c @@ -64,12 +64,12 @@ * by the mapping functions. */ struct vm_map_request { - struct vm_object *object; - unsigned long offset; unsigned long start; size_t size; size_t align; int flags; + struct vm_object *object; + uint64_t offset; struct vm_map_entry *next; }; @@ -85,9 +85,9 @@ struct vm_map_kentry_slab { struct vm_map_kentry_slab *next; }; -static int vm_map_prepare(struct vm_map *map, struct vm_object *object, - unsigned long offset, unsigned long start, +static int vm_map_prepare(struct vm_map *map, unsigned long start, size_t size, size_t align, int flags, + struct vm_object *object, uint64_t offset, struct vm_map_request *request); static int vm_map_insert(struct vm_map *map, struct vm_map_entry *entry, @@ -276,8 +276,8 @@ vm_map_kentry_setup(void) assert(vm_page_aligned(VM_MAP_KENTRY_SIZE)); flags = VM_MAP_FLAGS(VM_PROT_ALL, VM_PROT_ALL, VM_INHERIT_NONE, VM_ADV_DEFAULT, VM_MAP_NOMERGE); - error = vm_map_prepare(kernel_map, NULL, 0, 0, VM_MAP_KENTRY_SIZE + size, - 0, flags, &request); + error = vm_map_prepare(kernel_map, 0, VM_MAP_KENTRY_SIZE + size, 0, flags, + NULL, 0, &request); if (error) panic("vm_map: kentry mapping setup failed"); @@ -600,18 +600,19 @@ vm_map_unlink(struct vm_map *map, struct vm_map_entry *entry) * prepare the mapping request for that region. */ static int -vm_map_prepare(struct vm_map *map, struct vm_object *object, unsigned long offset, - unsigned long start, size_t size, size_t align, int flags, +vm_map_prepare(struct vm_map *map, unsigned long start, + size_t size, size_t align, int flags, + struct vm_object *object, uint64_t offset, struct vm_map_request *request) { int error; - request->object = object; - request->offset = offset; request->start = start; request->size = size; request->align = align; request->flags = flags; + request->object = object; + request->offset = offset; vm_map_request_assert_valid(request); if (flags & VM_MAP_FIXED) @@ -784,15 +785,16 @@ out: } int -vm_map_enter(struct vm_map *map, struct vm_object *object, uint64_t offset, - unsigned long *startp, size_t size, size_t align, int flags) +vm_map_enter(struct vm_map *map, unsigned long *startp, + size_t size, size_t align, int flags, + struct vm_object *object, uint64_t offset) { struct vm_map_request request; int error; mutex_lock(&map->lock); - error = vm_map_prepare(map, object, offset, *startp, size, align, flags, + error = vm_map_prepare(map, *startp, size, align, flags, object, offset, &request); if (error) @@ -905,11 +907,12 @@ out: } static void -vm_map_init(struct vm_map *map, struct pmap *pmap, unsigned long start, - unsigned long end) +vm_map_init(struct vm_map *map, struct pmap *pmap, + unsigned long start, unsigned long end) { assert(vm_page_aligned(start)); assert(vm_page_aligned(end)); + assert(start < end); mutex_init(&map->lock); list_init(&map->entry_list); @@ -940,7 +943,7 @@ vm_map_setup(void) vm_kmem_boot_space(&start, &end); flags = VM_MAP_FLAGS(VM_PROT_ALL, VM_PROT_ALL, VM_INHERIT_NONE, VM_ADV_DEFAULT, VM_MAP_NOMERGE | VM_MAP_FIXED); - error = vm_map_prepare(kernel_map, NULL, 0, start, end - start, 0, flags, + error = vm_map_prepare(kernel_map, start, end - start, 0, flags, NULL, 0, &request); if (error) diff --git a/vm/vm_map.h b/vm/vm_map.h index c68072d7..02667bd5 100644 --- a/vm/vm_map.h +++ b/vm/vm_map.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, 2013 Richard Braun. + * Copyright (c) 2011-2014 Richard Braun. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -93,8 +93,9 @@ struct vm_map { /* * Create a virtual mapping. */ -int vm_map_enter(struct vm_map *map, struct vm_object *object, uint64_t offset, - unsigned long *startp, size_t size, size_t align, int flags); +int vm_map_enter(struct vm_map *map, unsigned long *startp, + size_t size, size_t align, int flags, + struct vm_object *object, uint64_t offset); /* * Remove mappings from start to end. |