Changes in kernel/generic/src/mm/backend_anon.c [9d58539:55b77d9] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/backend_anon.c
r9d58539 r55b77d9 44 44 #include <mm/frame.h> 45 45 #include <mm/slab.h> 46 #include <mm/km.h>47 46 #include <synch/mutex.h> 48 47 #include <adt/list.h> … … 156 155 int anon_page_fault(as_area_t *area, uintptr_t addr, pf_access_t access) 157 156 { 158 uintptr_t upage = ALIGN_DOWN(addr, PAGE_SIZE);159 uintptr_t kpage;160 157 uintptr_t frame; 161 158 … … 178 175 mutex_lock(&area->sh_info->lock); 179 176 frame = (uintptr_t) btree_search(&area->sh_info->pagemap, 180 upage- area->base, &leaf);177 ALIGN_DOWN(addr, PAGE_SIZE) - area->base, &leaf); 181 178 if (!frame) { 182 179 bool allocate = true; … … 188 185 */ 189 186 for (i = 0; i < leaf->keys; i++) { 190 if (leaf->key[i] == upage - area->base) { 187 if (leaf->key[i] == 188 ALIGN_DOWN(addr, PAGE_SIZE) - area->base) { 191 189 allocate = false; 192 190 break; … … 194 192 } 195 193 if (allocate) { 196 kpage = km_temporary_page_get(&frame, 197 FRAME_NO_RESERVE); 198 memsetb((void *) kpage, PAGE_SIZE, 0); 199 km_temporary_page_put(kpage); 194 frame = (uintptr_t) frame_alloc_noreserve( 195 ONE_FRAME, 0); 196 memsetb((void *) PA2KA(frame), FRAME_SIZE, 0); 200 197 201 198 /* … … 204 201 */ 205 202 btree_insert(&area->sh_info->pagemap, 206 upage - area->base, (void *) frame, leaf); 203 ALIGN_DOWN(addr, PAGE_SIZE) - area->base, 204 (void *) frame, leaf); 207 205 } 208 206 } … … 225 223 * the different causes 226 224 */ 227 kpage = km_temporary_page_get(&frame, FRAME_NO_RESERVE); 228 memsetb((void *) kpage, PAGE_SIZE, 0); 229 km_temporary_page_put(kpage); 225 frame = (uintptr_t) frame_alloc_noreserve(ONE_FRAME, 0); 226 memsetb((void *) PA2KA(frame), FRAME_SIZE, 0); 230 227 } 231 228 232 229 /* 233 * Map ' upage' to 'frame'.230 * Map 'page' to 'frame'. 234 231 * Note that TLB shootdown is not attempted as only new information is 235 232 * being inserted into page tables. 236 233 */ 237 page_mapping_insert(AS, upage, frame, as_area_get_flags(area));238 if (!used_space_insert(area, upage, 1))234 page_mapping_insert(AS, addr, frame, as_area_get_flags(area)); 235 if (!used_space_insert(area, ALIGN_DOWN(addr, PAGE_SIZE), 1)) 239 236 panic("Cannot insert used space."); 240 237
Note:
See TracChangeset
for help on using the changeset viewer.