Module Name: src Committed By: snj Date: Tue Mar 31 23:23:15 UTC 2009
Modified Files: src/sys/kern [netbsd-5]: init_main.c kern_ksyms.c src/sys/sys [netbsd-5]: ksyms.h Log Message: Apply patch (requested by martin in ticket 602): ksyms_init calls mutex_init too early, which leads to failure on, e.g., sparc64 LOCKDEBUG kernels. Instead, add a new function ksyms_init_finalize and call it from main. Fixed in a more intrusive and less ugly way on HEAD. To generate a diff of this commit: cvs rdiff -u -r1.371.2.1 -r1.371.2.2 src/sys/kern/init_main.c cvs rdiff -u -r1.41 -r1.41.4.1 src/sys/kern/kern_ksyms.c cvs rdiff -u -r1.17 -r1.17.4.1 src/sys/sys/ksyms.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/init_main.c diff -u src/sys/kern/init_main.c:1.371.2.1 src/sys/kern/init_main.c:1.371.2.2 --- src/sys/kern/init_main.c:1.371.2.1 Sun Mar 15 19:43:48 2009 +++ src/sys/kern/init_main.c Tue Mar 31 23:23:15 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: init_main.c,v 1.371.2.1 2009/03/15 19:43:48 snj Exp $ */ +/* $NetBSD: init_main.c,v 1.371.2.2 2009/03/31 23:23:15 snj Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -97,7 +97,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.371.2.1 2009/03/15 19:43:48 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.371.2.2 2009/03/31 23:23:15 snj Exp $"); #include "opt_ddb.h" #include "opt_ipsec.h" @@ -112,6 +112,7 @@ #include "opt_wapbl.h" #include "rnd.h" +#include "ksyms.h" #include "sysmon_envsys.h" #include "sysmon_power.h" #include "sysmon_taskq.h" @@ -301,6 +302,10 @@ /* Initialize lock caches. */ mutex_obj_init(); +#if NKSYMS > 0 + ksyms_init_finalize(); +#endif + /* Initialize the extent manager. */ extent_init(); Index: src/sys/kern/kern_ksyms.c diff -u src/sys/kern/kern_ksyms.c:1.41 src/sys/kern/kern_ksyms.c:1.41.4.1 --- src/sys/kern/kern_ksyms.c:1.41 Fri Oct 24 13:55:42 2008 +++ src/sys/kern/kern_ksyms.c Tue Mar 31 23:23:15 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_ksyms.c,v 1.41 2008/10/24 13:55:42 christos Exp $ */ +/* $NetBSD: kern_ksyms.c,v 1.41.4.1 2009/03/31 23:23:15 snj Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -74,7 +74,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_ksyms.c,v 1.41 2008/10/24 13:55:42 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_ksyms.c,v 1.41.4.1 2009/03/31 23:23:15 snj Exp $"); #ifdef _KERNEL #include "opt_ddb.h" @@ -399,6 +399,12 @@ ksyms_initted = true; } +void +ksyms_init_finalize() +{ + mutex_init(&ksyms_lock, MUTEX_DEFAULT, IPL_NONE); +} + /* * Setup the kernel symbol table stuff. */ @@ -411,7 +417,6 @@ size_t strsize = 0; Elf_Ehdr *ehdr; - mutex_init(&ksyms_lock, MUTEX_DEFAULT, IPL_NONE); #ifdef SYMTAB_SPACE if (symsize <= 0 && strncmp(db_symtab, SYMTAB_FILLER, sizeof(SYMTAB_FILLER))) { Index: src/sys/sys/ksyms.h diff -u src/sys/sys/ksyms.h:1.17 src/sys/sys/ksyms.h:1.17.4.1 --- src/sys/sys/ksyms.h:1.17 Fri Oct 24 13:55:42 2008 +++ src/sys/sys/ksyms.h Tue Mar 31 23:23:15 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: ksyms.h,v 1.17 2008/10/24 13:55:42 christos Exp $ */ +/* $NetBSD: ksyms.h,v 1.17.4.1 2009/03/31 23:23:15 snj Exp $ */ /* * Copyright (c) 2001, 2003 Anders Magnusson (ra...@ludd.luth.se). @@ -107,6 +107,7 @@ int ksyms_delsymtab(const char *); void ksyms_init(int, void *, void *); void ksyms_init_explicit(void *, void *, size_t, void *, size_t); +void ksyms_init_finalize(void); int ksyms_sift(char *, char *, int); void ksyms_modload(const char *, void *, vsize_t, char *, vsize_t); void ksyms_modunload(const char *);