[ create a new paste ] login | about

Link: http://codepad.org/xAdTOmJO    [ raw code | fork ]

C, pasted on Nov 29:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void page_fault_handler(void)
{
    uint32_t addr = p->fault_addr;
    uint32_t code = p->error_code;

    int pageno = page_alloc(0);
    ppage_t* page = &page_map[pageno];

    // This fills the page with data
    page_read_in(pageno);

    uint32_t  pd_idx = get_directory_index(addr);
    uint32_t  pt_idx = get_table_index(addr);
    uint32_t* pd = (uint32_t*) p->page_directory;

    uint32_t* pt = pd[pd_idx] & 0xfffff000;

    // Set the page to present
    pt[pt_idx] |= PE_P | (page->paddr & 0xfffff000);
    flush_tlb_entry(addr);
}


Create a new paste based on this one


Comments: