diff options
Diffstat (limited to 'kernel/mm/mobj.c')
-rw-r--r-- | kernel/mm/mobj.c | 23 |
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 */ |