un-tokenize savers
authorAlex Hornung <ahornung@gmail.com>
Wed, 22 Sep 2010 10:55:48 +0000 (11:55 +0100)
committerAlex Hornung <ahornung@gmail.com>
Wed, 22 Sep 2010 10:55:48 +0000 (11:55 +0100)
* Un-tokenize all savers again. We can't simply tokenize around vidsw[]
  that easily because the saver functions are called from the console
  paths, too (cnputc, ...)

* Regarding vidsw we'll eventually have to find a different solution to
  lock it up. The current approach can't work.

Reported-by: Sascha Wildner (swildner@)
sys/dev/misc/syscons/blank/blank_saver.c
sys/dev/misc/syscons/fade/fade_saver.c
sys/dev/misc/syscons/fred/fred_saver.c
sys/dev/misc/syscons/green/green_saver.c
sys/dev/misc/syscons/snake/snake_saver.c
sys/dev/misc/syscons/star/star_saver.c

index 3718782..7c8d456 100644 (file)
@@ -48,10 +48,8 @@ static int blanked;
 static int
 blank_saver(video_adapter_t *adp, int blank)
 {
-       lwkt_gettoken(&tty_token);
 
        if (blank == blanked) {
-               lwkt_reltoken(&tty_token);
                return 0;
        }
 
@@ -60,21 +58,17 @@ blank_saver(video_adapter_t *adp, int blank)
 
        blanked = blank;
 
-       lwkt_reltoken(&tty_token);
        return 0;
 }
 
 static int
 blank_init(video_adapter_t *adp)
 {
-       lwkt_gettoken(&tty_token);
 
        if ((*vidsw[adp->va_index]->blank_display)(adp, V_DISPLAY_ON) == 0) {
-               lwkt_reltoken(&tty_token);
                return 0;
        }
 
-       lwkt_reltoken(&tty_token);
        return ENODEV;
 }
 
index dbac16a..2169df2 100644 (file)
@@ -53,7 +53,6 @@ fade_saver(video_adapter_t *adp, int blank)
        u_char pal[256*3];
        int i;
 
-       lwkt_gettoken(&tty_token);
 
        if (blank) {
                blanked = TRUE;
@@ -85,21 +84,17 @@ fade_saver(video_adapter_t *adp, int blank)
                }
                blanked = FALSE;
        }
-       lwkt_reltoken(&tty_token);
        return 0;
 }
 
 static int
 fade_init(video_adapter_t *adp)
 {
-       lwkt_gettoken(&tty_token);
        if (!ISPALAVAIL(adp->va_flags)
            && (*vidsw[adp->va_index]->blank_display)(adp, V_DISPLAY_ON) != 0) {
-               lwkt_reltoken(&tty_token);
                return ENODEV;
        }
        blanked = FALSE;
-       lwkt_reltoken(&tty_token);
        return 0;
 }
 
index 95095ad..8611ae8 100644 (file)
@@ -120,14 +120,12 @@ clear_fred(sc_softc_t *sc, int xpos, int ypos, int dxdir, int xoff, int yoff,
        if (xlen <= 0)
                return;
 
-       lwkt_gettoken(&tty_token);
        for (y = yoff; y < ylen; y++) {
                sc_vtb_erase(&sc->cur_scp->scr,
                             (ypos + y)*sc->cur_scp->xsize + xpos + xoff,
                             xlen - xoff,
                             sc->scr_map[0x20], (FG_LIGHTGREY | BG_BLACK) << 8);
        }
-       lwkt_reltoken(&tty_token);
 }
 
 static void
@@ -138,7 +136,6 @@ draw_fred(sc_softc_t *sc, int xpos, int ypos, int dxdir, int xoff, int yoff,
        int px;
        int attr;
 
-       lwkt_gettoken(&tty_token);
        for (y = yoff; y < ylen; y++) {
                if (dxdir < 0)
                        px = xoff;
@@ -169,7 +166,6 @@ draw_fred(sc_softc_t *sc, int xpos, int ypos, int dxdir, int xoff, int yoff,
                        }
                }
        }
-       lwkt_reltoken(&tty_token);
 }
 
 static void
@@ -177,11 +173,9 @@ clear_string(sc_softc_t *sc, int xpos, int ypos, int xoff, char *s, int len)
 {
        if (len <= 0)
                return;
-       lwkt_gettoken(&tty_token);
        sc_vtb_erase(&sc->cur_scp->scr,
                     ypos*sc->cur_scp->xsize + xpos + xoff, len - xoff,
                     sc->scr_map[0x20], (FG_LIGHTGREY | BG_BLACK) << 8);
-       lwkt_reltoken(&tty_token);
 }
 
 static void
