aboutsummaryrefslogtreecommitdiff
path: root/kernel/mm/mobj.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/mm/mobj.c')
-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
*/