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);
}
}