Add a mutex to struct vm_object. Initialize and destroy that mutex

at appropriate times.  For the moment, the mutex is only used on
the kmem_object.
This commit is contained in:
Alan Cox 2002-12-20 05:10:32 +00:00
parent 3b15250c04
commit 4b420d501f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=108117
2 changed files with 11 additions and 2 deletions

View File

@ -192,6 +192,9 @@ _vm_object_allocate(objtype_t type, vm_pindex_t size, vm_object_t object)
{
int incr;
bzero(&object->mtx, sizeof(object->mtx));
mtx_init(&object->mtx, "vm object", NULL, MTX_DEF);
TAILQ_INIT(&object->memq);
TAILQ_INIT(&object->shadow_head);
@ -611,6 +614,7 @@ vm_object_terminate(vm_object_t object)
TAILQ_REMOVE(&vm_object_list, object, object_list);
mtx_unlock(&vm_object_list_mtx);
mtx_destroy(&object->mtx);
wakeup(object);
/*

View File

@ -72,6 +72,8 @@
#define _VM_OBJECT_
#include <sys/queue.h>
#include <sys/_lock.h>
#include <sys/_mutex.h>
enum obj_type { OBJT_DEFAULT, OBJT_SWAP, OBJT_VNODE, OBJT_DEVICE, OBJT_PHYS,
OBJT_DEAD };
@ -88,6 +90,7 @@ typedef u_char objtype_t;
*/
struct vm_object {
struct mtx mtx;
TAILQ_ENTRY(vm_object) object_list; /* list of all objects */
TAILQ_HEAD(, vm_object) shadow_head; /* objects that this is a shadow for */
TAILQ_ENTRY(vm_object) shadow_list; /* chain of shadow objects */
@ -171,8 +174,10 @@ extern vm_object_t kmem_object;
#endif /* _KERNEL */
#ifdef _KERNEL
#define vm_object_lock(object) mtx_lock(&Giant)
#define vm_object_unlock(object) mtx_unlock(&Giant)
#define vm_object_lock(object) \
mtx_lock((object) == kmem_object ? &kmem_object->mtx : &Giant)
#define vm_object_unlock(object) \
mtx_unlock((object) == kmem_object ? &kmem_object->mtx : &Giant)
void vm_freeze_copyopts(vm_object_t, vm_pindex_t, vm_pindex_t);