VMM - free_page unsets P2 entry if P1 is empty

This commit is contained in:
2017-12-29 23:33:48 +01:00
parent e62c167494
commit 3134a1d6ad
2 changed files with 29 additions and 0 deletions

View File

@@ -82,4 +82,24 @@ void free_page(void *P4, uintptr_t addr, int free)
))
return;
P1e(P4, addr).value = 0;
union PTE *pt;
pt = PT(P2e(P4, addr).value);
for(int i = 0; i < ENTRIES_PER_PT; i++)
if(pt[i].value)
return;
P2e(P4, addr).value = 0;
pt = PT(P3e(P4, addr).value);
for(int i = 0; i < ENTRIES_PER_PT; i++)
if(pt[i].value)
return;
P3e(P4, addr).value = 0;
pt = PT(P4e(P4, addr).value);
for(int i = 0; i < ENTRIES_PER_PT; i++)
if(pt[i].value)
return;
P4e(P4, addr).value = 0;
}