Date: Tue, 26 Feb 2013 20:18:25 +0000 (UTC) From: Attilio Rao <attilio@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r247343 - user/attilio/vmc-playground/sys/vm Message-ID: <201302262018.r1QKIQDw048117@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: attilio Date: Tue Feb 26 20:18:25 2013 New Revision: 247343 URL: http://svnweb.freebsd.org/changeset/base/247343 Log: Revert the moving of vm_object objects initialization: the objects zone ensures type-stability and thus we want to execute actual lock initialization only when the objects are brought into the zone otherwise there could be races between lock threads doing re-initilization and other threads that want to acquire the lock without a reference. Sponsored by: EMC / Isilon storage division Reported by: alc Modified: user/attilio/vmc-playground/sys/vm/vm_object.c Modified: user/attilio/vmc-playground/sys/vm/vm_object.c ============================================================================== --- user/attilio/vmc-playground/sys/vm/vm_object.c Tue Feb 26 20:02:17 2013 (r247342) +++ user/attilio/vmc-playground/sys/vm/vm_object.c Tue Feb 26 20:18:25 2013 (r247343) @@ -194,23 +194,20 @@ vm_object_zinit(void *mem, int size, int vm_object_t object; object = (vm_object_t)mem; + bzero(&object->mtx, sizeof(object->mtx)); + mtx_init(&object->mtx, "vm object", NULL, MTX_DEF | MTX_DUPOK); /* These are true for any object that has been freed */ object->paging_in_progress = 0; object->resident_page_count = 0; object->shadow_count = 0; - - /* It relies on vm object mutex to be initialized afterwards. */ return (0); } static void -_vm_object_allocate(objtype_t type, vm_pindex_t size, vm_object_t object, - const char *mtxname) +_vm_object_allocate(objtype_t type, vm_pindex_t size, vm_object_t object) { - bzero(&object->mtx, sizeof(object->mtx)); - mtx_init(&object->mtx, "vm object", mtxname, MTX_DEF | MTX_DUPOK); TAILQ_INIT(&object->memq); LIST_INIT(&object->shadow_head); @@ -270,15 +267,17 @@ vm_object_init(void) TAILQ_INIT(&vm_object_list); mtx_init(&vm_object_list_mtx, "vm object_list", NULL, MTX_DEF); + mtx_init(&kernel_object->mtx, "vm object", "kernel object", MTX_DEF); _vm_object_allocate(OBJT_PHYS, OFF_TO_IDX(VM_MAX_KERNEL_ADDRESS - VM_MIN_KERNEL_ADDRESS), - kernel_object, "kernel object"); + kernel_object); #if VM_NRESERVLEVEL > 0 kernel_object->flags |= OBJ_COLORED; kernel_object->pg_color = (u_short)atop(VM_MIN_KERNEL_ADDRESS); #endif + mtx_init(&kmem_object->mtx, "vm object", "kmem object", MTX_DEF); _vm_object_allocate(OBJT_PHYS, OFF_TO_IDX(VM_MAX_KERNEL_ADDRESS - VM_MIN_KERNEL_ADDRESS), - kmem_object, "kmem object"); + kmem_object); #if VM_NRESERVLEVEL > 0 kmem_object->flags |= OBJ_COLORED; kmem_object->pg_color = (u_short)atop(VM_MIN_KERNEL_ADDRESS); @@ -404,7 +403,7 @@ vm_object_allocate(objtype_t type, vm_pi vm_object_t object; object = (vm_object_t)uma_zalloc(obj_zone, M_WAITOK); - _vm_object_allocate(type, size, object, NULL); + _vm_object_allocate(type, size, object); return (object); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201302262018.r1QKIQDw048117>