@@ -189,13 +183,11 @@ draw_string(sc_softc_t *sc, int xpos, int ypos, int xoff, char *s, int len)
 {
        int x;
 
-       lwkt_gettoken(&tty_token);
        for (x = xoff; x < len; x++) {
                sc_vtb_putc(&sc->cur_scp->scr,
                            ypos*sc->cur_scp->xsize + xpos + x,
                            sc->scr_map[(int)s[x]], (FG_LIGHTBLUE | BG_BLACK) << 8);
        }
-       lwkt_reltoken(&tty_token);
 }
 
 static int
@@ -212,17 +204,14 @@ fred_saver(video_adapter_t *adp, int blank)
        scr_stat *scp;
        int min, max;
 
-       lwkt_gettoken(&tty_token);
        sc = sc_find_softc(adp, NULL);
        if (sc == NULL) {
-               lwkt_reltoken(&tty_token);
                return EAGAIN;
        }
        scp = sc->cur_scp;
 
        if (blank) {
                if (adp->va_info.vi_flags & V_INFO_GRAPHICS) {
-                       lwkt_reltoken(&tty_token);
                        return EAGAIN;
                }
                if (blanked == 0) {
@@ -234,7 +223,6 @@ fred_saver(video_adapter_t *adp, int blank)
                        xlen = ylen = tlen = 0;
                }
                if (blanked++ < 2) {
-                       lwkt_reltoken(&tty_token);
                        return 0;
                }
                blanked = 1;
@@ -350,7 +338,6 @@ fred_saver(video_adapter_t *adp, int blank)
        } else {
                blanked = 0;
        }
-       lwkt_reltoken(&tty_token);
        return 0;
 }
 
index 09e2a29..c3e4c3b 100644 (file)
@@ -48,10 +48,8 @@ static int blanked;
 static int
 green_saver(video_adapter_t *adp, int blank)
 {
-       lwkt_gettoken(&tty_token);
 
        if (blank == blanked) {
-               lwkt_reltoken(&tty_token);
                return 0;
        }
 
@@ -60,21 +58,17 @@ green_saver(video_adapter_t *adp, int blank)
 
        blanked = blank;
 
-       lwkt_reltoken(&tty_token);
        return 0;
 }
 
 static int
 green_init(video_adapter_t *adp)
 {
-       lwkt_gettoken(&tty_token);
 
        if ((*vidsw[adp->va_index]->blank_display)(adp, V_DISPLAY_ON) == 0) {
-               lwkt_reltoken(&tty_token);
                return 0;
        }
 
-       lwkt_reltoken(&tty_token);
        return ENODEV;
 }
 
index b0682df..a9069d2 100644 (file)
@@ -64,18 +64,15 @@ snake_saver(video_adapter_t *adp, int blank)
 #define        save    message
 #define        savs    messagep
 
-       lwkt_gettoken(&tty_token);
 
        sc = sc_find_softc(adp, NULL);
        if (sc == NULL) {
-               lwkt_reltoken(&tty_token);
                return EAGAIN;
        }
        scp = sc->cur_scp;
 
        if (blank) {
                if (adp->va_info.vi_flags & V_INFO_GRAPHICS) {
-                       lwkt_reltoken(&tty_token);
                        return EAGAIN;
                }
                if (blanked <= 0) {
@@ -93,7 +90,6 @@ snake_saver(video_adapter_t *adp, int blank)
                        blanked = 1;
                }
                if (blanked++ < 4) {
-                       lwkt_reltoken(&tty_token);
                        return 0;
                }
                blanked = 1;
@@ -118,7 +114,6 @@ snake_saver(video_adapter_t *adp, int blank)
                blanked = 0;
        }
 
-       lwkt_reltoken(&tty_token);
        return 0;
 }
 
index fba5847..ab71b52 100644 (file)
@@ -64,17 +64,14 @@ star_saver(video_adapter_t *adp, int blank)
                                    FG_WHITE, FG_LIGHTCYAN};
        static u_short  stars[NUM_STARS][2];
 
-       lwkt_gettoken(&tty_token);
        sc = sc_find_softc(adp, NULL);
        if (sc == NULL) {
-               lwkt_reltoken(&tty_token);
                return EAGAIN;
        }
        scp = sc->cur_scp;
 
        if (blank) {
                if (adp->va_info.vi_flags & V_INFO_GRAPHICS) {
-                       lwkt_reltoken(&tty_token);
                        return EAGAIN;
                }
                if (!blanked) {
@@ -102,7 +99,6 @@ star_saver(video_adapter_t *adp, int blank)
        else
                blanked = FALSE;
 
-       lwkt_reltoken(&tty_token);
        return 0;
 }