Index: sys/amd64/amd64/pmap.c =================================================================== --- sys/amd64/amd64/pmap.c (revision 286835) +++ sys/amd64/amd64/pmap.c (working copy) @@ -698,7 +698,7 @@ * the entire 512GB of KVA space which is an unnecessary tax on * physical memory. */ - pt_pages += 8; /* 16MB additional slop for kernel modules */ + pt_pages += 32; /* 64MB additional slop for kernel modules */ #endif nkpt = pt_pages; } Index: sys/dev/vt/hw/fb/vt_fb.c =================================================================== --- sys/dev/vt/hw/fb/vt_fb.c (revision 286835) +++ sys/dev/vt/hw/fb/vt_fb.c (working copy) @@ -294,6 +294,7 @@ if (mask != NULL && (mask[byte] & bit) == 0) continue; o = (y + yi) * info->fb_stride + (x + xi) * bpp; + o += vd->vd_transpose; cc = pattern[byte] & bit ? fgc : bgc; switch(bpp) { @@ -411,11 +412,16 @@ vt_fb_init(struct vt_device *vd) { struct fb_info *info; + u_int margin; int err; info = vd->vd_softc; - vd->vd_height = info->fb_height; - vd->vd_width = info->fb_width; + vd->vd_height = MIN(VT_FB_DEFAULT_HEIGHT, info->fb_height); + margin = (info->fb_height - vd->vd_height) >> 1; + vd->vd_transpose = margin * info->fb_stride; + vd->vd_width = MIN(VT_FB_DEFAULT_WIDTH, info->fb_width); + margin = (info->fb_width - vd->vd_width) >> 1; + vd->vd_transpose += margin * (info->fb_bpp / NBBY); vd->vd_video_dev = info->fb_video_dev; if (info->fb_size == 0) Index: sys/dev/vt/vt.h =================================================================== --- sys/dev/vt/vt.h (revision 286835) +++ sys/dev/vt/vt.h (working copy) @@ -140,6 +140,7 @@ uint32_t vd_mstate; /* (?) Mouse state. */ vt_axis_t vd_width; /* (?) Screen width. */ vt_axis_t vd_height; /* (?) Screen height. */ + size_t vd_transpose; struct mtx vd_lock; /* Per-device lock. */ struct cv vd_winswitch; /* (d) Window switch notify. */ struct callout vd_timer; /* (d) Display timer. */