VMM - touch_page fails if out of pages
This commit is contained in:
@@ -52,14 +52,22 @@ int vmm_set_page(void *P4, uintptr_t addr, uintptr_t page, uint16_t flags)
|
||||
|
||||
int touch_page(void *P4, uintptr_t addr, uint16_t flags)
|
||||
{
|
||||
(void)flags;
|
||||
if(!P4) return -1;
|
||||
if(!P4e(P4, addr).present)
|
||||
P4e(P4, addr).value = pmm_alloc() | flags | PAGE_PRESENT;
|
||||
if(!P3e(P4, addr).present)
|
||||
P3e(P4, addr).value = pmm_alloc() | flags | PAGE_PRESENT;
|
||||
if(!P2e(P4, addr).present)
|
||||
P2e(P4, addr).value = pmm_alloc() | flags | PAGE_PRESENT;
|
||||
|
||||
if((!P4e(P4, addr).present)
|
||||
&& (!(P4e(P4, addr).value = pmm_alloc())))
|
||||
return -1;
|
||||
P4e(P4, addr).value |= flags | PAGE_PRESENT;
|
||||
|
||||
if((!P3e(P4, addr).present)
|
||||
&& (!(P3e(P4, addr).value = pmm_alloc())))
|
||||
return -1;
|
||||
P3e(P4, addr).value |= flags | PAGE_PRESENT;
|
||||
|
||||
if((!P2e(P4, addr).present)
|
||||
&& (!(P2e(P4, addr).value = pmm_alloc())))
|
||||
return -1;
|
||||
P2e(P4, addr).value |= flags | PAGE_PRESENT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user