From owner-freebsd-smp Sat Mar 16 8:52:11 2002 Delivered-To: freebsd-smp@freebsd.org Received: from rina.r.dl.itc.u-tokyo.ac.jp (rina.r.dl.itc.u-tokyo.ac.jp [133.11.199.247]) by hub.freebsd.org (Postfix) with ESMTP id 5A1F737B400; Sat, 16 Mar 2002 08:51:51 -0800 (PST) Received: from silver.carrots.uucp.r.dl.itc.u-tokyo.ac.jp (silver.carrots.uucp.r.dl.itc.u-tokyo.ac.jp [IPv6:3ffe:b80:5b0:3:280:c8ff:fe6b:6d73]) by rina.r.dl.itc.u-tokyo.ac.jp (8.12.2/3.7W-rina.r-Nankai-Koya) with ESMTP id g2GGIgSp063452 ; Sun, 17 Mar 2002 01:18:42 +0900 (JST) Received: from silver.carrots.uucp.r.dl.itc.u-tokyo.ac.jp (localhost [127.0.0.1]) by silver.carrots.uucp.r.dl.itc.u-tokyo.ac.jp (8.12.2/3.7W-carrots-Keikyu-Kurihama) with ESMTP id g2GGHMA5085135 ; Sun, 17 Mar 2002 01:18:42 +0900 (JST) Message-Id: <200203161618.g2GGHMA5085135@silver.carrots.uucp.r.dl.itc.u-tokyo.ac.jp> Date: Sun, 17 Mar 2002 01:17:21 +0900 From: Seigo Tanimura To: Poul-Henning Kamp Cc: Hiten Pandya , Munehiro Matsuda , Robert Watson , current@freebsd.org, smp@freebsd.org, Seigo Tanimura Subject: Re: -current lock warning... In-Reply-To: <200203161357.g2GDuwA5043113@silver.carrots.uucp.r.dl.itc.u-tokyo.ac.jp> References: <35758.1016270542@critter.freebsd.dk> <200203161357.g2GDuwA5043113@silver.carrots.uucp.r.dl.itc.u-tokyo.ac.jp> User-Agent: Wanderlust/2.8.1 (Something) SEMI/1.14.3 (Ushinoya) FLIM/1.14.3 (=?ISO-8859-1?Q?Unebigory=F2mae?=) APEL/10.3 MULE XEmacs/21.1 (patch 14) (Cuyahoga Valley) (i386--freebsd) Organization: Digital Library Research Division, Information Techinology Centre, The University of Tokyo MIME-Version: 1.0 (generated by SEMI 1.14.3 - "Ushinoya") Content-Type: multipart/mixed; boundary="Multipart_Sun_Mar_17_01:17:21_2002-1" Sender: owner-freebsd-smp@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org --Multipart_Sun_Mar_17_01:17:21_2002-1 Content-Type: text/plain; charset=US-ASCII On Sat, 16 Mar 2002 22:56:58 +0900, Seigo Tanimura said: Seigo> On Sat, 16 Mar 2002 10:22:22 +0100, Seigo> Poul-Henning Kamp said: Seigo> Poul-Henning> acquiring duplicate lock of same type: "thrd_sleep" Seigo> Poul-Henning> 1st @ ../../../vm/vm_map.c:2288 Seigo> Poul-Henning> 2nd @ ../../../vm/vm_kern.c:172 Seigo> (snip) Seigo> Poul-Henning> _vm_map_lock(c038afb4,c02f8440,ac,c034a840,1) at _vm_map_lock+0x16 Seigo> Poul-Henning> kmem_alloc(c038afb4,3000,c0e41a00,0,c02fa434) at kmem_alloc+0x41 Seigo> Poul-Henning> _zget(c0e41a00,bfc00000,0,c0435cd0,c0281769) at _zget+0xfa Seigo> Poul-Henning> zalloc(c0e41a00,c034a840,1,c02f8630,a7) at zalloc+0x3b Seigo> Poul-Henning> vmspace_alloc(0,bfc00000,c035c940,c02f8630,8f0) at vmspace_alloc+0x2d Seigo> Poul-Henning> vmspace_fork(c035c940,cbb9ad24,c0331f84,cbb9ab00,c0331d60) at vmspace_fork+0x4d Seigo> Poul-Henning> vm_forkproc(c0332080,cbb9ab00,cbb9ac00,20014) at vm_forkproc+0xc6 Seigo> This seems due to naming all of the vm map locks as "thrd_sleep." The Seigo> locks of vm maps should have their own hierarachy. For instance, lock Seigo> the map of a process vm space first, then lock the kernel_map. The patch attached below renames the lock of the kernel_map to "kernel_map" once witness gets ready to run. This eliminated all of the lock order reversals on my PC. --Multipart_Sun_Mar_17_01:17:21_2002-1 Content-Type: application/octet-stream; type=patch Content-Disposition: attachment; filename="vm_map_renamelock.diff" Content-Transfer-Encoding: 7bit ? i386/conf/BUNKO ? i386/conf/BUNKO.hints ? i386/conf/LINT ? modules/3dfx/pci.h ? modules/aha/aha.h ? modules/kernfs/kernfs.kld ? modules/kernfs/kernfs.ko ? modules/kernfs/setdef0.c ? modules/kernfs/setdef1.c ? modules/kernfs/setdefs.h ? modules/kernfs/vnode_if.h ? modules/lnc/lnc.kld ? modules/lnc/lnc.ko ? modules/random/opt_noblockrandom.h ? modules/svr4/opt_compat.h ? modules/svr4/opt_svr4.h ? modules/svr4/opt_vmpage.h ? modules/svr4/setdef0.c ? modules/svr4/setdef1.c ? modules/svr4/setdefs.h ? modules/svr4/svr4.kld ? modules/svr4/svr4.ko ? modules/svr4/svr4_assym.h ? modules/svr4/vnode_if.h Index: vm/vm_kern.c =================================================================== RCS file: /home/ncvs/src/sys/vm/vm_kern.c,v retrieving revision 1.76 diff -u -r1.76 vm_kern.c --- vm/vm_kern.c 10 Mar 2002 21:52:46 -0000 1.76 +++ vm/vm_kern.c 16 Mar 2002 15:48:29 -0000 @@ -515,3 +515,17 @@ /* ... and ending with the completion of the above `insert' */ vm_map_unlock(m); } + +/* + * kernel_map_initialize: + * + * Rename the lock of kernel_map. We cannot do this in kmem_init + * because Witness is cold. + */ +static void +kernel_map_initialize(void *dummy __unused) +{ + vm_map_renamelock(kernel_map, "kernel_map"); +} + +SYSINIT(kernel_map_init, SI_SUB_WITNESS, SI_ORDER_SECOND, kernel_map_initialize, NULL) Index: vm/vm_map.c =================================================================== RCS file: /home/ncvs/src/sys/vm/vm_map.c,v retrieving revision 1.215 diff -u -r1.215 vm_map.c --- vm/vm_map.c 13 Mar 2002 23:48:08 -0000 1.215 +++ vm/vm_map.c 16 Mar 2002 15:48:40 -0000 @@ -91,6 +91,9 @@ #include #include +/* The default name of a map lock. */ +#define MAPLOCK_NAME "vm map" + /* * Virtual memory maps provide for the mapping, protection, * and sharing of virtual memory objects. In addition, @@ -405,7 +408,21 @@ map->first_free = &map->header; map->hint = &map->header; map->timestamp = 0; - sx_init(&map->lock, "thrd_sleep"); + sx_init(&map->lock, MAPLOCK_NAME); +} + +/* + * vm_map_renamelock: + * + * Renames the lock of a VM map. This + * lets us check the lock order of VM + * maps. + */ +void +vm_map_renamelock(vm_map_t map, const char *name) +{ + sx_destroy(&map->lock); + sx_init(&map->lock, name); } void Index: vm/vm_map.h =================================================================== RCS file: /home/ncvs/src/sys/vm/vm_map.h,v retrieving revision 1.71 diff -u -r1.71 vm_map.h --- vm/vm_map.h 13 Mar 2002 23:48:08 -0000 1.71 +++ vm/vm_map.h 16 Mar 2002 15:48:41 -0000 @@ -277,6 +277,7 @@ int vm_map_findspace (vm_map_t, vm_offset_t, vm_size_t, vm_offset_t *); int vm_map_inherit (vm_map_t, vm_offset_t, vm_offset_t, vm_inherit_t); void vm_map_init (struct vm_map *, vm_offset_t, vm_offset_t); +void vm_map_renamelock (struct vm_map *, const char *); void vm_map_destroy (struct vm_map *); int vm_map_insert (vm_map_t, vm_object_t, vm_ooffset_t, vm_offset_t, vm_offset_t, vm_prot_t, vm_prot_t, int); int vm_map_lookup (vm_map_t *, vm_offset_t, vm_prot_t, vm_map_entry_t *, vm_object_t *, --Multipart_Sun_Mar_17_01:17:21_2002-1 Content-Type: text/plain; charset=US-ASCII -- Seigo Tanimura --Multipart_Sun_Mar_17_01:17:21_2002-1-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-smp" in the body of the message