Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/mm/as.c

    rae6021d r315b7e3  
    574574 * @param backend_data NULL or a pointer to custom backend data.
    575575 * @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.
    579578 *                     Otherwise ignored.
    580579 *
     
    586585    mem_backend_data_t *backend_data, uintptr_t *base, uintptr_t bound)
    587586{
    588         if ((*base != (uintptr_t) AS_AREA_ANY) && !IS_ALIGNED(*base, PAGE_SIZE))
     587        if ((*base != (uintptr_t) -1) && !IS_ALIGNED(*base, PAGE_SIZE))
    589588                return NULL;
    590589       
     
    602601        mutex_lock(&as->lock);
    603602       
    604         if (*base == (uintptr_t) AS_AREA_ANY) {
     603        if (*base == (uintptr_t) -1) {
    605604                *base = as_get_unmapped_area(as, bound, size, guarded);
    606605                if (*base == (uintptr_t) -1) {
     
    889888               
    890889                                for (; i < node_size; i++) {
    891                                         pte_t pte;
    892                                         bool found = page_mapping_find(as,
    893                                             ptr + P2SZ(i), false, &pte);
     890                                        pte_t *pte = page_mapping_find(as,
     891                                            ptr + P2SZ(i), false);
    894892                                       
    895                                         ASSERT(found);
    896                                         ASSERT(PTE_VALID(&pte));
    897                                         ASSERT(PTE_PRESENT(&pte));
     893                                        ASSERT(pte);
     894                                        ASSERT(PTE_VALID(pte));
     895                                        ASSERT(PTE_PRESENT(pte));
    898896                                       
    899897                                        if ((area->backend) &&
     
    901899                                                area->backend->frame_free(area,
    902900                                                    ptr + P2SZ(i),
    903                                                     PTE_GET_FRAME(&pte));
     901                                                    PTE_GET_FRAME(pte));
    904902                                        }
    905903                                       
     
    10041002                       
    10051003                        for (size = 0; size < (size_t) node->value[i]; size++) {
    1006                                 pte_t pte;
    1007                                 bool found = page_mapping_find(as,
    1008                                      ptr + P2SZ(size), false, &pte);
     1004                                pte_t *pte = page_mapping_find(as,
     1005                                     ptr + P2SZ(size), false);
    10091006                               
    1010                                 ASSERT(found);
    1011                                 ASSERT(PTE_VALID(&pte));
    1012                                 ASSERT(PTE_PRESENT(&pte));
     1007                                ASSERT(pte);
     1008                                ASSERT(PTE_VALID(pte));
     1009                                ASSERT(PTE_PRESENT(pte));
    10131010                               
    10141011                                if ((area->backend) &&
     
    10161013                                        area->backend->frame_free(area,
    10171014                                            ptr + P2SZ(size),
    1018                                             PTE_GET_FRAME(&pte));
     1015                                            PTE_GET_FRAME(pte));
    10191016                                }
    10201017                               
     
    13171314                       
    13181315                        for (size = 0; size < (size_t) node->value[i]; size++) {
    1319                                 pte_t pte;
    1320                                 bool found = page_mapping_find(as,
    1321                                     ptr + P2SZ(size), false, &pte);
     1316                                pte_t *pte = page_mapping_find(as,
     1317                                    ptr + P2SZ(size), false);
    13221318                               
    1323                                 ASSERT(found);
    1324                                 ASSERT(PTE_VALID(&pte));
    1325                                 ASSERT(PTE_PRESENT(&pte));
     1319                                ASSERT(pte);
     1320                                ASSERT(PTE_VALID(pte));
     1321                                ASSERT(PTE_PRESENT(pte));
    13261322                               
    1327                                 old_frame[frame_idx++] = PTE_GET_FRAME(&pte);
     1323                                old_frame[frame_idx++] = PTE_GET_FRAME(pte);
    13281324                               
    13291325                                /* Remove old mapping */
     
    14551451         * we need to make sure the mapping has not been already inserted.
    14561452         */
    1457         pte_t pte;
    1458         bool found = page_mapping_find(AS, page, false, &pte);
    1459         if (found) {
    1460                 if (PTE_PRESENT(&pte)) {
    1461                         if (((access == PF_ACCESS_READ) && PTE_READABLE(&pte)) ||
    1462                             (access == PF_ACCESS_WRITE && PTE_WRITABLE(&pte)) ||
    1463                             (access == PF_ACCESS_EXEC && PTE_EXECUTABLE(&pte))) {
     1453        pte_t *pte;
     1454        if ((pte = page_mapping_find(AS, page, false))) {
     1455                if (PTE_PRESENT(pte)) {
     1456                        if (((access == PF_ACCESS_READ) && PTE_READABLE(pte)) ||
     1457                            (access == PF_ACCESS_WRITE && PTE_WRITABLE(pte)) ||
     1458                            (access == PF_ACCESS_EXEC && PTE_EXECUTABLE(pte))) {
    14641459                                page_table_unlock(AS, false);
    14651460                                mutex_unlock(&area->lock);
     
    21872182
    21882183sysarg_t sys_as_area_create(uintptr_t base, size_t size, unsigned int flags,
    2189     uintptr_t bound, as_area_pager_info_t *pager_info)
     2184    uintptr_t bound)
    21902185{
    21912186        uintptr_t virt = base;
    2192         mem_backend_t *backend;
    2193         mem_backend_data_t backend_data;
    2194 
    2195         if (pager_info == AS_AREA_UNPAGED)
    2196                 backend = &anon_backend;
    2197         else {
    2198                 backend = &user_backend;
    2199                 if (copy_from_uspace(&backend_data.pager_info, pager_info,
    2200                         sizeof(as_area_pager_info_t)) != EOK) {
    2201                         return (sysarg_t) AS_MAP_FAILED;
    2202                 }
    2203         }
    22042187        as_area_t *area = as_area_create(AS, flags, size,
    2205             AS_AREA_ATTR_NONE, backend, &backend_data, &virt, bound);
     2188            AS_AREA_ATTR_NONE, &anon_backend, NULL, &virt, bound);
    22062189        if (area == NULL)
    2207                 return (sysarg_t) AS_MAP_FAILED;
     2190                return (sysarg_t) -1;
    22082191       
    22092192        return (sysarg_t) virt;
Note: See TracChangeset for help on using the changeset viewer.