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