diff options
author | Nathan Benavides-Luu <nate1299@me.com> | 2024-04-22 20:27:07 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-22 20:27:07 -0400 |
commit | e1e99d4adb0fcf86c9745c703b4e3ffb1261440b (patch) | |
tree | 3aed533435b917c9f7851601143f186070c54b7f /kernel/mm | |
parent | 6ddcbbd59f0a04eee2b163930fc86d74dd2434ec (diff) |
add delete_pframe call to s5_free_block (#10)
Diffstat (limited to 'kernel/mm')
-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 */ |