Changeset 7cb567cd in mainline for kernel/arch/ia32
- Timestamp:
- 2007-04-08T20:52:53Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e5dbbe5
- Parents:
- 328f324b
- Location:
- kernel/arch/ia32/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia32/src/boot/boot.S
r328f324b r7cb567cd 64 64 multiboot_meeting_point: 65 65 66 pushl %ebx# save parameters from GRUB67 pushl %eax66 movl %eax, grub_eax # save parameters from GRUB 67 movl %ebx, grub_ebx 68 68 69 69 xorl %eax, %eax … … 105 105 call map_kernel # map kernel and turn paging on 106 106 107 popl%eax108 popl%ebx107 movl grub_eax, %eax 108 movl grub_ebx, %ebx 109 109 cmpl $MULTIBOOT_LOADER_MAGIC, %eax # compare GRUB signature 110 110 je valid_boot … … 482 482 .code32 483 483 vesa_init_protect: 484 popl %esp485 486 484 movw $selector(KDATA_DES), %cx 487 485 movw %cx, %es … … 491 489 movw %cx, %ss 492 490 491 movl $START_STACK, %esp # initialize stack pointer 492 493 493 jmpl $selector(KTEXT_DES), $vesa_meeting_point 494 494 … … 503 503 .space 4096, 0 504 504 505 grub_eax: 506 .long 0 507 508 grub_ebx: 509 .long 0 510 505 511 pse_msg: 506 512 .ascii "Page Size Extension not supported. System halted.\0" -
kernel/arch/ia32/src/mm/page.c
r328f324b r7cb567cd 62 62 */ 63 63 for (cur = 0; cur < last_frame; cur += FRAME_SIZE) { 64 flags = PAGE_CACHEABLE ;64 flags = PAGE_CACHEABLE | PAGE_WRITE; 65 65 if ((PA2KA(cur) >= config.base) && (PA2KA(cur) < config.base + config.kernel_size)) 66 66 flags |= PAGE_GLOBAL; … … 70 70 exc_register(14, "page_fault", (iroutine) page_fault); 71 71 write_cr3((uintptr_t) AS_KERNEL->genarch.page_table); 72 } 73 else { 72 } else 74 73 write_cr3((uintptr_t) AS_KERNEL->genarch.page_table); 75 }76 74 77 75 paging_on(); … … 87 85 pfn_t i; 88 86 for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++) 89 page_mapping_insert(AS_KERNEL, virtaddr + PFN2ADDR(i), physaddr + PFN2ADDR(i), PAGE_NOT_CACHEABLE );87 page_mapping_insert(AS_KERNEL, virtaddr + PFN2ADDR(i), physaddr + PFN2ADDR(i), PAGE_NOT_CACHEABLE | PAGE_WRITE); 90 88 91 89 last_frame = ALIGN_UP(last_frame + size, FRAME_SIZE); … … 96 94 void page_fault(int n, istate_t *istate) 97 95 { 98 96 uintptr_t page; 99 97 pf_access_t access; 100 98 101 99 page = read_cr2(); 102 100 103 101 if (istate->error_word & PFERR_CODE_RSVD) 104 102 panic("Reserved bit set in page directory.\n"); 105 103 … … 108 106 else 109 107 access = PF_ACCESS_READ; 110 111 108 109 if (as_page_fault(page, access, istate) == AS_PF_FAULT) { 112 110 fault_if_from_uspace(istate, "Page fault: %#x", page); 113 114 115 116 117 111 112 decode_istate(istate); 113 printf("page fault address: %#x\n", page); 114 panic("page fault\n"); 115 } 118 116 } 119 117 -
kernel/arch/ia32/src/smp/smp.c
r328f324b r7cb567cd 83 83 if (config.cpu_count > 1) { 84 84 page_mapping_insert(AS_KERNEL, l_apic_address, (uintptr_t) l_apic, 85 PAGE_NOT_CACHEABLE );85 PAGE_NOT_CACHEABLE | PAGE_WRITE); 86 86 page_mapping_insert(AS_KERNEL, io_apic_address, (uintptr_t) io_apic, 87 PAGE_NOT_CACHEABLE );87 PAGE_NOT_CACHEABLE | PAGE_WRITE); 88 88 89 89 l_apic = (uint32_t *) l_apic_address; 90 90 io_apic = (uint32_t *) io_apic_address; 91 91 } 92 92 } 93 93
Note:
See TracChangeset
for help on using the changeset viewer.