From: Matthew Dillon Date: Sun, 3 Aug 2008 03:00:58 +0000 (+0000) Subject: MFC: Fix a panic on boot that can occur if you hit keys on the keyboard X-Git-Tag: v2.0.1~45 X-Git-Url: https://repo.or.cz/w/dragonfly.git/commitdiff_plain/db1c1c1872a98c99681081e8262c9f9f7a970326 MFC: Fix a panic on boot that can occur if you hit keys on the keyboard before the console device's high level initialization is run. --- diff --git a/sys/dev/misc/syscons/syscons.c b/sys/dev/misc/syscons/syscons.c index 72ccc2b9ca..948163fdf0 100644 --- a/sys/dev/misc/syscons/syscons.c +++ b/sys/dev/misc/syscons/syscons.c @@ -29,7 +29,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * $FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/dev/syscons/syscons.c,v 1.336.2.17 2004/03/25 08:41:09 ru Exp $ - * $DragonFly: src/sys/dev/misc/syscons/syscons.c,v 1.33 2007/08/19 11:39:11 swildner Exp $ + * $DragonFly: src/sys/dev/misc/syscons/syscons.c,v 1.33.4.1 2008/08/03 03:00:58 dillon Exp $ */ #include "use_splash.h" @@ -120,8 +120,8 @@ SYSCTL_INT(_machdep, OID_AUTO, enable_panic_key, CTLFLAG_RW, &enable_panic_key, #define SC_CONSOLECTL 255 -#define VIRTUAL_TTY(sc, x) (SC_DEV((sc), (x)) != NULL ? \ - SC_DEV((sc), (x))->si_tty : NULL) +#define VIRTUAL_TTY(sc, x) ((SC_DEV((sc),(x)) != NULL) ? \ + (SC_DEV((sc),(x))->si_tty) : NULL) #define ISTTYOPEN(tp) ((tp) && ((tp)->t_state & TS_ISOPEN)) static int debugger; @@ -578,6 +578,9 @@ sckbdevent(keyboard_t *thiskbd, int event, void *arg) size_t len; u_char *cp; + /* + * WARNING: In early boot sc->dev may not be setup yet. + */ sc = (sc_softc_t *)arg; /* assert(thiskbd == sc->kbd) */ @@ -599,7 +602,6 @@ sckbdevent(keyboard_t *thiskbd, int event, void *arg) * the Xaccel-2.1 keyboard hang, but it can't hurt. XXX */ while ((c = scgetc(sc, SCGETC_NONBLOCK)) != NOKEY) { - cur_tty = VIRTUAL_TTY(sc, sc->cur_scp->index); if (!ISTTYOPEN(cur_tty)) { cur_tty = sc_console_tty; diff --git a/sys/dev/misc/syscons/syscons.h b/sys/dev/misc/syscons/syscons.h index bbadac31f4..d1990422b2 100644 --- a/sys/dev/misc/syscons/syscons.h +++ b/sys/dev/misc/syscons/syscons.h @@ -29,7 +29,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * $FreeBSD: src/sys/dev/syscons/syscons.h,v 1.60.2.6 2002/09/15 22:30:45 dd Exp $ - * $DragonFly: src/sys/dev/misc/syscons/syscons.h,v 1.20 2007/08/19 11:39:11 swildner Exp $ + * $DragonFly: src/sys/dev/misc/syscons/syscons.h,v 1.20.4.1 2008/08/03 03:00:58 dillon Exp $ */ #ifndef _DEV_SYSCONS_SYSCONS_H_ @@ -89,7 +89,7 @@ MALLOC_DECLARE(M_SYSCONS); #define SC_DRIVER_NAME "sc" #define SC_VTY(dev) minor(dev) -#define SC_DEV(sc, vty) ((sc)->dev[(vty) - (sc)->first_vty]) +#define SC_DEV(sc, vty) ((sc)->dev ? (sc)->dev[(vty) - (sc)->first_vty] : NULL) #define SC_STAT(dev) ((scr_stat *)(dev)->si_drv1) /* printable chars */