summaryrefslogtreecommitdiff
path: root/vm/vm_anon.c
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2013-07-04 14:20:24 +0200
committerRichard Braun <rbraun@sceen.net>2013-07-06 19:02:10 +0200
commit1c389aca56725700cf9e99805eb90feb0b94072b (patch)
tree22ca929244a33c5d2c699d1a8b16399b2f707de8 /vm/vm_anon.c
parentb6e66e8290ca33102714f34f66d2ed2062ba33f3 (diff)
page fault handling works !
Diffstat (limited to 'vm/vm_anon.c')
-rw-r--r--vm/vm_anon.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/vm/vm_anon.c b/vm/vm_anon.c
index e923ff31..e6d1385f 100644
--- a/vm/vm_anon.c
+++ b/vm/vm_anon.c
@@ -15,8 +15,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <kern/kmem.h>
+#include <kern/error.h>
#include <kern/init.h>
+#include <kern/kmem.h>
#include <kern/list.h>
#include <kern/llsync.h>
#include <kern/macros.h>
@@ -27,6 +28,7 @@
#include <vm/vm_anon.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
+#include <vm/vm_phys.h>
/*
* Anonymous memory container.
@@ -43,7 +45,7 @@ struct vm_anon {
static void vm_anon_ref(struct vm_object *object);
static void vm_anon_unref(struct vm_object *object);
static int vm_anon_get(struct vm_object *object, uint64_t offset,
- struct vm_page **pagep, int access_prot, int advice);
+ struct vm_page **pagep);
static struct vm_object_pager vm_anon_pager = {
.ref = vm_anon_ref,
@@ -108,13 +110,19 @@ vm_anon_unref(struct vm_object *object)
static int
vm_anon_get(struct vm_object *object, uint64_t offset,
- struct vm_page **pagep, int access_prot, int advice)
+ struct vm_page **pagep)
{
+ struct vm_page *page;
+
+ page = vm_phys_alloc(0);
+
+ if (page == NULL)
+ return ERROR_NOMEM;
+
+ /* TODO Insert page in object */
(void)object;
(void)offset;
- (void)pagep;
- (void)access_prot;
- (void)advice;
- return -1;
+ *pagep = page;
+ return 0;
}