Changeset 68f11ddc in mainline for kernel/generic/src/mm/backend_elf.c
- Timestamp:
- 2018-12-03T16:54:22Z (5 years ago)
- Parents:
- a0765f6
- git-author:
- Jiri Svoboda <jiri@…> (2018-12-03 16:53:27)
- git-committer:
- Jiri Svoboda <jiri@…> (2018-12-03 16:54:22)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/backend_elf.c
ra0765f6 r68f11ddc 219 219 assert(PTE_PRESENT(&pte)); 220 220 221 btree_insert(&area->sh_info->pagemap,221 as_pagemap_insert(&area->sh_info->pagemap, 222 222 (base + P2SZ(j)) - area->base, 223 (void *) PTE_GET_FRAME(&pte), NULL);223 PTE_GET_FRAME(&pte)); 224 224 page_table_unlock(area->as, false); 225 225 … … 267 267 elf_header_t *elf = area->backend_data.elf; 268 268 elf_segment_header_t *entry = area->backend_data.segment; 269 btree_node_t *leaf;270 269 uintptr_t base; 271 270 uintptr_t frame; … … 301 300 mutex_lock(&area->sh_info->lock); 302 301 if (area->sh_info->shared) { 303 bool found = false;304 305 302 /* 306 303 * The address space area is shared. 307 304 */ 308 305 309 frame = (uintptr_t) btree_search(&area->sh_info->pagemap, 310 upage - area->base, &leaf); 311 if (!frame) { 312 unsigned int i; 313 314 /* 315 * Workaround for valid NULL address. 316 */ 317 318 for (i = 0; i < leaf->keys; i++) { 319 if (leaf->key[i] == upage - area->base) { 320 found = true; 321 break; 322 } 323 } 324 } 325 if (frame || found) { 306 errno_t rc = as_pagemap_find(&area->sh_info->pagemap, 307 upage - area->base, &frame); 308 if (rc == EOK) { 326 309 frame_reference_add(ADDR2PFN(frame)); 327 310 page_mapping_insert(AS, upage, frame, … … 415 398 if (dirty && area->sh_info->shared) { 416 399 frame_reference_add(ADDR2PFN(frame)); 417 btree_insert(&area->sh_info->pagemap, upage - area->base,418 (void *) frame, leaf);400 as_pagemap_insert(&area->sh_info->pagemap, upage - area->base, 401 frame); 419 402 } 420 403
Note:
See TracChangeset
for help on using the changeset viewer.