Module Name: src Committed By: tsutsui Date: Tue Jul 14 13:24:00 UTC 2009
Modified Files: src/sys/kern: subr_autoconf.c Log Message: Add a workaround for some traditional ports (amiga and atari): - Defer callout_setfunc() call after config_init() call in configure(). Fixes silent hang before consinit() at least on atari. These traditional ports use config(9) structures and autoconf(9) functions to detect console devices, and config_init() is called at very early stage at boot where mutex(9) is not ready. Actually config_init() has been split out from configure() for these ports: http://cvsweb.NetBSD.org/bsdweb.cgi/src/sys/kern/subr_autoconf.c#rev1.74 while x68k has been fixed properly: http://mail-index.NetBSD.org/source-changes/2009/01/17/msg215673.html See also: http://mail-index.NetBSD.org/port-x68k/2008/12/31/msg000006.html http://mail-index.NetBSD.org/port-atari/2009/07/03/msg000419.html To generate a diff of this commit: cvs rdiff -u -r1.178 -r1.179 src/sys/kern/subr_autoconf.c 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/subr_autoconf.c diff -u src/sys/kern/subr_autoconf.c:1.178 src/sys/kern/subr_autoconf.c:1.179 --- src/sys/kern/subr_autoconf.c:1.178 Fri Jun 26 19:30:45 2009 +++ src/sys/kern/subr_autoconf.c Tue Jul 14 13:24:00 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_autoconf.c,v 1.178 2009/06/26 19:30:45 dyoung Exp $ */ +/* $NetBSD: subr_autoconf.c,v 1.179 2009/07/14 13:24:00 tsutsui Exp $ */ /* * Copyright (c) 1996, 2000 Christopher G. Demetriou @@ -77,7 +77,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: subr_autoconf.c,v 1.178 2009/06/26 19:30:45 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_autoconf.c,v 1.179 2009/07/14 13:24:00 tsutsui Exp $"); #include "opt_ddb.h" #include "drvctl.h" @@ -356,7 +356,6 @@ cv_init(&config_misc_cv, "cfgmisc"); callout_init(&config_twiddle_ch, CALLOUT_MPSAFE); - callout_setfunc(&config_twiddle_ch, config_twiddle_fn, NULL); /* allcfdrivers is statically initialized. */ for (i = 0; cfdriver_list_initial[i] != NULL; i++) { @@ -411,6 +410,14 @@ { /* Initialize data structures. */ config_init(); + /* + * XXX + * callout_setfunc() requires mutex(9) so it can't be in config_init() + * on amiga and atari which use config_init() and autoconf(9) fucntions + * to initialize console devices. + */ + callout_setfunc(&config_twiddle_ch, config_twiddle_fn, NULL); + pmf_init(); #if NDRVCTL > 0 drvctl_init();