diff options
author | Dave Airlie <airlied@redhat.com> | 2013-01-24 14:14:19 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-02-07 12:37:03 +1000 |
commit | 2a2483072393b27f4336ab068a1f48ca19ff1c1e (patch) | |
tree | 388d0b8d5f208db9dabcca235a4da79a8bafd1ff /include/linux/vt_kern.h | |
parent | 1589a3e7777631ff56dd58cd7dcdf275185e62b5 (diff) | |
download | linux-stable-2a2483072393b27f4336ab068a1f48ca19ff1c1e.tar.gz linux-stable-2a2483072393b27f4336ab068a1f48ca19ff1c1e.tar.bz2 linux-stable-2a2483072393b27f4336ab068a1f48ca19ff1c1e.zip |
vgacon/vt: clear buffer attributes when we load a 512 character font (v2)
When we switch from 256->512 byte font rendering mode, it means the
current contents of the screen is being reinterpreted. The bit that holds
the high bit of the 9-bit font, may have been previously set, and thus
the new font misrenders.
The problem case we see is grub2 writes spaces with the bit set, so it
ends up with data like 0x820, which gets reinterpreted into 0x120 char
which the font translates into G with a circumflex. This flashes up on
screen at boot and is quite ugly.
A current side effect of this patch though is that any rendering on the
screen changes color to a slightly darker color, but at least the screen
no longer corrupts.
v2: as suggested by hpa, always clear the attribute space, whether we
are are going to or from 512 chars.
Cc: stable@vger.kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'include/linux/vt_kern.h')
-rw-r--r-- | include/linux/vt_kern.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/vt_kern.h b/include/linux/vt_kern.h index 50ae7d0c279e..1f55665d7b49 100644 --- a/include/linux/vt_kern.h +++ b/include/linux/vt_kern.h @@ -47,6 +47,7 @@ int con_set_cmap(unsigned char __user *cmap); int con_get_cmap(unsigned char __user *cmap); void scrollback(struct vc_data *vc, int lines); void scrollfront(struct vc_data *vc, int lines); +void clear_buffer_attributes(struct vc_data *vc); void update_region(struct vc_data *vc, unsigned long start, int count); void redraw_screen(struct vc_data *vc, int is_switch); #define update_screen(x) redraw_screen(x, 0) |