aboutsummaryrefslogtreecommitdiff
path: root/sys/vm
diff options
context:
space:
mode:
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_object.c5
-rw-r--r--sys/vm/vm_object.h5
2 files changed, 10 insertions, 0 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index bc0e4c05f126..1b1d532ba1cf 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -264,6 +264,7 @@ _vm_object_allocate(objtype_t type, vm_pindex_t size, vm_object_t object)
#if VM_NRESERVLEVEL > 0
LIST_INIT(&object->rvq);
#endif
+ umtx_shm_object_init(object);
}
/*
@@ -475,6 +476,9 @@ vm_object_vndeallocate(vm_object_t object)
}
#endif
+ if (object->ref_count == 1)
+ umtx_shm_object_terminated(object);
+
/*
* The test for text of vp vnode does not need a bypass to
* reach right VV_TEXT there, since it is obtained from
@@ -647,6 +651,7 @@ retry:
return;
}
doterm:
+ umtx_shm_object_terminated(object);
temp = object->backing_object;
if (temp != NULL) {
KASSERT((object->flags & OBJ_TMPFS_NODE) == 0,
diff --git a/sys/vm/vm_object.h b/sys/vm/vm_object.h
index ca2d73a75a42..c68fdce09158 100644
--- a/sys/vm/vm_object.h
+++ b/sys/vm/vm_object.h
@@ -174,6 +174,7 @@ struct vm_object {
} un_pager;
struct ucred *cred;
vm_ooffset_t charge;
+ void *umtx_data;
};
/*
@@ -184,6 +185,7 @@ struct vm_object {
#define OBJ_ACTIVE 0x0004 /* active objects */
#define OBJ_DEAD 0x0008 /* dead objects (during rundown) */
#define OBJ_NOSPLIT 0x0010 /* dont split this object */
+#define OBJ_UMTXDEAD 0x0020 /* umtx pshared was terminated */
#define OBJ_PIPWNT 0x0040 /* paging in progress wanted */
#define OBJ_MIGHTBEDIRTY 0x0100 /* object might be dirty, only for vnode */
#define OBJ_TMPFS_NODE 0x0200 /* object belongs to tmpfs VREG node */
@@ -296,6 +298,9 @@ vm_object_cache_is_empty(vm_object_t object)
return (vm_radix_is_empty(&object->cache));
}
+void umtx_shm_object_init(vm_object_t object);
+void umtx_shm_object_terminated(vm_object_t object);
+
vm_object_t vm_object_allocate (objtype_t, vm_pindex_t);
boolean_t vm_object_coalesce(vm_object_t, vm_ooffset_t, vm_size_t, vm_size_t,
boolean_t);