Changes in kernel/generic/src/mm/backend_anon.c [38dc82d:59fb782] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/backend_anon.c
r38dc82d r59fb782 76 76 .page_fault = anon_page_fault, 77 77 .frame_free = anon_frame_free, 78 79 .create_shared_data = NULL,80 .destroy_shared_data = NULL81 78 }; 82 79 … … 121 118 */ 122 119 mutex_lock(&area->sh_info->lock); 123 list_foreach(area->used_space.leaf_list, leaf_link, btree_node_t,124 node) {120 list_foreach(area->used_space.leaf_list, cur) { 121 btree_node_t *node; 125 122 unsigned int i; 126 123 124 node = list_get_instance(cur, btree_node_t, leaf_link); 127 125 for (i = 0; i < node->keys; i++) { 128 126 uintptr_t base = node->key[i]; … … 131 129 132 130 for (j = 0; j < count; j++) { 133 pte_t pte; 134 bool found; 131 pte_t *pte; 135 132 136 133 page_table_lock(area->as, false); 137 found = page_mapping_find(area->as, 138 base + P2SZ(j), false, &pte); 139 140 ASSERT(found); 141 ASSERT(PTE_VALID(&pte)); 142 ASSERT(PTE_PRESENT(&pte)); 143 134 pte = page_mapping_find(area->as, 135 base + P2SZ(j), false); 136 ASSERT(pte && PTE_VALID(pte) && 137 PTE_PRESENT(pte)); 144 138 btree_insert(&area->sh_info->pagemap, 145 139 (base + P2SZ(j)) - area->base, 146 (void *) PTE_GET_FRAME( &pte), NULL);140 (void *) PTE_GET_FRAME(pte), NULL); 147 141 page_table_unlock(area->as, false); 148 142 149 pfn_t pfn = ADDR2PFN(PTE_GET_FRAME( &pte));143 pfn_t pfn = ADDR2PFN(PTE_GET_FRAME(pte)); 150 144 frame_reference_add(pfn); 151 145 } … … 197 191 return AS_PF_FAULT; 198 192 199 mutex_lock(&area->sh_info->lock); 200 if (area->sh_info->shared) { 193 if (area->sh_info) { 201 194 btree_node_t *leaf; 202 195 … … 208 201 * mapping, a new frame is allocated and the mapping is created. 209 202 */ 203 mutex_lock(&area->sh_info->lock); 210 204 frame = (uintptr_t) btree_search(&area->sh_info->pagemap, 211 205 upage - area->base, &leaf); … … 239 233 } 240 234 frame_reference_add(ADDR2PFN(frame)); 235 mutex_unlock(&area->sh_info->lock); 241 236 } else { 242 237 … … 260 255 * Reserve the memory for this page now. 261 256 */ 262 if (!reserve_try_alloc(1)) { 263 mutex_unlock(&area->sh_info->lock); 257 if (!reserve_try_alloc(1)) 264 258 return AS_PF_SILENT; 265 }266 259 } 267 260 … … 270 263 km_temporary_page_put(kpage); 271 264 } 272 mutex_unlock(&area->sh_info->lock);273 265 274 266 /* … … 303 295 * the normal unreserving frame_free(). 304 296 */ 305 frame_free(frame , 1);297 frame_free(frame); 306 298 } else { 307 299 /* … … 310 302 * manipulate the reserve or it would be given back twice. 311 303 */ 312 frame_free_noreserve(frame , 1);304 frame_free_noreserve(frame); 313 305 } 314 306 }
Note:
See TracChangeset
for help on using the changeset viewer.