Changeset 7cb567cd in mainline for kernel/arch/ia32


Ignore:
Timestamp:
2007-04-08T20:52:53Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e5dbbe5
Parents:
328f324b
Message:

map kernel pages explicitly as writable (this solves compatibility issues with Intel Core 2)
make VESA framebuffer initialization more robust

Location:
kernel/arch/ia32/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia32/src/boot/boot.S

    r328f324b r7cb567cd  
    6464        multiboot_meeting_point:
    6565       
    66         pushl %ebx                                                      # save parameters from GRUB
    67         pushl %eax
     66        movl %eax, grub_eax                                     # save parameters from GRUB
     67        movl %ebx, grub_ebx
    6868       
    6969        xorl %eax, %eax 
     
    105105        call map_kernel                                                 # map kernel and turn paging on
    106106       
    107         popl %eax
    108         popl %ebx
     107        movl grub_eax, %eax
     108        movl grub_ebx, %ebx
    109109        cmpl $MULTIBOOT_LOADER_MAGIC, %eax                              # compare GRUB signature
    110110        je valid_boot
     
    482482.code32
    483483vesa_init_protect:
    484         popl %esp
    485 
    486484        movw $selector(KDATA_DES), %cx
    487485        movw %cx, %es
     
    491489        movw %cx, %ss
    492490       
     491        movl $START_STACK, %esp                 # initialize stack pointer
     492
    493493        jmpl $selector(KTEXT_DES), $vesa_meeting_point
    494494
     
    503503        .space 4096, 0
    504504
     505grub_eax:
     506        .long 0
     507
     508grub_ebx:
     509        .long 0
     510
    505511pse_msg:
    506512        .ascii "Page Size Extension not supported. System halted.\0"
  • kernel/arch/ia32/src/mm/page.c

    r328f324b r7cb567cd  
    6262                 */
    6363                for (cur = 0; cur < last_frame; cur += FRAME_SIZE) {
    64                         flags = PAGE_CACHEABLE;
     64                        flags = PAGE_CACHEABLE | PAGE_WRITE;
    6565                        if ((PA2KA(cur) >= config.base) && (PA2KA(cur) < config.base + config.kernel_size))
    6666                                flags |= PAGE_GLOBAL;
     
    7070                exc_register(14, "page_fault", (iroutine) page_fault);
    7171                write_cr3((uintptr_t) AS_KERNEL->genarch.page_table);
    72         }
    73         else {
     72        } else
    7473                write_cr3((uintptr_t) AS_KERNEL->genarch.page_table);
    75         }
    7674
    7775        paging_on();
     
    8785        pfn_t i;
    8886        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);
    9088       
    9189        last_frame = ALIGN_UP(last_frame + size, FRAME_SIZE);
     
    9694void page_fault(int n, istate_t *istate)
    9795{
    98         uintptr_t page;
     96        uintptr_t page;
    9997        pf_access_t access;
    10098       
    101         page = read_cr2();
     99        page = read_cr2();
    102100               
    103         if (istate->error_word & PFERR_CODE_RSVD)
     101        if (istate->error_word & PFERR_CODE_RSVD)
    104102                panic("Reserved bit set in page directory.\n");
    105103
     
    108106        else
    109107                access = PF_ACCESS_READ;
    110 
    111         if (as_page_fault(page, access, istate) == AS_PF_FAULT) {
     108       
     109        if (as_page_fault(page, access, istate) == AS_PF_FAULT) {
    112110                fault_if_from_uspace(istate, "Page fault: %#x", page);
    113 
    114                 decode_istate(istate);
    115                 printf("page fault address: %#x\n", page);
    116                 panic("page fault\n");
    117         }
     111               
     112                decode_istate(istate);
     113                printf("page fault address: %#x\n", page);
     114                panic("page fault\n");
     115        }
    118116}
    119117
  • kernel/arch/ia32/src/smp/smp.c

    r328f324b r7cb567cd  
    8383        if (config.cpu_count > 1) {             
    8484                page_mapping_insert(AS_KERNEL, l_apic_address, (uintptr_t) l_apic,
    85                                   PAGE_NOT_CACHEABLE);
     85                                  PAGE_NOT_CACHEABLE | PAGE_WRITE);
    8686                page_mapping_insert(AS_KERNEL, io_apic_address, (uintptr_t) io_apic,
    87                                   PAGE_NOT_CACHEABLE);
     87                                  PAGE_NOT_CACHEABLE | PAGE_WRITE);
    8888                                 
    8989                l_apic = (uint32_t *) l_apic_address;
    9090                io_apic = (uint32_t *) io_apic_address;
    91         }
     91        }
    9292}
    9393
Note: See TracChangeset for help on using the changeset viewer.