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 ([email protected]).
@@ -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 *);