summaryrefslogtreecommitdiffstats
path: root/vm
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2012-06-21 20:06:48 +0200
committermanuel <manuel@mausz.at>2012-06-21 20:06:48 +0200
commit4fd6a30d164874fd660aacc36b44842e14bba208 (patch)
treeeac23c7483d4ad06ec11c154787b9cee698623cb /vm
parent5a6b07a186f9f3f718f312b6b9b365cb02da6556 (diff)
downloadprogos-4fd6a30d164874fd660aacc36b44842e14bba208.tar.gz
progos-4fd6a30d164874fd660aacc36b44842e14bba208.tar.bz2
progos-4fd6a30d164874fd660aacc36b44842e14bba208.zip
mark pages removed from page/mmap table as clear
Diffstat (limited to 'vm')
-rw-r--r--vm/mmap.c8
-rw-r--r--vm/page.c6
2 files changed, 10 insertions, 4 deletions
diff --git a/vm/mmap.c b/vm/mmap.c
index 0dc9190..8620513 100644
--- a/vm/mmap.c
+++ b/vm/mmap.c
@@ -1,11 +1,11 @@
1#include <string.h> 1#include <string.h>
2#include "userprog/pagedir.h"
3#include "userprog/process.h"
4#include "filesys/file.h" 2#include "filesys/file.h"
5#include "threads/thread.h" 3#include "threads/thread.h"
6#include "threads/vaddr.h" 4#include "threads/vaddr.h"
7#include "threads/malloc.h" 5#include "threads/malloc.h"
8#include "threads/palloc.h" 6#include "threads/palloc.h"
7#include "userprog/pagedir.h"
8#include "userprog/process.h"
9#include "vm/mmap.h" 9#include "vm/mmap.h"
10#include "vm/page.h" 10#include "vm/page.h"
11 11
@@ -128,8 +128,12 @@ mmap_table_remove (struct mmap_table *table, mapid_t mapid)
128 process_unlock_filesys (); 128 process_unlock_filesys ();
129 } 129 }
130 130
131 /* free page and page table entry */
131 if (pte != NULL) 132 if (pte != NULL)
133 {
134 pagedir_clear_page (thread->pagedir, pte->upage);
132 free (pte); 135 free (pte);
136 }
133 137
134 ofs += PGSIZE; 138 ofs += PGSIZE;
135 } 139 }
diff --git a/vm/page.c b/vm/page.c
index b40382f..b98c553 100644
--- a/vm/page.c
+++ b/vm/page.c
@@ -1,10 +1,11 @@
1#include <string.h> 1#include <string.h>
2#include "filesys/file.h" 2#include "filesys/file.h"
3#include "userprog/process.h"
4#include "threads/thread.h" 3#include "threads/thread.h"
5#include "threads/vaddr.h" 4#include "threads/vaddr.h"
6#include "threads/malloc.h" 5#include "threads/malloc.h"
7#include "threads/palloc.h" 6#include "threads/palloc.h"
7#include "userprog/pagedir.h"
8#include "userprog/process.h"
8#include "vm/page.h" 9#include "vm/page.h"
9 10
10static unsigned page_table_hash (const struct hash_elem *e, void *aux UNUSED); 11static unsigned page_table_hash (const struct hash_elem *e, void *aux UNUSED);
@@ -52,6 +53,7 @@ static void
52page_table_entry_free (struct hash_elem *e, void *aux UNUSED) 53page_table_entry_free (struct hash_elem *e, void *aux UNUSED)
53{ 54{
54 struct page_table_entry *pte = hash_entry (e, struct page_table_entry, elem); 55 struct page_table_entry *pte = hash_entry (e, struct page_table_entry, elem);
56 pagedir_clear_page (thread_current ()->pagedir, pte->upage);
55 free (pte); 57 free (pte);
56} 58}
57 59
@@ -97,7 +99,7 @@ page_table_fetch (struct hash *ht, void *upage)
97} 99}
98 100
99/* remove an entry from the page table. returns the element or NULL if not found. 101/* remove an entry from the page table. returns the element or NULL if not found.
100 the caller is responsible for freeing the element! */ 102 the caller is responsible for freeing the element and the associated page! */
101struct page_table_entry * 103struct page_table_entry *
102page_table_remove (struct hash *ht, void *upage) 104page_table_remove (struct hash *ht, void *upage)
103{ 105{