From: Alex Hornung Date: Sun, 29 Aug 2010 16:17:20 +0000 (+0100) Subject: MPSAFE TTY - get rid of tokens in console path X-Git-Url: https://gitweb.dragonflybsd.org/~mneumann/dragonfly.git/commitdiff_plain/5688255a2465ea75743dbf7967ff76164c91aefe MPSAFE TTY - get rid of tokens in console path * The console path (coming through tty_cons.c) can never block, so do not try to acquire tokens there. Reported-by: Jan Lentfer --- diff --git a/sys/dev/misc/dcons/dcons_os.c b/sys/dev/misc/dcons/dcons_os.c index 08e10b389a..55304c9ddd 100644 --- a/sys/dev/misc/dcons/dcons_os.c +++ b/sys/dev/misc/dcons/dcons_os.c @@ -243,7 +243,6 @@ dcons_os_getc(struct dcons_softc *dc) static void dcons_os_putc(struct dcons_softc *dc, int c) { - lwkt_gettoken(&tty_token); if (dg.dma_tag != NULL) bus_dmamap_sync(dg.dma_tag, dg.dma_map, BUS_DMASYNC_POSTWRITE); @@ -251,7 +250,6 @@ dcons_os_putc(struct dcons_softc *dc, int c) if (dg.dma_tag != NULL) bus_dmamap_sync(dg.dma_tag, dg.dma_map, BUS_DMASYNC_PREWRITE); - lwkt_reltoken(&tty_token); } static int dcons_open(struct dev_open_args *ap) @@ -432,7 +430,6 @@ dcons_cnprobe(struct consdev *cp) static void dcons_cninit(struct consdev *cp) { - lwkt_gettoken(&tty_token); dcons_drv_init(0); #if CONS_NODEV cp->cn_arg @@ -440,7 +437,6 @@ dcons_cninit(struct consdev *cp) cp->cn_private #endif = (void *)&sc[DCONS_CON]; /* share port0 with unit0 */ - lwkt_reltoken(&tty_token); } static void diff --git a/sys/dev/misc/syscons/scvgarndr.c b/sys/dev/misc/syscons/scvgarndr.c index 26bf40a2ac..681fff78a2 100644 --- a/sys/dev/misc/syscons/scvgarndr.c +++ b/sys/dev/misc/syscons/scvgarndr.c @@ -53,7 +53,7 @@ * XXX: this still doesn't quite work with tokens (mainly vga_txtcursor*), * so temporarily disable tokens here. */ -#if 1 +#if 0 #define lwkt_gettoken(x) #define lwkt_reltoken(x) #endif @@ -177,9 +177,7 @@ vga_nop(scr_stat *scp, ...) static void vga_txtborder(scr_stat *scp, int color) { - lwkt_gettoken(&tty_token); (*vidsw[scp->sc->adapter]->set_border)(scp->sc->adp, color); - lwkt_reltoken(&tty_token); } static void @@ -210,7 +208,7 @@ vga_txtcursor_shape(scr_stat *scp, int base, int height, int blink) { if (base < 0 || base >= scp->font_size) return; - lwkt_gettoken(&tty_token); + /* the caller may set height <= 0 in order to disable the cursor */ #if 0 scp->cursor_base = base; @@ -219,7 +217,7 @@ vga_txtcursor_shape(scr_stat *scp, int base, int height, int blink) (*vidsw[scp->sc->adapter]->set_hw_cursor_shape)(scp->sc->adp, base, height, scp->font_size, blink); - lwkt_reltoken(&tty_token); + } static void @@ -231,7 +229,6 @@ draw_txtcharcursor(scr_stat *scp, int at, u_short c, u_short a, int flip) scp->cursor_saveunder_char = c; scp->cursor_saveunder_attr = a; - //lwkt_gettoken(&tty_token); #ifndef SC_NO_FONT_LOADING if (sc->flags & SC_CHAR_CURSOR) { unsigned char *font; @@ -284,7 +281,6 @@ draw_txtcharcursor(scr_stat *scp, int at, u_short c, u_short a, int flip) | ((a & 0x7000) >> 4) | ((a & 0x0700) << 4); sc_vtb_putc(&scp->scr, at, c, a); } - //lwkt_reltoken(&tty_token); } static void @@ -296,7 +292,6 @@ vga_txtcursor(scr_stat *scp, int at, int blink, int on, int flip) if (scp->cursor_height <= 0) /* the text cursor is disabled */ return; - //lwkt_gettoken(&tty_token); adp = scp->sc->adp; if (blink) { scp->status |= VR_CURSOR_BLINK; @@ -332,7 +327,6 @@ vga_txtcursor(scr_stat *scp, int at, int blink, int on, int flip) scp->status &= ~VR_CURSOR_ON; } } - //lwkt_reltoken(&tty_token); } static void @@ -354,8 +348,6 @@ draw_txtmouse(scr_stat *scp, int x, int y) int xoffset, yoffset; int i; - lwkt_gettoken(&tty_token); - /* prepare mousepointer char's bitmaps */ pos = (y/scp->font_size - scp->yoff)*scp->xsize + x/8 - scp->xoff; bcopy(scp->font + sc_vtb_getc(&scp->scr, pos)*scp->font_size, @@ -427,7 +419,6 @@ draw_txtmouse(scr_stat *scp, int x, int y) sc_vtb_putc(&scp->scr, pos, sc_vtb_getc(&scp->scr, pos), color); } - lwkt_reltoken(&tty_token); } static void diff --git a/sys/dev/misc/syscons/syscons.c b/sys/dev/misc/syscons/syscons.c index dff53316c4..72854f0b52 100644 --- a/sys/dev/misc/syscons/syscons.c +++ b/sys/dev/misc/syscons/syscons.c @@ -1506,13 +1506,11 @@ scstart(struct tty *tp) u_char buf[PCBURST]; scr_stat *scp = SC_STAT(tp->t_dev); - lwkt_gettoken(&tty_token); syscons_lock(); if (scp->status & SLKED || (scp == scp->sc->cur_scp && scp->sc->blink_in_progress)) { syscons_unlock(); - lwkt_reltoken(&tty_token); return; } if (!(tp->t_state & (TS_TIMEOUT | TS_BUSY | TS_TTSTOP))) { @@ -1526,7 +1524,6 @@ scstart(struct tty *tp) ttwwakeup(tp); } syscons_unlock(); - lwkt_reltoken(&tty_token); } static void @@ -1535,7 +1532,6 @@ sccnprobe(struct consdev *cp) int unit; int flags; - lwkt_gettoken(&tty_token); cp->cn_pri = sc_get_cons_priority(&unit, &flags); /* a video card is always required */ @@ -1546,7 +1542,6 @@ sccnprobe(struct consdev *cp) sckbdprobe(unit, flags, TRUE); if (cp->cn_pri == CN_DEAD) { - lwkt_reltoken(&tty_token); return; } @@ -1560,12 +1555,10 @@ sccninit(struct consdev *cp) int unit; int flags; - lwkt_gettoken(&tty_token); sc_get_cons_priority(&unit, &flags); scinit(unit, flags | SC_KERNEL_CONSOLE); sc_console_unit = unit; sc_console = sc_get_softc(unit, SC_KERNEL_CONSOLE)->console_scp; - lwkt_reltoken(&tty_token); } static void @@ -1584,7 +1577,6 @@ sccnterm(struct consdev *cp) if (sc_console_unit < 0) return; /* shouldn't happen */ - lwkt_gettoken(&tty_token); #if 0 /* XXX */ sc_clear_screen(sc_console); sccnupdate(sc_console); @@ -1592,7 +1584,6 @@ sccnterm(struct consdev *cp) scterm(sc_console_unit, SC_KERNEL_CONSOLE); sc_console_unit = -1; sc_console = NULL; - lwkt_reltoken(&tty_token); } static void @@ -1607,7 +1598,6 @@ sccnputc(void *private, int c) /* assert(sc_console != NULL) */ - lwkt_gettoken(&tty_token); syscons_lock(); #ifndef SC_NO_HISTORY if (scp == scp->sc->cur_scp && scp->status & SLKED) { @@ -1638,7 +1628,6 @@ sccnputc(void *private, int c) sccnupdate(scp); syscons_unlock(); - lwkt_reltoken(&tty_token); } static int @@ -1664,7 +1653,6 @@ sccndbctl(void *private, int on) * and the screen is updated before switching to * the vty0. */ - lwkt_gettoken(&tty_token); scrn_timer(NULL); if (!cold && sc_console->sc->cur_scp->smode.mode == VT_AUTO @@ -1672,7 +1660,6 @@ sccndbctl(void *private, int on) sc_console->sc->cur_scp->status |= MOUSE_HIDDEN; sc_switch_scr(sc_console->sc, sc_console->index); } - lwkt_reltoken(&tty_token); } if (on) ++debugger; @@ -1690,7 +1677,6 @@ sccngetch(int flags) int cur_mode; int c; - lwkt_gettoken(&tty_token); syscons_lock(); /* assert(sc_console != NULL) */ @@ -1704,12 +1690,10 @@ sccngetch(int flags) syscons_unlock(); if (fkeycp < fkey.len) { - lwkt_reltoken(&tty_token); return fkey.str[fkeycp++]; } if (scp->sc->kbd == NULL) { - lwkt_reltoken(&tty_token); return -1; } @@ -1736,7 +1720,6 @@ sccngetch(int flags) switch (KEYFLAGS(c)) { case 0: /* normal char */ - lwkt_reltoken(&tty_token); return KEYCHAR(c); case FKEY: /* function key */ p = kbd_get_fkeystr(scp->sc->kbd, KEYCHAR(c), (size_t *)&fkeycp); @@ -1747,12 +1730,10 @@ sccngetch(int flags) lwkt_reltoken(&tty_token); return fkey.str[0]; } - lwkt_reltoken(&tty_token); return c; /* XXX */ case NOKEY: case ERRKEY: default: - lwkt_reltoken(&tty_token); return -1; } /* NOT REACHED */ @@ -1765,14 +1746,12 @@ sccnupdate(scr_stat *scp) lwkt_gettoken(&tty_token); if (scp->sc->font_loading_in_progress || scp->sc->videoio_in_progress) { - lwkt_reltoken(&tty_token); return; } if (debugger > 0 || panicstr || shutdown_in_progress) { sc_touch_scrn_saver(); } else if (scp != scp->sc->cur_scp) { - lwkt_reltoken(&tty_token); return; } @@ -1786,7 +1765,6 @@ sccnupdate(scr_stat *scp) if (scp != scp->sc->cur_scp || scp->sc->blink_in_progress || scp->sc->switch_in_progress) { - lwkt_reltoken(&tty_token); return; } /* @@ -1796,7 +1774,6 @@ sccnupdate(scr_stat *scp) if (!ISGRAPHSC(scp) && !(scp->sc->flags & SC_SCRN_BLANKED)) scrn_update(scp, TRUE); - lwkt_reltoken(&tty_token); } static void @@ -1920,7 +1897,6 @@ scrn_update(scr_stat *scp, int show_cursor) /* assert(scp == scp->sc->cur_scp) */ - lwkt_gettoken(&tty_token); ++scp->sc->videoio_in_progress; #ifndef SC_NO_CUTPASTE @@ -1992,7 +1968,6 @@ scrn_update(scr_stat *scp, int show_cursor) scp->end = 0; scp->start = scp->xsize*scp->ysize - 1; --scp->sc->videoio_in_progress; - lwkt_reltoken(&tty_token); return; } @@ -2032,7 +2007,6 @@ scrn_update(scr_stat *scp, int show_cursor) scp->start = scp->xsize*scp->ysize - 1; --scp->sc->videoio_in_progress; - lwkt_reltoken(&tty_token); } #if NSPLASH > 0 @@ -2042,7 +2016,6 @@ scsplash_callback(int event, void *arg) sc_softc_t *sc; int error; - lwkt_gettoken(&tty_token); sc = (sc_softc_t *)arg; switch (event) { @@ -2055,7 +2028,6 @@ scsplash_callback(int event, void *arg) (*current_saver)(sc, TRUE); } } - lwkt_reltoken(&tty_token); return 0; case SPLASH_TERM: @@ -2063,15 +2035,12 @@ scsplash_callback(int event, void *arg) scsplash_stick(FALSE); error = remove_scrn_saver(scsplash_saver); if (error) { - lwkt_reltoken(&tty_token); return error; } } - lwkt_reltoken(&tty_token); return 0; default: - lwkt_reltoken(&tty_token); return EINVAL; } } @@ -2085,7 +2054,6 @@ scsplash_saver(sc_softc_t *sc, int show) if (busy) return; busy = TRUE; - lwkt_gettoken(&tty_token); scp = sc->cur_scp; if (show) { @@ -2112,7 +2080,6 @@ scsplash_saver(sc_softc_t *sc, int show) restore_scrn_saver_mode(scp, TRUE); } busy = FALSE; - lwkt_reltoken(&tty_token); } static int @@ -2157,16 +2124,13 @@ remove_scrn_saver(void (*this_saver)(sc_softc_t *, int)) if (scrn_blanked) stop_scrn_saver(this_saver); #endif - lwkt_gettoken(&tty_token); /* unblank all blanked screens */ wait_scrn_saver_stop(NULL); if (scrn_blanked) { - lwkt_reltoken(&tty_token); return EBUSY; } current_saver = none_saver; - lwkt_reltoken(&tty_token); return 0; } @@ -2175,7 +2139,6 @@ set_scrn_saver_mode(scr_stat *scp, int mode, u_char *pal, int border) { /* assert(scp == scp->sc->cur_scp) */ - lwkt_gettoken(&tty_token); crit_enter(); if (!ISGRAPHSC(scp)) sc_remove_cursor_image(scp); @@ -2199,7 +2162,6 @@ set_scrn_saver_mode(scr_stat *scp, int mode, u_char *pal, int border) load_palette(scp->sc->adp, pal); #endif sc_set_border(scp, border); - lwkt_reltoken(&tty_token); return 0; } else { crit_enter(); @@ -2207,7 +2169,6 @@ set_scrn_saver_mode(scr_stat *scp, int mode, u_char *pal, int border) scp->status &= ~(UNKNOWN_MODE | SAVER_RUNNING); scp->status |= scp->splash_save_status; crit_exit(); - lwkt_reltoken(&tty_token); return 1; } /* NOTREACHED */ @@ -2220,7 +2181,6 @@ restore_scrn_saver_mode(scr_stat *scp, int changemode) int status; /* assert(scp == scp->sc->cur_scp) */ - lwkt_gettoken(&tty_token); crit_enter(); mode = scp->mode; status = scp->status; @@ -2233,7 +2193,6 @@ restore_scrn_saver_mode(scr_stat *scp, int changemode) sc_draw_cursor_image(scp); --scrn_blanked; crit_exit(); - lwkt_reltoken(&tty_token); return 0; } if (set_mode(scp) == 0) { @@ -2242,13 +2201,11 @@ restore_scrn_saver_mode(scr_stat *scp, int changemode) #endif --scrn_blanked; crit_exit(); - lwkt_reltoken(&tty_token); return 0; } else { scp->mode = mode; scp->status = status; crit_exit(); - lwkt_reltoken(&tty_token); return 1; } /* NOTREACHED */ @@ -2257,7 +2214,6 @@ restore_scrn_saver_mode(scr_stat *scp, int changemode) static void stop_scrn_saver(sc_softc_t *sc, void (*saver)(sc_softc_t *, int)) { - lwkt_gettoken(&tty_token); (*saver)(sc, FALSE); run_scrn_saver = FALSE; /* the screen saver may have chosen not to stop after all... */ @@ -2270,7 +2226,6 @@ stop_scrn_saver(sc_softc_t *sc, void (*saver)(sc_softc_t *, int)) if (sc->delayed_next_scr) sc_switch_scr(sc, sc->delayed_next_scr - 1); wakeup((caddr_t)&scrn_blanked); - lwkt_reltoken(&tty_token); } static int @@ -2692,7 +2647,6 @@ exchange_scr(sc_softc_t *sc) static void sc_puts(scr_stat *scp, u_char *buf, int len) { - lwkt_gettoken(&tty_token); #if NSPLASH > 0 /* make screensaver happy */ if (!sticky_splash && scp == scp->sc->cur_scp) @@ -2705,13 +2659,11 @@ sc_puts(scr_stat *scp, u_char *buf, int len) if (scp->sc->delayed_next_scr) sc_switch_scr(scp->sc, scp->sc->delayed_next_scr - 1); - lwkt_reltoken(&tty_token); } void sc_draw_cursor_image(scr_stat *scp) { - lwkt_gettoken(&tty_token); /* assert(scp == scp->sc->cur_scp); */ ++scp->sc->videoio_in_progress; (*scp->rndr->draw_cursor)(scp, scp->cursor_pos, @@ -2719,20 +2671,17 @@ sc_draw_cursor_image(scr_stat *scp) sc_inside_cutmark(scp, scp->cursor_pos)); scp->cursor_oldpos = scp->cursor_pos; --scp->sc->videoio_in_progress; - lwkt_reltoken(&tty_token); } void sc_remove_cursor_image(scr_stat *scp) { - lwkt_gettoken(&tty_token); /* assert(scp == scp->sc->cur_scp); */ ++scp->sc->videoio_in_progress; (*scp->rndr->draw_cursor)(scp, scp->cursor_oldpos, scp->sc->flags & SC_BLINK_CURSOR, FALSE, sc_inside_cutmark(scp, scp->cursor_oldpos)); --scp->sc->videoio_in_progress; - lwkt_reltoken(&tty_token); } static void @@ -2740,7 +2689,6 @@ update_cursor_image(scr_stat *scp) { int blink; - lwkt_gettoken(&tty_token); if (scp->sc->flags & SC_CHAR_CURSOR) { scp->cursor_base = imax(0, scp->sc->cursor_base); scp->cursor_height = imin(scp->sc->cursor_height, scp->font_size); @@ -2758,13 +2706,11 @@ update_cursor_image(scr_stat *scp) (*scp->rndr->draw_cursor)(scp, scp->cursor_pos, blink, TRUE, sc_inside_cutmark(scp, scp->cursor_pos)); --scp->sc->videoio_in_progress; - lwkt_reltoken(&tty_token); } void sc_set_cursor_image(scr_stat *scp) { - lwkt_gettoken(&tty_token); if (scp->sc->flags & SC_CHAR_CURSOR) { scp->cursor_base = imax(0, scp->sc->cursor_base); scp->cursor_height = imin(scp->sc->cursor_height, scp->font_size); @@ -2778,7 +2724,6 @@ sc_set_cursor_image(scr_stat *scp) (*scp->rndr->set_cursor)(scp, scp->cursor_base, scp->cursor_height, scp->sc->flags & SC_BLINK_CURSOR); --scp->sc->videoio_in_progress; - lwkt_reltoken(&tty_token); } static void diff --git a/sys/dev/serial/sio/sio.c b/sys/dev/serial/sio/sio.c index 6c24c53892..75dc2492d5 100644 --- a/sys/dev/serial/sio/sio.c +++ b/sys/dev/serial/sio/sio.c @@ -734,6 +734,7 @@ sioprobe(device_t dev, int xrid, u_long rclk) kprintf("sio%d: can't drain, serial port might " "not exist, disabling\n", device_get_unit(dev)); com_unlock(); + lwkt_reltoken(&tty_token); return (ENXIO); } @@ -2867,15 +2868,11 @@ CONS_DRIVER(sio, siocnprobe, siocninit, siocninit_fini, #include #endif -/* - * NOTE: Must be called with tty_token held - */ static void siocntxwait(Port_t iobase) { int timo; - ASSERT_LWKT_TOKEN_HELD(&tty_token); /* * Wait for any pending transmission to finish. Required to avoid * the UART lockup bug when the speed is changed, and for normal @@ -2906,7 +2903,6 @@ siocngetspeed(Port_t iobase, u_long rclk) u_char dlbl; u_char cfcr; - ASSERT_LWKT_TOKEN_HELD(&tty_token); cfcr = inb(iobase + com_cfcr); outb(iobase + com_cfcr, CFCR_DLAB | cfcr); @@ -2930,7 +2926,6 @@ siocnopen(struct siocnstate *sp, Port_t iobase, int speed) u_char dlbh; u_char dlbl; - lwkt_gettoken(&tty_token); /* * Save all the device control registers except the fifo register * and set our default ones (cs8 -parenb speed=comdefaultrate). @@ -2964,13 +2959,11 @@ siocnopen(struct siocnstate *sp, Port_t iobase, int speed) * an interrupt by floating the IRQ line. */ outb(iobase + com_mcr, (sp->mcr & MCR_IENABLE) | MCR_DTR | MCR_RTS); - lwkt_reltoken(&tty_token); } static void siocnclose(struct siocnstate *sp, Port_t iobase) { - lwkt_gettoken(&tty_token); /* * Restore the device control registers. */ @@ -2986,7 +2979,6 @@ siocnclose(struct siocnstate *sp, Port_t iobase) */ outb(iobase + com_mcr, sp->mcr | MCR_DTR | MCR_RTS); outb(iobase + com_ier, sp->ier); - lwkt_reltoken(&tty_token); } static void @@ -3014,7 +3006,6 @@ siocnprobe(struct consdev *cp) */ cp->cn_pri = CN_DEAD; - lwkt_gettoken(&tty_token); for (unit = 0; unit < 16; unit++) { /* XXX need to know how many */ int flags; int disabled; @@ -3048,6 +3039,7 @@ siocnprobe(struct consdev *cp) * need to set the speed in hardware so that * switching it later is null. */ + com_lock(); cfcr = inb(iobase + com_cfcr); outb(iobase + com_cfcr, CFCR_DLAB | cfcr); divisor = siodivisor(comdefaultrclk, comdefaultrate); @@ -3056,6 +3048,7 @@ siocnprobe(struct consdev *cp) outb(iobase + com_cfcr, cfcr); siocnopen(&sp, iobase, comdefaultrate); + com_unlock(); crit_exit(); if (COM_CONSOLE(flags) && !COM_LLCONSOLE(flags)) { @@ -3097,7 +3090,6 @@ siocnprobe(struct consdev *cp) } #endif #endif - lwkt_reltoken(&tty_token); } static void @@ -3136,11 +3128,11 @@ siocncheckc(void *private) Port_t iobase; struct siocnstate sp; - lwkt_gettoken(&tty_token); if (unit == siogdbunit) iobase = siogdbiobase; else iobase = siocniobase; + com_lock(); crit_enter(); siocnopen(&sp, iobase, comdefaultrate); if (inb(iobase + com_lsr) & LSR_RXRDY) @@ -3149,7 +3141,7 @@ siocncheckc(void *private) c = -1; siocnclose(&sp, iobase); crit_exit(); - lwkt_reltoken(&tty_token); + com_unlock(); return (c); } @@ -3162,11 +3154,11 @@ siocngetc(void *private) Port_t iobase; struct siocnstate sp; - lwkt_gettoken(&tty_token); if (unit == siogdbunit) iobase = siogdbiobase; else iobase = siocniobase; + com_lock(); crit_enter(); siocnopen(&sp, iobase, comdefaultrate); while (!(inb(iobase + com_lsr) & LSR_RXRDY)) @@ -3174,7 +3166,7 @@ siocngetc(void *private) c = inb(iobase + com_data); siocnclose(&sp, iobase); crit_exit(); - lwkt_reltoken(&tty_token); + com_unlock(); return (c); } @@ -3185,18 +3177,18 @@ siocnputc(void *private, int c) struct siocnstate sp; Port_t iobase; - lwkt_gettoken(&tty_token); if (unit == siogdbunit) iobase = siogdbiobase; else iobase = siocniobase; + com_lock(); crit_enter(); siocnopen(&sp, iobase, comdefaultrate); siocntxwait(iobase); outb(iobase + com_data, c); siocnclose(&sp, iobase); crit_exit(); - lwkt_reltoken(&tty_token); + com_unlock(); } DRIVER_MODULE(sio, isa, sio_isa_driver, sio_devclass, 0, 0); diff --git a/sys/platform/vkernel/platform/console.c b/sys/platform/vkernel/platform/console.c index 70e1133d70..167a16f9e0 100644 --- a/sys/platform/vkernel/platform/console.c +++ b/sys/platform/vkernel/platform/console.c @@ -265,10 +265,8 @@ static struct consdev *vconsole; static void vconsprobe(struct consdev *cp) { - lwkt_gettoken(&tty_token); cp->cn_pri = CN_NORMAL; cp->cn_probegood = 1; - lwkt_reltoken(&tty_token); } /* @@ -283,7 +281,6 @@ vconssignal(int sig) struct sigaction sa, osa; sigset_t ss, oss; - lwkt_gettoken(&tty_token); tcgetattr(0, &curtio); tcsetattr(0, TCSAFLUSH, &init_tio); bzero(&sa, sizeof(sa)); @@ -297,7 +294,6 @@ vconssignal(int sig) sigprocmask(SIG_SETMASK, &oss, NULL); sigaction(sig, &osa, NULL); tcsetattr(0, TCSAFLUSH, &curtio); - lwkt_reltoken(&tty_token); } static void @@ -311,7 +307,6 @@ vconswinch_intr(void *arg __unused, void *frame __unused) { struct winsize newsize; - lwkt_gettoken(&tty_token); if (vconsole != NULL && vconsole->cn_dev->si_tty != NULL) { ioctl(0, TIOCGWINSZ, &newsize); /* @@ -325,7 +320,6 @@ vconswinch_intr(void *arg __unused, void *frame __unused) pgsignal(vconsole->cn_dev->si_tty->t_pgrp, SIGWINCH, 1); } } - lwkt_reltoken(&tty_token); } static void @@ -334,10 +328,8 @@ vconscleanup(void) /* * We might catch stray SIGIOs, so try hard. */ - lwkt_gettoken(&tty_token); while (tcsetattr(0, TCSAFLUSH, &init_tio) != 0 && errno == EINTR) /* NOTHING */; - lwkt_reltoken(&tty_token); } static void @@ -347,7 +339,6 @@ vconsinit(struct consdev *cp) vconsole = cp; - lwkt_gettoken(&tty_token); tcgetattr(0, &init_tio); bzero(&sa, sizeof(sa)); sigemptyset(&sa.sa_mask); @@ -357,7 +348,6 @@ vconsinit(struct consdev *cp) sigaction(SIGTERM, &sa, NULL); atexit(vconscleanup); vcons_set_mode(0); - lwkt_reltoken(&tty_token); } static void @@ -403,7 +393,6 @@ vconsgetc(void *private) unsigned char c; ssize_t n; - lwkt_gettoken(&tty_token); console_stolen_by_kernel = 1; for (;;) { n = pread(0, &c, 1, -1); @@ -414,7 +403,6 @@ vconsgetc(void *private) panic("vconsgetc: EOF on console %d %d", n ,errno); } console_stolen_by_kernel = 0; - lwkt_reltoken(&tty_token); return((int)c); } @@ -441,9 +429,7 @@ vcons_set_mode(int in_debugger) { struct termios tio; - lwkt_gettoken(&tty_token); if (tcgetattr(0, &tio) < 0) { - lwkt_reltoken(&tty_token); return; } cfmakeraw(&tio); @@ -459,5 +445,4 @@ vcons_set_mode(int in_debugger) tio.c_cc[VSTATUS] = _POSIX_VDISABLE; } tcsetattr(0, TCSAFLUSH, &tio); - lwkt_reltoken(&tty_token); } diff --git a/sys/platform/vkernel64/platform/console.c b/sys/platform/vkernel64/platform/console.c index 76065d73a4..7e827380c7 100644 --- a/sys/platform/vkernel64/platform/console.c +++ b/sys/platform/vkernel64/platform/console.c @@ -281,7 +281,6 @@ vconssignal(int sig) struct sigaction sa, osa; sigset_t ss, oss; - lwkt_gettoken(&tty_token); tcgetattr(0, &curtio); tcsetattr(0, TCSAFLUSH, &init_tio); bzero(&sa, sizeof(sa)); @@ -295,7 +294,6 @@ vconssignal(int sig) sigprocmask(SIG_SETMASK, &oss, NULL); sigaction(sig, &osa, NULL); tcsetattr(0, TCSAFLUSH, &curtio); - lwkt_reltoken(&tty_token); } static void @@ -309,7 +307,6 @@ vconswinch_intr(void *arg __unused, void *frame __unused) { struct winsize newsize; - lwkt_gettoken(&tty_token); if (vconsole != NULL && vconsole->cn_dev->si_tty != NULL) { ioctl(0, TIOCGWINSZ, &newsize); /* @@ -323,7 +320,6 @@ vconswinch_intr(void *arg __unused, void *frame __unused) pgsignal(vconsole->cn_dev->si_tty->t_pgrp, SIGWINCH, 1); } } - lwkt_reltoken(&tty_token); } static void @@ -332,10 +328,8 @@ vconscleanup(void) /* * We might catch stray SIGIOs, so try hard. */ - lwkt_gettoken(&tty_token); while (tcsetattr(0, TCSAFLUSH, &init_tio) != 0 && errno == EINTR) /* NOTHING */; - lwkt_reltoken(&tty_token); } static void @@ -345,7 +339,6 @@ vconsinit(struct consdev *cp) vconsole = cp; - lwkt_gettoken(&tty_token); tcgetattr(0, &init_tio); bzero(&sa, sizeof(sa)); sigemptyset(&sa.sa_mask); @@ -355,7 +348,6 @@ vconsinit(struct consdev *cp) sigaction(SIGTERM, &sa, NULL); atexit(vconscleanup); vcons_set_mode(0); - lwkt_reltoken(&tty_token); } static void @@ -437,9 +429,7 @@ vcons_set_mode(int in_debugger) { struct termios tio; - lwkt_gettoken(&tty_token); if (tcgetattr(0, &tio) < 0) { - lwkt_reltoken(&tty_token); return; } cfmakeraw(&tio); @@ -455,5 +445,4 @@ vcons_set_mode(int in_debugger) tio.c_cc[VSTATUS] = _POSIX_VDISABLE; } tcsetattr(0, TCSAFLUSH, &tio); - lwkt_reltoken(&tty_token); }