summaryrefslogtreecommitdiff
path: root/kernel/memory
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-04-24 14:37:44 -0400
committerFreya Murphy <freya@freyacat.org>2025-04-24 14:38:02 -0400
commit0096743bce5e1e3e03756fd4f7c441036e1589cd (patch)
tree04fd04144d087e3770730e799eb7cff6f0d5cc84 /kernel/memory
parentsize_t for alloc pages cals (diff)
downloadcomus-0096743bce5e1e3e03756fd4f7c441036e1589cd.tar.gz
comus-0096743bce5e1e3e03756fd4f7c441036e1589cd.tar.bz2
comus-0096743bce5e1e3e03756fd4f7c441036e1589cd.zip
fix paging free fns
Diffstat (limited to 'kernel/memory')
-rw-r--r--kernel/memory/paging.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/kernel/memory/paging.c b/kernel/memory/paging.c
index 80ab833..58c5091 100644
--- a/kernel/memory/paging.c
+++ b/kernel/memory/paging.c
@@ -416,6 +416,13 @@ static void pt_free(volatile struct pt *pPT, bool force)
pADDR = (void *)((uintptr_t)vPTE->address << 12);
free_phys_page(pADDR);
+ count--;
+ }
+
+ if (!force && count) {
+ vPT->count_low = count;
+ vPT->count_high = count >> 2;
+ return;
}
free:
@@ -443,6 +450,12 @@ static void pd_free(volatile struct pd *pPD, bool force)
pPT = (volatile struct pt *)((uintptr_t)vPDE->address << 12);
pt_free(pPT, force);
+ count--;
+ }
+
+ if (!force && count) {
+ vPD->count = count;
+ return;
}
free:
@@ -470,6 +483,12 @@ static void pdpt_free(volatile struct pdpt *pPDPT, bool force)
pPD = (volatile struct pd *)((uintptr_t)vPDPTE->address << 12);
pd_free(pPD, force);
+ count--;
+ }
+
+ if (!force && count) {
+ vPDPT->count = count;
+ return;
}
free:
@@ -497,6 +516,12 @@ static void pml4_free(volatile struct pml4 *pPML4, bool force)
pPDPT = (volatile struct pdpt *)((uintptr_t)vPML4E->address << 12);
pdpt_free(pPDPT, force);
+ count--;
+ }
+
+ if (!force && count) {
+ vPML4->count = count;
+ return;
}
free: