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 *);

Reply via email to