unsigned short video_port_status = vga_video_port_reg + 6;
        int font_select = 0x00, beg, i;
        char *charmap;
-       
+       bool clear_attribs = false;
        if (vga_video_type != VIDEO_TYPE_EGAM) {
                charmap = (char *) VGA_MAP_MEM(colourmap, 0);
                beg = 0x0e;
 
        /* if 512 char mode is already enabled don't re-enable it. */
        if ((set) && (ch512 != vga_512_chars)) {
-               /* attribute controller */
-               for (i = 0; i < MAX_NR_CONSOLES; i++) {
-                       struct vc_data *c = vc_cons[i].d;
-                       if (c && c->vc_sw == &vga_con)
-                               c->vc_hi_font_mask = ch512 ? 0x0800 : 0;
-               }
                vga_512_chars = ch512;
                /* 256-char: enable intensity bit
                   512-char: disable intensity bit */
                   it means, but it works, and it appears necessary */
                inb_p(video_port_status);
                vga_wattr(state->vgabase, VGA_AR_ENABLE_DISPLAY, 0);    
+               clear_attribs = true;
        }
        raw_spin_unlock_irq(&vga_lock);
+
+       if (clear_attribs) {
+               for (i = 0; i < MAX_NR_CONSOLES; i++) {
+                       struct vc_data *c = vc_cons[i].d;
+                       if (c && c->vc_sw == &vga_con) {
+                               /* force hi font mask to 0, so we always clear
+                                  the bit on either transition */
+                               c->vc_hi_font_mask = 0x00;
+                               clear_buffer_attributes(c);
+                               c->vc_hi_font_mask = ch512 ? 0x0800 : 0;
+                       }
+               }
+       }
        return 0;
 }
 
 
 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)