Skip to content
Snippets Groups Projects
Commit 419593cc authored by Fache Charles's avatar Fache Charles
Browse files

4.6 passes tests

parent 93c00067
No related branches found
Tags tp2-act-4-6
No related merge requests found
......@@ -377,29 +377,32 @@ int load_from_file(char* file,
}
int do_allocate(pagetable_t pagetable, struct proc* p, uint64 addr){
struct vma * this_vma;
uint64 pa;
if((this_vma = get_memory_area(p, addr)) == 0){
pte_t* pt_entry;
if ( !get_memory_area(p, addr)){
return ENOVMA;
}
pte_t* pte = walk(pagetable, addr, 0);
if (pte) {
if(!(*pte & PTE_U))
pt_entry = walk(pagetable, addr, 0);
if(pt_entry){
if( PTE_V & *pt_entry ){
if( PTE_U & *pt_entry){
return 0;
}
return EBADPERM;
return 0;
}
}
//page not present -> do allocation
uint64* phy_addr = kalloc();
if((pa = (uint64)kalloc()) == 0)
if(phy_addr == 0){
return ENOMEM;
}
if (mappages(pagetable, PGROUNDDOWN(addr), PGSIZE, pa, PTE_R | PTE_W | PTE_X | PTE_U) == -1) {
kfree(&pa);
if(mappages( pagetable, addr, PGSIZE, (uint64)phy_addr, PTE_W | PTE_X | PTE_R | PTE_U)){
kfree(phy_addr);
return EMAPFAILED;
}
return 0;
}
int do_allocate_range(pagetable_t pagetable, struct proc* p, uint64 addr, uint64 len){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment