summaryrefslogtreecommitdiffstats
path: root/sys/dev/vt
diff options
context:
space:
mode:
authorcem <cem@FreeBSD.org>2015-08-21 15:21:56 +0000
committercem <cem@FreeBSD.org>2015-08-21 15:21:56 +0000
commitc9f89bd96335c76c44a8d978e9a4c83142eceb94 (patch)
tree72ed30174d0953be0b91dedf32a94a1aa30decdc /sys/dev/vt
parentd8331fd329ed1e8c26c618c9e8806da7bcdc33bf (diff)
downloadFreeBSD-src-c9f89bd96335c76c44a8d978e9a4c83142eceb94.zip
FreeBSD-src-c9f89bd96335c76c44a8d978e9a4c83142eceb94.tar.gz
vt_cpulogos: Resize all terms/windows when tearing down logos
PR: 202288 (partial) Tested by: Jakob Alvermark Reviewed by: ed Approved by: markj (mentor) Sponsored by: EMC / Isilon Storage Division Differential Revision: https://reviews.freebsd.org/D3388
Diffstat (limited to 'sys/dev/vt')
-rw-r--r--sys/dev/vt/vt.h1
-rw-r--r--sys/dev/vt/vt_core.c3
-rw-r--r--sys/dev/vt/vt_cpulogos.c66
3 files changed, 35 insertions, 35 deletions
diff --git a/sys/dev/vt/vt.h b/sys/dev/vt/vt.h
index 78d3d7d..61e7b82 100644
--- a/sys/dev/vt/vt.h
+++ b/sys/dev/vt/vt.h
@@ -369,6 +369,7 @@ struct vt_driver {
* Utility macro to make early vt(4) instances work.
*/
+extern struct vt_device vt_consdev;
extern struct terminal vt_consterm;
extern const struct terminal_class vt_termclass;
void vt_upgrade(struct vt_device *vd);
diff --git a/sys/dev/vt/vt_core.c b/sys/dev/vt/vt_core.c
index 702df42..40be782 100644
--- a/sys/dev/vt/vt_core.c
+++ b/sys/dev/vt/vt_core.c
@@ -144,7 +144,6 @@ VT_SYSCTL_INT(splash_cpu_style, 2, "Draw logo style "
"(0 = Alternate beastie, 1 = Beastie, 2 = Orb)");
VT_SYSCTL_INT(splash_cpu_duration, 10, "Hide logos after (seconds)");
-static struct vt_device vt_consdev;
static unsigned int vt_unit = 0;
static MALLOC_DEFINE(M_VT, "vt", "vt device");
struct vt_device *main_vd = &vt_consdev;
@@ -187,7 +186,7 @@ SET_DECLARE(vt_drv_set, struct vt_driver);
struct terminal vt_consterm;
static struct vt_window vt_conswindow;
-static struct vt_device vt_consdev = {
+struct vt_device vt_consdev = {
.vd_driver = NULL,
.vd_softc = NULL,
.vd_prev_driver = NULL,
diff --git a/sys/dev/vt/vt_cpulogos.c b/sys/dev/vt/vt_cpulogos.c
index af604a8..9a581d0 100644
--- a/sys/dev/vt/vt_cpulogos.c
+++ b/sys/dev/vt/vt_cpulogos.c
@@ -152,6 +152,7 @@ vt_fini_logos(void *dummy __unused)
struct vt_font *vf;
struct winsize wsz;
term_pos_t size;
+ unsigned int i;
if (!vt_draw_logo_cpus)
return;
@@ -160,44 +161,43 @@ vt_fini_logos(void *dummy __unused)
if (!vt_splash_cpu)
return;
- tm = &vt_consterm;
- vw = tm->tm_softc;
- if (vw == NULL)
- return;
- vd = vw->vw_device;
- if (vd == NULL)
- return;
- vf = vw->vw_font;
- if (vf == NULL)
- return;
-
+ vd = &vt_consdev;
VT_LOCK(vd);
- if ((vd->vd_flags & (VDF_DEAD | VDF_TEXTMODE)) != 0)
- goto out;
-
+ if ((vd->vd_flags & (VDF_DEAD | VDF_TEXTMODE)) != 0) {
+ VT_UNLOCK(vd);
+ return;
+ }
vt_draw_logo_cpus = 0;
VT_UNLOCK(vd);
- vt_termsize(vd, vf, &size);
- vt_winsize(vd, vf, &wsz);
-
- /* Resize screen buffer and terminal. */
- terminal_mute(tm, 1);
- vtbuf_grow(&vw->vw_buf, &size, vw->vw_buf.vb_history_size);
- terminal_set_winsize_blank(tm, &wsz, 0, NULL);
- terminal_set_cursor(tm, &vw->vw_buf.vb_cursor);
- terminal_mute(tm, 0);
-
- VT_LOCK(vd);
- vt_compute_drawable_area(vw);
-
- if (vd->vd_curwindow == vw) {
- vd->vd_flags |= VDF_INVALID;
- vt_resume_flush_timer(vd, 0);
+ for (i = 0; i < VT_MAXWINDOWS; i++) {
+ vw = vd->vd_windows[i];
+ if (vw == NULL)
+ continue;
+ tm = vw->vw_terminal;
+ vf = vw->vw_font;
+ if (vf == NULL)
+ continue;
+
+ vt_termsize(vd, vf, &size);
+ vt_winsize(vd, vf, &wsz);
+
+ /* Resize screen buffer and terminal. */
+ terminal_mute(tm, 1);
+ vtbuf_grow(&vw->vw_buf, &size, vw->vw_buf.vb_history_size);
+ terminal_set_winsize_blank(tm, &wsz, 0, NULL);
+ terminal_set_cursor(tm, &vw->vw_buf.vb_cursor);
+ terminal_mute(tm, 0);
+
+ VT_LOCK(vd);
+ vt_compute_drawable_area(vw);
+
+ if (vd->vd_curwindow == vw) {
+ vd->vd_flags |= VDF_INVALID;
+ vt_resume_flush_timer(vd, 0);
+ }
+ VT_UNLOCK(vd);
}
-
-out:
- VT_UNLOCK(vd);
}
static void
OpenPOWER on IntegriCloud