summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2014-11-17 21:43:54 +0100
committerRichard Braun <rbraun@sceen.net>2014-11-17 21:43:54 +0100
commit43533e334e6ec118651c2c689ddb75adb73d922b (patch)
treec89e07a929c183eb2cd1bab22c7427042ed4c2f3
parente57af3406e44e769b8f530b3fddc3845d8f15d12 (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.c2
-rw-r--r--vm/vm_map.c35
-rw-r--r--vm/vm_map.h7
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.