Index: sys/dev/wscons/wsdisplay.c =================================================================== RCS file: /cvsroot/src/sys/dev/wscons/wsdisplay.c,v retrieving revision 1.135 diff -u -r1.135 wsdisplay.c --- sys/dev/wscons/wsdisplay.c 2 Feb 2012 13:11:25 -0000 1.135 +++ sys/dev/wscons/wsdisplay.c 20 Jan 2014 19:36:46 -0000 @@ -884,6 +884,15 @@ wsdisplay_console_initted = 1; } +void +wsdisplay_cndetach(void) +{ + KASSERT(wsdisplay_console_initted == 2); + + cn_tab = NULL; + wsdisplay_console_initted = 0; +} + /* * Tty and cdevsw functions. */ Index: sys/dev/wscons/wsdisplay_vcons.c =================================================================== RCS file: /cvsroot/src/sys/dev/wscons/wsdisplay_vcons.c,v retrieving revision 1.29 diff -u -r1.29 wsdisplay_vcons.c --- sys/dev/wscons/wsdisplay_vcons.c 15 Sep 2013 16:12:00 -0000 1.29 +++ sys/dev/wscons/wsdisplay_vcons.c 20 Jan 2014 19:36:46 -0000 @@ -1262,10 +1262,15 @@ struct vcons_screen *scr = vd->active; unsigned int dirty; - if (scr && vd->use_intr == 1) { + if (scr && vd->use_intr) { if (!SCREEN_IS_BUSY(scr)) { dirty = atomic_swap_uint(&scr->scr_dirty, 0); - if (dirty > 0) { + if (vd->use_intr == 2) { + if ((scr->scr_flags & VCONS_NO_REDRAW) == 0) { + vd->use_intr = 1; + vcons_redraw_screen(scr); + } + } else if (dirty > 0) { if ((scr->scr_flags & VCONS_NO_REDRAW) == 0) vcons_update_screen(scr); } @@ -1280,7 +1285,7 @@ { /* the 'dev' arg we pass to config_interrupts isn't a device_t */ struct vcons_data *vd = (struct vcons_data *)dev; - vd->use_intr = 1; + vd->use_intr = 2; callout_schedule(&vd->intr, mstohz(33)); } #endif /* VCONS_DRAW_INTR */ @@ -1309,7 +1314,7 @@ if (!vd->intr_valid) return; - vd->use_intr = 1; + vd->use_intr = 2; if (scr) atomic_inc_uint(&scr->scr_dirty); #endif Index: sys/dev/wscons/wsdisplayvar.h =================================================================== RCS file: /cvsroot/src/sys/dev/wscons/wsdisplayvar.h,v retrieving revision 1.50 diff -u -r1.50 wsdisplayvar.h --- sys/dev/wscons/wsdisplayvar.h 31 Jan 2013 10:57:30 -0000 1.50 +++ sys/dev/wscons/wsdisplayvar.h 20 Jan 2014 19:36:47 -0000 @@ -163,6 +163,7 @@ long); void wsdisplay_preattach(const struct wsscreen_descr *, void *, int, int, long); +void wsdisplay_cndetach(void); int wsdisplaydevprint(void *, const char *); int wsemuldisplaydevprint(void *, const char *);