From 4b2687bd96de7600ce2fc9cdea963ab511ac5c37 Mon Sep 17 00:00:00 2001 From: Richard Braun Date: Fri, 5 Jul 2013 14:24:41 +0200 Subject: actually, it didn't work, but does now --- vm/vm_object.c | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) (limited to 'vm/vm_object.c') diff --git a/vm/vm_object.c b/vm/vm_object.c index 2fa2caae..9e91aad9 100644 --- a/vm/vm_object.c +++ b/vm/vm_object.c @@ -15,19 +15,47 @@ * along with this program. If not, see . */ +#include +#include +#include +#include +#include #include #include #include #include #include +int +vm_object_add(struct vm_object *object, uint64_t offset, struct vm_page *page) +{ + int error; + + mutex_lock(&object->lock); + + error = rdxtree_insert(&object->pages, offset >> PAGE_SHIFT, page); + + if (!error) + object->nr_pages++; + + mutex_unlock(&object->lock); + + assert(!error || (error == ERROR_NOMEM)); + + return error; +} + struct vm_page * vm_object_get(const struct vm_object *object, uint64_t offset) { - (void)object; - (void)offset; + struct vm_page *page; + + llsync_read_enter(); + + /* TODO Handle page state changes */ + page = rdxtree_lookup(&object->pages, offset >> PAGE_SHIFT); - /* TODO Bump radix tree key size to 64-bits */ + llsync_read_leave(); - return NULL; + return page; } -- cgit v1.2.3