aboutsummaryrefslogtreecommitdiff
path: root/kernel/mm
diff options
context:
space:
mode:
authorNathan Benavides-Luu <nate1299@me.com>2024-04-22 20:27:07 -0400
committerGitHub <noreply@github.com>2024-04-22 20:27:07 -0400
commite1e99d4adb0fcf86c9745c703b4e3ffb1261440b (patch)
tree3aed533435b917c9f7851601143f186070c54b7f /kernel/mm
parent6ddcbbd59f0a04eee2b163930fc86d74dd2434ec (diff)
add delete_pframe call to s5_free_block (#10)
Diffstat (limited to 'kernel/mm')
-rw-r--r--kernel/mm/mobj.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/kernel/mm/mobj.c b/kernel/mm/mobj.c
index 02aced7..3a591f2 100644
--- a/kernel/mm/mobj.c
+++ b/kernel/mm/mobj.c
@@ -282,6 +282,29 @@ long mobj_free_pframe(mobj_t *o, pframe_t **pfp)
return 0;
}
+void mobj_delete_pframe(mobj_t *o, size_t pagenum)
+{
+ pframe_t *pf;
+ list_iterate(&o->mo_pframes, p, pframe_t, pf_link)
+ {
+ if (p->pf_pagenum == pagenum)
+ pf = p;
+ }
+
+ if (pf)
+ {
+ kmutex_lock(&pf->pf_mutex);
+ list_remove(&pf->pf_link);
+
+ pf->pf_dirty = 0;
+ if (pf->pf_addr)
+ {
+ page_free(pf->pf_addr);
+ pf->pf_addr = NULL;
+ }
+ pframe_free(&pf);
+ }
+}
/*
* Simply flush the memory object
*/