[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
serial console versus wscons
Whilst looking at something else, I came across a problem with wscons and a
serial console - we crash in sys/dev/sun/kbd.c:kbd_input_console() when we
call callout_reset(), because we never called callout_init(). To reproduce
this, boot up a serial console on a machine with a framebuffer, start then
stop X, and press a key on the real keyboard.
The crash happens because we call kbd_input() with k->k_wsenabled=0. When
we called kbd_input() previously (and the other kbd routines) k->k_wsenabled
was 1, so we followed the wscons path. Now, k->k_wsenabled has been set to
0 because stopping X closes wskbd in sys/dev/wscons/wskbd:wskbdclose() and
that calls wskbd_enable(foo, 0) and then wssunkbd_enable(foo, 0).
We don't get the crash when the framebuffer/keyboard is console because when
we call wskbd_enable() there, sc->sc_base.me_dispdv != NULL, so we return
instead of calling wssunkbd_enable().
A quick fix seems to never unset k->k_wsenabled once it has been set in the
attach routines. However, I'm not 100% sure why we change that after attach
time. (I haven't checked what the setting of sc->sc_base.me_dispdv means.)
PS. I tried this with a cgsix, but the behaviour should be the same on all
framebuffers. I also think port-sparc is affected too, as this is in the
common sun keyboard code.
My other computer also runs NetBSD / Sailing at Newbiggin
http://www.netbsd.org/ / http://www.newbigginsailingclub.org/
Main Index |
Thread Index |