aboutsummaryrefslogtreecommitdiff
path: root/kernel/mm
diff options
context:
space:
mode:
authorsotech117 <26747948+sotech117@users.noreply.github.com>2024-04-25 03:45:32 -0400
committerGitHub <noreply@github.com>2024-04-25 03:45:32 -0400
commitc9f4da6024393310e254a2cba679b1f1cc67607a (patch)
tree6f7a61225676b9578c0e0c46cdd54a10bad9c9e3 /kernel/mm
parenta17999858ddaada83071d953d920e3c2a2b390c8 (diff)
parentfb4b8fbec69f50c7386017896f0add4d46314a1d (diff)
Merge branch 'brown-cs1690:master' into master
Diffstat (limited to 'kernel/mm')
-rw-r--r--kernel/mm/mobj.c26
-rw-r--r--kernel/mm/pagecache.c7
2 files changed, 23 insertions, 10 deletions
diff --git a/kernel/mm/mobj.c b/kernel/mm/mobj.c
index 4b9c80f..83addd5 100644
--- a/kernel/mm/mobj.c
+++ b/kernel/mm/mobj.c
@@ -122,9 +122,6 @@ long mobj_get_pframe(mobj_t *o, uint64_t pagenum, long forwrite,
* Create and initialize a pframe and add it to the mobj's mo_pframes list.
* Upon successful return, the pframe's pf_mutex is locked.
*/
-#ifdef OLD
-static void mobj_create_pframe(mobj_t *o, uint64_t pagenum, pframe_t **pfp)
-#endif
void mobj_create_pframe(mobj_t *o, uint64_t pagenum, uint64_t loc, pframe_t **pfp)
{
KASSERT(kmutex_owns_mutex(&o->mo_mutex));
@@ -285,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 = NULL;
+ 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
*/
diff --git a/kernel/mm/pagecache.c b/kernel/mm/pagecache.c
index b1763ba..e3bf73e 100644
--- a/kernel/mm/pagecache.c
+++ b/kernel/mm/pagecache.c
@@ -14,10 +14,3 @@ long pagecache_get_page(pframe_t *pf) {
KASSERT(0 && "page not in pagecache");
return 0;
}
-
-#ifdef NO
-void pagecache_newsource(pframe_t pf, blockdev_t *dev, long loc) {
- pf->pf_srcdev.pf_dev = dev;
- pf->pf_loc = loc;
-}
-#endif \ No newline at end of file