aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2024-05-15 05:55:30 +0000
committersotech117 <michael_foiani@brown.edu>2024-05-15 05:55:30 +0000
commit81905c31a0033ad447720cc1f36b8ef90be1a3ac (patch)
treef5f9d1324d0affc6fb54be570e2e2f342667c5c0
parentaf9104c3e6b6693e0f5e39361048b572c7031794 (diff)
add locks to fix some tests
-rw-r--r--kernel/fs/s5fs/s5fs.c2
-rw-r--r--kernel/vm/shadow.c4
-rw-r--r--kernel/vm/vmmap.c2
3 files changed, 8 insertions, 0 deletions
diff --git a/kernel/fs/s5fs/s5fs.c b/kernel/fs/s5fs/s5fs.c
index 73ecaa6..dedadaf 100644
--- a/kernel/fs/s5fs/s5fs.c
+++ b/kernel/fs/s5fs/s5fs.c
@@ -403,7 +403,9 @@ static long s5fs_mmap(vnode_t *file, mobj_t **ret)
// NOT_YET_IMPLEMENTED("VM: s5fs_mmap");
// Add a reference to the underlying mobj and return it
+ mobj_lock(&file->vn_mobj);
mobj_ref(&file->vn_mobj);
+ mobj_unlock(&file->vn_mobj);
*ret = &file->vn_mobj;
return 0;
}
diff --git a/kernel/vm/shadow.c b/kernel/vm/shadow.c
index 2f875d6..3194c5b 100644
--- a/kernel/vm/shadow.c
+++ b/kernel/vm/shadow.c
@@ -90,7 +90,9 @@ mobj_t *shadow_create(mobj_t *shadowed)
}
// init the other fields
mobj_ref(so->shadowed);
+ mobj_lock(so->bottom_mobj);
mobj_ref(so->bottom_mobj);
+ mobj_unlock(so->bottom_mobj);
// init and lock the shadow object
mobj_init(&so->mobj, MOBJ_SHADOW, &shadow_mobj_ops);
@@ -118,6 +120,8 @@ void shadow_collapse(mobj_t *o)
{
// NOT_YET_IMPLEMENTED("VM: shadow_collapse");
+ return;
+
mobj_shadow_t *so = MOBJ_TO_SO(o);
mobj_t *next = so->shadowed;
while(next && next->mo_type==MOBJ_SHADOW)
diff --git a/kernel/vm/vmmap.c b/kernel/vm/vmmap.c
index e301ac0..4d671d2 100644
--- a/kernel/vm/vmmap.c
+++ b/kernel/vm/vmmap.c
@@ -329,8 +329,10 @@ vmmap_t *vmmap_clone(vmmap_t *map)
// If the vmarea is share-mapped
if (vma->vma_flags & MAP_SHARED)
{
+ mobj_lock(vma->vma_obj);
new_vmarea->vma_obj = vma->vma_obj;
mobj_ref(new_vmarea->vma_obj);
+ mobj_unlock(vma->vma_obj);
}
// If the vmarea is not share-mapped