Index: sys/dev/usb/ukbd.c =================================================================== RCS file: /cvsroot/src/sys/dev/usb/ukbd.c,v retrieving revision 1.129 diff -u -p -r1.129 ukbd.c --- sys/dev/usb/ukbd.c 26 Sep 2013 07:25:31 -0000 1.129 +++ sys/dev/usb/ukbd.c 23 Dec 2013 15:25:04 -0000 @@ -1020,7 +1020,7 @@ ukbd_cnpollc(void *v, int on) usbd_interface2device_handle(sc->sc_hdev.sc_parent->sc_iface, &dev); if (on) { - sc->sc_spl = splusb(); + sc->sc_spl = splhardusb(); pollenter++; } else { splx(sc->sc_spl); Index: sys/dev/wscons/wsdisplay.c =================================================================== RCS file: /cvsroot/src/sys/dev/wscons/wsdisplay.c,v retrieving revision 1.135 diff -u -p -r1.135 wsdisplay.c --- sys/dev/wscons/wsdisplay.c 2 Feb 2012 13:11:25 -0000 1.135 +++ sys/dev/wscons/wsdisplay.c 23 Dec 2013 15:25:04 -0000 @@ -2186,15 +2186,15 @@ wsdisplay_pollc(dev_t dev, int on) wsdisplay_cons_pollmode = on; + /* notify to kbd drivers */ + if (wsdisplay_cons_kbd_pollc) + (*wsdisplay_cons_kbd_pollc)(NODEV, on); + /* notify to fb drivers */ if (wsdisplay_console_device != NULL && wsdisplay_console_device->sc_accessops->pollc != NULL) (*wsdisplay_console_device->sc_accessops->pollc) (wsdisplay_console_device->sc_accesscookie, on); - - /* notify to kbd drivers */ - if (wsdisplay_cons_kbd_pollc) - (*wsdisplay_cons_kbd_pollc)(NODEV, on); } void Index: sys/dev/wsfb/genfb.c =================================================================== RCS file: /cvsroot/src/sys/dev/wsfb/genfb.c,v retrieving revision 1.51 diff -u -p -r1.51 genfb.c --- sys/dev/wsfb/genfb.c 9 Oct 2013 17:20:54 -0000 1.51 +++ sys/dev/wsfb/genfb.c 23 Dec 2013 15:25:05 -0000 @@ -68,6 +68,8 @@ __KERNEL_RCSID(0, "$NetBSD: genfb.c,v 1. static int genfb_ioctl(void *, void *, u_long, void *, int, struct lwp *); static paddr_t genfb_mmap(void *, void *, off_t, int); +static void genfb_pollc(void *, int); + static void genfb_init_screen(void *, struct vcons_screen *, int, long *); static int genfb_putcmap(struct genfb_softc *, struct wsdisplay_cmap *); @@ -234,6 +236,7 @@ genfb_attach(struct genfb_softc *sc, str sc->sc_accessops.ioctl = genfb_ioctl; sc->sc_accessops.mmap = genfb_mmap; + sc->sc_accessops.pollc = genfb_pollc; #ifdef GENFB_SHADOWFB sc->sc_shadowfb = kmem_alloc(sc->sc_fbsize, KM_SLEEP); @@ -485,6 +488,21 @@ genfb_mmap(void *v, void *vs, off_t offs } static void +genfb_pollc(void *v, int on) +{ + struct vcons_data *vd = v; + struct genfb_softc *sc = vd->cookie; + + if (sc == NULL) + return; + + if (on) + genfb_enable_polling(sc->sc_dev); + else + genfb_disable_polling(sc->sc_dev); +} + +static void genfb_init_screen(void *cookie, struct vcons_screen *scr, int existing, long *defattr) { Index: sys/kern/kern_subr.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_subr.c,v retrieving revision 1.214 diff -u -p -r1.214 kern_subr.c --- sys/kern/kern_subr.c 9 Dec 2013 16:49:43 -0000 1.214 +++ sys/kern/kern_subr.c 23 Dec 2013 15:25:05 -0000 @@ -250,6 +250,7 @@ setroot(device_t bootdv, int bootpartiti if (boothowto & RB_ASKNAME) { device_t defdumpdv; + cnpollc(1); for (;;) { printf("root device"); if (bootdv != NULL) { @@ -382,6 +383,7 @@ setroot(device_t bootdv, int bootpartiti break; } } + cnpollc(0); } else if (rootspec == NULL) { /*