Module Name: src Committed By: hans Date: Sun Mar 9 18:50:20 UTC 2025
Modified Files: src/sys/arch/vax/vsa: spx.c Log Message: vax/spx(4): fix a few X11-related bugs - overwriting of saved screen pointer of emulation mode when switching the framebuffer mode from mapped to dumb or vice-versa - leaving the cursor on when switching away from emulation mode - failure to restore the screen when changing back to emulation mode because the saved screen pointer has been set to NULL - panic on next VT switch, because now also the current screen pointer is NULL To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/arch/vax/vsa/spx.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/vax/vsa/spx.c diff -u src/sys/arch/vax/vsa/spx.c:1.12 src/sys/arch/vax/vsa/spx.c:1.13 --- src/sys/arch/vax/vsa/spx.c:1.12 Sat Aug 7 16:19:07 2021 +++ src/sys/arch/vax/vsa/spx.c Sun Mar 9 18:50:20 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: spx.c,v 1.12 2021/08/07 16:19:07 thorpej Exp $ */ +/* $NetBSD: spx.c,v 1.13 2025/03/09 18:50:20 hans Exp $ */ /* * SPX/LCSPX/SPXg/SPXgt accelerated framebuffer driver for NetBSD/VAX * Copyright (c) 2005 Blaz Antonic @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: spx.c,v 1.12 2021/08/07 16:19:07 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: spx.c,v 1.13 2025/03/09 18:50:20 hans Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -991,9 +991,14 @@ spx_ioctl(void *v, void *vs, u_long cmd, if (savescr != NULL) spx_show_screen(NULL, savescr, 0, NULL, NULL); savescr = NULL; - } else { /* WSDISPLAYIO_MODE_MAPPED */ - savescr = curscr; - curscr = NULL; + } else { /* WSDISPLAYIO_MODE_{MAPPED,DUMBFB} */ + if (curscr != NULL) { + savescr = curscr; + curscr = NULL; + + /* disable cursor */ + set_btreg(SPXDAC_REG_CCR, 0x01); + } /* clear screen? */ } @@ -1094,9 +1099,11 @@ spx_show_screen(void *v, void *cookie, i c = ss->ss_image[idx].data; /* check if cell requires updating */ - if ((c != prevscr->ss_image[idx].data) || + if (prevscr == NULL || + (c != prevscr->ss_image[idx].data) || (attr != prevscr->ss_image[idx].attr)) { - if (c < 32) c = 32; + if (c < 32) + c = 32; spx_putchar(ss, row, col, c, attr); } }