Changes in kernel/genarch/src/mm/page_pt.c [ef9a2a8:15187c3] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/genarch/src/mm/page_pt.c
ref9a2a8 r15187c3 77 77 unsigned int flags) 78 78 { 79 //printf("pt_mapping_insert: as=%p, page=0x%08x, frame=0x%08x\n", as, page, frame);80 81 79 pte_t *ptl0 = (pte_t *) PA2KA((uintptr_t) as->genarch.page_table); 82 80 83 //printf("ptl0 = %p\n", ptl0);84 85 81 ASSERT(page_table_locked(as)); 86 82 87 83 if (GET_PTL1_FLAGS(ptl0, PTL0_INDEX(page)) & PAGE_NOT_PRESENT) { 88 // printf("allocating ptl1\n");89 90 84 pte_t *newpt = (pte_t *) frame_alloc(PTL1_SIZE, 91 85 FRAME_LOWMEM | FRAME_KA); 92 93 // printf("newpt = %p, index = %d\n", newpt, PTL0_INDEX(page));94 95 86 memsetb(newpt, FRAME_SIZE << PTL1_SIZE, 0); 96 87 SET_PTL1_ADDRESS(ptl0, PTL0_INDEX(page), KA2PA(newpt)); … … 109 100 pte_t *ptl1 = (pte_t *) PA2KA(GET_PTL1_ADDRESS(ptl0, PTL0_INDEX(page))); 110 101 111 // printf("ptl1 = %p\n", ptl1);112 113 102 if (GET_PTL2_FLAGS(ptl1, PTL1_INDEX(page)) & PAGE_NOT_PRESENT) { 114 // printf("allocating ptl2\n");115 116 103 pte_t *newpt = (pte_t *) frame_alloc(PTL2_SIZE, 117 104 FRAME_LOWMEM | FRAME_KA); 118 119 // printf("newpt = %p, index = %d\n", newpt, PTL1_INDEX(page));120 121 105 memsetb(newpt, FRAME_SIZE << PTL2_SIZE, 0); 122 106 SET_PTL2_ADDRESS(ptl1, PTL1_INDEX(page), KA2PA(newpt)); … … 128 112 */ 129 113 write_barrier(); 130 SET_PTL2_PRESENT(ptl1, PTL1_INDEX(page)); 114 SET_PTL2_PRESENT(ptl1, PTL1_INDEX(page)); 131 115 } 132 116 133 117 pte_t *ptl2 = (pte_t *) PA2KA(GET_PTL2_ADDRESS(ptl1, PTL1_INDEX(page))); 134 118 135 // printf("ptl2 = %p\n", ptl2);136 137 119 if (GET_PTL3_FLAGS(ptl2, PTL2_INDEX(page)) & PAGE_NOT_PRESENT) { 138 // printf("allocating ptl3\n");139 140 120 pte_t *newpt = (pte_t *) frame_alloc(PTL3_SIZE, 141 121 FRAME_LOWMEM | FRAME_KA); 142 143 // printf("newpt = %p, index = %d\n", newpt, PTL2_INDEX(page));144 145 122 memsetb(newpt, FRAME_SIZE << PTL3_SIZE, 0); 146 123 SET_PTL3_ADDRESS(ptl2, PTL2_INDEX(page), KA2PA(newpt)); … … 157 134 pte_t *ptl3 = (pte_t *) PA2KA(GET_PTL3_ADDRESS(ptl2, PTL2_INDEX(page))); 158 135 159 // printf("ptl3 = %p\n", ptl3);160 161 136 SET_FRAME_ADDRESS(ptl3, PTL3_INDEX(page), frame); 162 137 SET_FRAME_FLAGS(ptl3, PTL3_INDEX(page), flags | PAGE_NOT_PRESENT); … … 205 180 * Destroy the mapping. 206 181 * Setting to PAGE_NOT_PRESENT is not sufficient. 207 */ 182 * But we need SET_FRAME for possible PT coherence maintenance. 183 * At least on ARM. 184 */ 185 //TODO: Fix this inconsistency 186 SET_FRAME_FLAGS(ptl3, PTL3_INDEX(page), PAGE_NOT_PRESENT); 208 187 memsetb(&ptl3[PTL3_INDEX(page)], sizeof(pte_t), 0); 209 188
Note:
See TracChangeset
for help on using the changeset viewer.