Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/src/mm/page_pt.c

    re2a0d76 r15187c3  
    8282       
    8383        if (GET_PTL1_FLAGS(ptl0, PTL0_INDEX(page)) & PAGE_NOT_PRESENT) {
    84                 pte_t *newpt = (pte_t *) PA2KA(frame_alloc(PTL1_SIZE,
    85                     FRAME_LOWMEM, 0));
     84                pte_t *newpt = (pte_t *) frame_alloc(PTL1_SIZE,
     85                    FRAME_LOWMEM | FRAME_KA);
    8686                memsetb(newpt, FRAME_SIZE << PTL1_SIZE, 0);
    8787                SET_PTL1_ADDRESS(ptl0, PTL0_INDEX(page), KA2PA(newpt));
     
    101101       
    102102        if (GET_PTL2_FLAGS(ptl1, PTL1_INDEX(page)) & PAGE_NOT_PRESENT) {
    103                 pte_t *newpt = (pte_t *) PA2KA(frame_alloc(PTL2_SIZE,
    104                     FRAME_LOWMEM, 0));
     103                pte_t *newpt = (pte_t *) frame_alloc(PTL2_SIZE,
     104                    FRAME_LOWMEM | FRAME_KA);
    105105                memsetb(newpt, FRAME_SIZE << PTL2_SIZE, 0);
    106106                SET_PTL2_ADDRESS(ptl1, PTL1_INDEX(page), KA2PA(newpt));
     
    118118       
    119119        if (GET_PTL3_FLAGS(ptl2, PTL2_INDEX(page)) & PAGE_NOT_PRESENT) {
    120                 pte_t *newpt = (pte_t *) PA2KA(frame_alloc(PTL3_SIZE,
    121                     FRAME_LOWMEM, 0));
     120                pte_t *newpt = (pte_t *) frame_alloc(PTL3_SIZE,
     121                    FRAME_LOWMEM | FRAME_KA);
    122122                memsetb(newpt, FRAME_SIZE << PTL3_SIZE, 0);
    123123                SET_PTL3_ADDRESS(ptl2, PTL2_INDEX(page), KA2PA(newpt));
     
    363363 * @param size Size in bytes defining the range of PTL0 entries that will be
    364364 *             altered by this function.
    365  *
    366365 */
    367366void pt_mapping_make_global(uintptr_t base, size_t size)
    368367{
    369         ASSERT(size > 0);
    370        
    371368        uintptr_t ptl0 = PA2KA((uintptr_t) AS_KERNEL->genarch.page_table);
    372369        uintptr_t ptl0_step = ptl0_step_get();
    373370        size_t order;
    374        
     371        uintptr_t addr;
     372
    375373#if (PTL1_ENTRIES != 0)
    376374        order = PTL1_SIZE;
     
    380378        order = PTL3_SIZE;
    381379#endif
    382        
    383         for (uintptr_t addr = ALIGN_DOWN(base, ptl0_step);
    384             addr - 1 < base + size - 1;
     380
     381        ASSERT(size > 0);
     382
     383        for (addr = ALIGN_DOWN(base, ptl0_step); addr - 1 < base + size - 1;
    385384            addr += ptl0_step) {
    386                 uintptr_t l1 = PA2KA(frame_alloc(order, FRAME_LOWMEM, 0));
     385                uintptr_t l1;
     386
     387                l1 = (uintptr_t) frame_alloc(order, FRAME_KA | FRAME_LOWMEM);
    387388                memsetb((void *) l1, FRAME_SIZE << order, 0);
    388389                SET_PTL1_ADDRESS(ptl0, PTL0_INDEX(addr), KA2PA(l1));
Note: See TracChangeset for help on using the changeset viewer.