Rev 3587 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3587 | Rev 3790 | ||
---|---|---|---|
Line 104... | Line 104... | ||
104 | case AS_PF_FAULT: |
104 | case AS_PF_FAULT: |
105 | page_table_lock(as, lock); |
105 | page_table_lock(as, lock); |
106 | *pfrc = rc; |
106 | *pfrc = rc; |
107 | return NULL; |
107 | return NULL; |
108 | default: |
108 | default: |
109 | panic("unexpected rc (%d)\n", rc); |
109 | panic("Unexpected rc (%d).", rc); |
110 | } |
110 | } |
111 | } |
111 | } |
112 | } |
112 | } |
113 | 113 | ||
114 | 114 | ||
Line 121... | Line 121... | ||
121 | if (s) |
121 | if (s) |
122 | symbol = s; |
122 | symbol = s; |
123 | s = get_symtab_entry(istate->lr); |
123 | s = get_symtab_entry(istate->lr); |
124 | if (s) |
124 | if (s) |
125 | sym2 = s; |
125 | sym2 = s; |
126 | panic("%p: PHT Refill Exception at %p (%s<-%s)\n", badvaddr, istate->pc, symbol, sym2); |
126 | panic("%p: PHT Refill Exception at %p (%s<-%s).", badvaddr, istate->pc, symbol, sym2); |
127 | } |
127 | } |
128 | 128 | ||
129 | 129 | ||
130 | static void pht_insert(const uintptr_t vaddr, const pfn_t pfn) |
130 | static void pht_insert(const uintptr_t vaddr, const pfn_t pfn) |
131 | { |
131 | { |
Line 231... | Line 231... | ||
231 | * or copy_to_uspace(). |
231 | * or copy_to_uspace(). |
232 | */ |
232 | */ |
233 | page_table_unlock(as, lock); |
233 | page_table_unlock(as, lock); |
234 | return; |
234 | return; |
235 | default: |
235 | default: |
236 | panic("Unexpected pfrc (%d)\n", pfrc); |
236 | panic("Unexpected pfrc (%d).", pfrc); |
237 | } |
237 | } |
238 | } |
238 | } |
239 | 239 | ||
240 | pte->a = 1; /* Record access to PTE */ |
240 | pte->a = 1; /* Record access to PTE */ |
241 | pht_insert(badvaddr, pte->pfn); |
241 | pht_insert(badvaddr, pte->pfn); |
Line 286... | Line 286... | ||
286 | 286 | ||
287 | 287 | ||
288 | uintptr_t hw_map(uintptr_t physaddr, size_t size) |
288 | uintptr_t hw_map(uintptr_t physaddr, size_t size) |
289 | { |
289 | { |
290 | if (last_frame + ALIGN_UP(size, PAGE_SIZE) > KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH)) |
290 | if (last_frame + ALIGN_UP(size, PAGE_SIZE) > KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH)) |
291 | panic("Unable to map physical memory %p (%" PRIs " bytes)", physaddr, size) |
291 | panic("Unable to map physical memory %p (%" PRIs " bytes).", physaddr, size) |
292 | 292 | ||
293 | uintptr_t virtaddr = PA2KA(last_frame); |
293 | uintptr_t virtaddr = PA2KA(last_frame); |
294 | pfn_t i; |
294 | pfn_t i; |
295 | for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++) |
295 | for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++) |
296 | page_mapping_insert(AS_KERNEL, virtaddr + PFN2ADDR(i), physaddr + PFN2ADDR(i), PAGE_NOT_CACHEABLE | PAGE_WRITE); |
296 | page_mapping_insert(AS_KERNEL, virtaddr + PFN2ADDR(i), physaddr + PFN2ADDR(i), PAGE_NOT_CACHEABLE | PAGE_WRITE); |