Changes in kernel/arch/ia32/src/mm/page.c [d99c1d2:c15b374] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia32/src/mm/page.c
rd99c1d2 rc15b374 61 61 * PA2KA(identity) mapping for all frames until last_frame. 62 62 */ 63 page_table_lock(AS_KERNEL, true); 63 64 for (cur = 0; cur < last_frame; cur += FRAME_SIZE) { 64 65 flags = PAGE_CACHEABLE | PAGE_WRITE; … … 67 68 page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, flags); 68 69 } 70 page_table_unlock(AS_KERNEL, true); 69 71 70 exc_register(14, "page_fault", (iroutine) page_fault);72 exc_register(14, "page_fault", true, (iroutine_t) page_fault); 71 73 write_cr3((uintptr_t) AS_KERNEL->genarch.page_table); 72 74 } else … … 84 86 uintptr_t virtaddr = PA2KA(last_frame); 85 87 pfn_t i; 88 page_table_lock(AS_KERNEL, true); 86 89 for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++) { 87 90 uintptr_t addr = PFN2ADDR(i); 88 91 page_mapping_insert(AS_KERNEL, virtaddr + addr, physaddr + addr, PAGE_NOT_CACHEABLE | PAGE_WRITE); 89 92 } 93 page_table_unlock(AS_KERNEL, true); 90 94 91 95 last_frame = ALIGN_UP(last_frame + size, FRAME_SIZE); … … 94 98 } 95 99 96 void page_fault( int n __attribute__((unused)), istate_t *istate)100 void page_fault(unsigned int n __attribute__((unused)), istate_t *istate) 97 101 { 98 102 uintptr_t page; … … 111 115 if (as_page_fault(page, access, istate) == AS_PF_FAULT) { 112 116 fault_if_from_uspace(istate, "Page fault: %#x.", page); 113 114 decode_istate(istate); 115 printf("page fault address: %#lx\n", page); 116 panic("Page fault."); 117 panic_memtrap(istate, access, page, NULL); 117 118 } 118 119 }
Note:
See TracChangeset
for help on using the changeset viewer.