Date: Mon, 19 Jan 2004 12:49:45 +0800 From: "Xin LI" <delphij@frontfree.net> To: "'Jeff Roberson'" <jroberson@chesapeake.net>, "'Alan Cox'" <alc@cs.rice.edu> Cc: current@freebsd.org Subject: RE: PANIC in kmem_alloc when loading many modules Message-ID: <20040119044936.44D0D114C9@beastie.frontfree.net> In-Reply-To: <20040115162427.L36463-100000@mail.chesapeake.net>
next in thread | previous in thread | raw e-mail | index | archive | help
> -----Original Message----- > From: owner-freebsd-current@freebsd.org > [mailto:owner-freebsd-current@freebsd.org] On Behalf Of Jeff Roberson > Sent: Friday, January 16, 2004 5:25 AM > To: Alan Cox > Cc: alc@freebsd.org; Jun Su; current@freebsd.org > Subject: Re: PANIC in kmem_alloc when loading many modules > > > I missed the beginning of this thread. Are we loading modules > before the VM is bootstrapped? If we are, we should probably > fix that. If not, why do we need more boot pages? I tend to agree Jeff's opinion. It seems that kmem_malloc has an (inappropriate) self recursive call while it is holding the non-recursive lock, (line 326 of vm/vm_kern.c, http://current.freebsd.org/tour/current/kernel/S/4393.html#326). By increasing boot pages, we may hide some (potential?) problems and make it harder to track down. A brief reading of the code told me that when vm_map_findspace return 0, in other words, we found a space, then the lock would be kept held by kmem_alloc, but at line 346, vm_map_insert would have a chance to call kmem_malloc through the following call path: kmem_malloc(346) -> vm_map_insert(843) -> vm_map_entry_create(555) -> uma_zalloc(234) -> uma_zalloc_arg(1459) -> uma_zalloc_bucket(1619) -> uma_zone_slab(1529) -> slab_zalloc(750, through zone->uz_allocf function pointer) -> startup_alloc(821) -> page_alloc(842) -> kmem_malloc (PANIC Here because recursively lock on non-recursive lock) Maybe we should re-implement page_alloc to prevent kmem_malloc call? I am not familiar with the VM code so that's just my 2 cents. Thanks in advance! Xin LI
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040119044936.44D0D114C9>