Changes in kernel/generic/src/mm/as.c [38dc82d:75b139f] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/as.c
r38dc82d r75b139f 574 574 * @param backend_data NULL or a pointer to custom backend data. 575 575 * @param base Starting virtual address of the area. 576 * If set to -1, a suitable mappable area is found. 577 * @param bound Lowest address bound if base is set to -1. 576 * If set to AS_AREA_ANY, a suitable mappable area is 577 * found. 578 * @param bound Lowest address bound if base is set to AS_AREA_ANY. 578 579 * Otherwise ignored. 579 580 * … … 585 586 mem_backend_data_t *backend_data, uintptr_t *base, uintptr_t bound) 586 587 { 587 if ((*base != (uintptr_t) -1) && !IS_ALIGNED(*base, PAGE_SIZE))588 if ((*base != (uintptr_t) AS_AREA_ANY) && !IS_ALIGNED(*base, PAGE_SIZE)) 588 589 return NULL; 589 590 … … 601 602 mutex_lock(&as->lock); 602 603 603 if (*base == (uintptr_t) -1) {604 if (*base == (uintptr_t) AS_AREA_ANY) { 604 605 *base = as_get_unmapped_area(as, bound, size, guarded); 605 606 if (*base == (uintptr_t) -1) { … … 888 889 889 890 for (; i < node_size; i++) { 890 pte_t pte; 891 bool found = page_mapping_find(as, 892 ptr + P2SZ(i), false, &pte); 891 pte_t *pte = page_mapping_find(as, 892 ptr + P2SZ(i), false); 893 893 894 ASSERT( found);895 ASSERT(PTE_VALID( &pte));896 ASSERT(PTE_PRESENT( &pte));894 ASSERT(pte); 895 ASSERT(PTE_VALID(pte)); 896 ASSERT(PTE_PRESENT(pte)); 897 897 898 898 if ((area->backend) && … … 900 900 area->backend->frame_free(area, 901 901 ptr + P2SZ(i), 902 PTE_GET_FRAME( &pte));902 PTE_GET_FRAME(pte)); 903 903 } 904 904 … … 1003 1003 1004 1004 for (size = 0; size < (size_t) node->value[i]; size++) { 1005 pte_t pte; 1006 bool found = page_mapping_find(as, 1007 ptr + P2SZ(size), false, &pte); 1005 pte_t *pte = page_mapping_find(as, 1006 ptr + P2SZ(size), false); 1008 1007 1009 ASSERT( found);1010 ASSERT(PTE_VALID( &pte));1011 ASSERT(PTE_PRESENT( &pte));1008 ASSERT(pte); 1009 ASSERT(PTE_VALID(pte)); 1010 ASSERT(PTE_PRESENT(pte)); 1012 1011 1013 1012 if ((area->backend) && … … 1015 1014 area->backend->frame_free(area, 1016 1015 ptr + P2SZ(size), 1017 PTE_GET_FRAME( &pte));1016 PTE_GET_FRAME(pte)); 1018 1017 } 1019 1018 … … 1316 1315 1317 1316 for (size = 0; size < (size_t) node->value[i]; size++) { 1318 pte_t pte; 1319 bool found = page_mapping_find(as, 1320 ptr + P2SZ(size), false, &pte); 1317 pte_t *pte = page_mapping_find(as, 1318 ptr + P2SZ(size), false); 1321 1319 1322 ASSERT( found);1323 ASSERT(PTE_VALID( &pte));1324 ASSERT(PTE_PRESENT( &pte));1320 ASSERT(pte); 1321 ASSERT(PTE_VALID(pte)); 1322 ASSERT(PTE_PRESENT(pte)); 1325 1323 1326 old_frame[frame_idx++] = PTE_GET_FRAME( &pte);1324 old_frame[frame_idx++] = PTE_GET_FRAME(pte); 1327 1325 1328 1326 /* Remove old mapping */ … … 1454 1452 * we need to make sure the mapping has not been already inserted. 1455 1453 */ 1456 pte_t pte; 1457 bool found = page_mapping_find(AS, page, false, &pte); 1458 if (found) { 1459 if (PTE_PRESENT(&pte)) { 1460 if (((access == PF_ACCESS_READ) && PTE_READABLE(&pte)) || 1461 (access == PF_ACCESS_WRITE && PTE_WRITABLE(&pte)) || 1462 (access == PF_ACCESS_EXEC && PTE_EXECUTABLE(&pte))) { 1454 pte_t *pte; 1455 if ((pte = page_mapping_find(AS, page, false))) { 1456 if (PTE_PRESENT(pte)) { 1457 if (((access == PF_ACCESS_READ) && PTE_READABLE(pte)) || 1458 (access == PF_ACCESS_WRITE && PTE_WRITABLE(pte)) || 1459 (access == PF_ACCESS_EXEC && PTE_EXECUTABLE(pte))) { 1463 1460 page_table_unlock(AS, false); 1464 1461 mutex_unlock(&area->lock); … … 2186 2183 2187 2184 sysarg_t sys_as_area_create(uintptr_t base, size_t size, unsigned int flags, 2188 uintptr_t bound )2185 uintptr_t bound, int pager) 2189 2186 { 2190 2187 uintptr_t virt = base; 2188 mem_backend_t *backend; 2189 mem_backend_data_t backend_data; 2190 2191 if (pager == AS_AREA_UNPAGED) 2192 backend = &anon_backend; 2193 else { 2194 backend = &user_backend; 2195 backend_data.pager = pager; 2196 } 2191 2197 as_area_t *area = as_area_create(AS, flags, size, 2192 AS_AREA_ATTR_NONE, &anon_backend, NULL, &virt, bound);2198 AS_AREA_ATTR_NONE, backend, &backend_data, &virt, bound); 2193 2199 if (area == NULL) 2194 return (sysarg_t) -1;2200 return (sysarg_t) AS_MAP_FAILED; 2195 2201 2196 2202 return (sysarg_t) virt;
Note:
See TracChangeset
for help on using the changeset viewer.